class Rhea::Kubernetes::Commands::Scale

Attributes

command[RW]

Public Class Methods

new(command_attributes) click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 7
def initialize(command_attributes)
  self.command = Command.new(command_attributes)
end

Public Instance Methods

perform() click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 11
def perform
  if is_replication_controller_running?
    scale_replication_controller
  else
    start_replication_controller
  end
end

Private Instance Methods

format_env_vars(env_vars) click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 96
def format_env_vars(env_vars)
  hash = env_vars.merge(Rhea.configuration.env_vars)
  hash.map do |name, value|
    {
      'name' => name,
      'value' => value
    }
  end
end
is_replication_controller_running?() click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 21
def is_replication_controller_running?
  api.get_replication_controllers(label_selector: "name=#{command.key}").length > 0
end
parse_command_expression() click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 78
def parse_command_expression
  match = command.expression.match(/((?:[A-Z]+=[^\s]+\s+)+)?(.*)/)
  env_vars_string = match[1]
  raw_command_expression = match[2]
  env_vars = {}
  if env_vars_string.present?
    env_vars_strings = env_vars_string.strip.split(/\s+/)
    env_vars_strings.each do |string|
      name, value = string.split('=')
      env_vars[name] = value
    end
  end
  {
    raw_command_expression: raw_command_expression,
    env_vars: env_vars
  }
end
scale_replication_controller() click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 72
def scale_replication_controller
  controller = api.get_replication_controllers(label_selector: "name=#{command.key}").first
  controller.spec.replicas = command.process_count
  api.update_replication_controller(controller)
end
start_replication_controller() click to toggle source
# File lib/rhea/kubernetes/commands/scale.rb, line 25
def start_replication_controller
  parsed_command_expression = parse_command_expression
  raw_command_expression = parsed_command_expression[:raw_command_expression]
  env_vars = parsed_command_expression[:env_vars]
  formatted_env_vars = format_env_vars(env_vars)

  container_config = {
    'name' => command.key,
    'image' => command.image,
    'env' => formatted_env_vars,
    'command' => raw_command_expression.split(/\s+/)
  }.merge(Rhea.configuration.container_options)

  controller = Kubeclient::ReplicationController.new
  controller.metadata = {
    'name' => command.key,
    'namespace' => NAMESPACE,
    'labels' => {
      'name' => command.key
    },
    'annotations' => {
      'rhea_command' => command.expression
    }
  }
  controller.spec = {
    'replicas' => command.process_count,
    'selector' => {
      'name' => command.key
    },
    'template' => {
      'metadata' => {
        'labels' => {
          'name' => command.key
        },
        'annotations' => {
          'rhea_command' => command.expression
        }
      },
      'spec' => {
        'containers' => [container_config]
      }
    }
  }

  api.create_replication_controller(controller)
end