Class: PicsolveDockerBuilder::Helpers::Kubernetes::Rc
- Inherits:
-
Resource
- Object
- Resource
- PicsolveDockerBuilder::Helpers::Kubernetes::Rc
show all
- Defined in:
- lib/picsolve_docker_builder/helpers/kubernetes/rc.rb
Overview
Ruby representation of a kuberentes replication cluster
Instance Method Summary
collapse
Methods inherited from Resource
#client, #template_labels
Methods included from Base
#base_dir, #config, #config_file, #config_path, #config_paths, #create_logger, #default_config, #log, #read_config, #validate_config
Constructor Details
#initialize(image, kubernetes, rc = nil) ⇒ Rc
Returns a new instance of Rc.
9
10
11
12
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 9
def initialize(image, kubernetes, rc = nil)
super(image, kubernetes)
@rc = rc
end
|
Instance Method Details
#config_rc ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 24
def config_rc
@rc.metadata = {} unless @rc.metadata
@rc.metadata.name = "#{@image.name}-#{@image.composer.hash}"
@rc.metadata.namespace = @image.composer.namespace
@rc.metadata.labels = template_labels
@rc.spec = {} unless @rc.spec
@rc.spec.replicas = 1
@rc.spec.selector = template_labels_pods
@rc.spec.template = {
'metadata' => {
'labels' => template_labels_pods
},
'spec' => {
'containers' => containers
}
}
end
|
#containers ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 43
def containers
c = {
'name' => @image.name,
'image' => @image.image_name_tag,
'ports' => @image.ports_rc
}
if @image.class.instance_methods.include? :environment
env = @image.environment(@kubernetes)
c['env'] = env unless env.nil?
end
liveness_probe = @image.liveness_probe
c['livenessProbe'] = liveness_probe unless liveness_probe.nil?
[c]
end
|
#deploy ⇒ Object
62
63
64
65
66
67
68
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 62
def deploy
@old_rcs = existing_rcs
@rc = Kubeclient::ReplicationController.new
config_rc
log.debug "create replication controller #{@rc.metadata.name}"
client.create_replication_controller @rc
end
|
#existing_rcs ⇒ Object
14
15
16
17
18
19
20
21
22
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 14
def existing_rcs
rcs = client.get_replication_controllers.select do |rc|
rc.metadata.name.match(/^#{@image.name}/) && \
rc.metadata.namespace == @image.composer.namespace
end
rcs.map do |rc|
Rc.new(@image, @kubernetes, rc)
end
end
|
#pods ⇒ Object
95
96
97
98
99
100
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 95
def pods
pods_by_selector(
"name=#{@rc.spec.selector.name}," \
"deployment=#{@rc.spec.selector.deployment}"
)
end
|
#pods_by_selector(selector) ⇒ Object
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 82
def pods_by_selector(selector)
pods = client.get_pods(
namespace: @rc.metadata.namespace,
label_selector: selector
).select do |pod|
pod.metadata.namespace == @rc.metadata.namespace
end
pods.map do |pod|
Pod.new(pod, @kubernetes)
end
end
|
#pods_orphan ⇒ Object
102
103
104
105
106
107
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 102
def pods_orphan
pods_by_selector(
"name=#{@rc.spec.selector.name}," \
"deployment!=#{@rc.spec.selector.deployment}"
)
end
|
#ready? ⇒ Boolean
74
75
76
77
78
79
80
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 74
def ready?
pods.each do |pod|
result = pod.ready?
return false unless result
end
true
end
|
#remove ⇒ Object
117
118
119
120
121
122
123
124
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 117
def remove
log.debug "remove replication controller #{@rc.metadata.name}"
client.delete_replication_controller(
@rc.metadata.name,
@rc.metadata.namespace
)
remove_pods
end
|
#remove_old_rcs ⇒ Object
126
127
128
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 126
def remove_old_rcs
@old_rcs.each(&:remove)
end
|
#remove_pods ⇒ Object
113
114
115
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 113
def remove_pods
pods.each(&:remove)
end
|
#remove_pods_orphan ⇒ Object
109
110
111
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 109
def remove_pods_orphan
pods_orphan.each(&:remove)
end
|
#template_labels_pods ⇒ Object
130
131
132
133
134
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 130
def template_labels_pods
c = template_labels
c['deployment'] = @image.composer.hash
c
end
|
#wait ⇒ Object
70
71
72
|
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 70
def wait
ready?
end
|