Class: PicsolveDockerBuilder::Helpers::Kubernetes::Rc

Inherits:
Resource
  • Object
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_rcObject



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
  # configure the service
  @rc. = {} unless @rc.
  @rc..name = "#{@image.name}-#{@image.composer.hash}"
  @rc..namespace = @image.composer.namespace
  @rc..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

#containersObject



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
  }
  # append environment variables if in place
  if @image.class.instance_methods.include? :environment
    env = @image.environment(@kubernetes)
    c['env'] = env unless env.nil?
  end

  # append liveness probe if required
  liveness_probe = @image.liveness_probe
  c['livenessProbe'] = liveness_probe unless liveness_probe.nil?

  [c]
end

#deployObject



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..name}"
  client.create_replication_controller @rc
end

#existing_rcsObject



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..name.match(/^#{@image.name}/) && \
    rc..namespace == @image.composer.namespace
  end
  rcs.map do |rc|
    Rc.new(@image, @kubernetes, rc)
  end
end

#podsObject



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..namespace,
    label_selector: selector
  ).select do |pod|
    pod..namespace == @rc..namespace
  end

  pods.map do |pod|
    Pod.new(pod, @kubernetes)
  end
end

#pods_orphanObject



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

Returns:

  • (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

#removeObject



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..name}"
  client.delete_replication_controller(
    @rc..name,
    @rc..namespace
  )
  remove_pods
end

#remove_old_rcsObject



126
127
128
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 126

def remove_old_rcs
  @old_rcs.each(&:remove)
end

#remove_podsObject



113
114
115
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 113

def remove_pods
  pods.each(&:remove)
end

#remove_pods_orphanObject



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_podsObject



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

#waitObject



70
71
72
# File 'lib/picsolve_docker_builder/helpers/kubernetes/rc.rb', line 70

def wait
  ready?
end