class Kontena::Cli::Stacks::ServiceGenerator

Attributes

service_config[R]

Public Class Methods

new(service_config) click to toggle source
# File lib/kontena/cli/stacks/service_generator.rb, line 11
def initialize(service_config)
  @service_config = service_config
end

Public Instance Methods

generate() click to toggle source

@return [Hash]

# File lib/kontena/cli/stacks/service_generator.rb, line 17
def generate
  parse_data(service_config)
end

Private Instance Methods

parse_build_options(options) click to toggle source

@param [Hash] options @return [Hash]

# File lib/kontena/cli/stacks/service_generator.rb, line 114
def parse_build_options(options)
  build = {}
  build['context'] = options['build'] if options['build']
  build['dockerfile'] = options['dockerfile'] if options['dockerfile']
  build
end
parse_data(options) click to toggle source

@param [Hash] options @return [Hash]

# File lib/kontena/cli/stacks/service_generator.rb, line 26
def parse_data(options)
  data = {}
  data['instances'] = options['instances']
  data['image'] = parse_image(options['image'])
  data['env'] = options['environment'] || options['env']
  data['links'] = parse_links(options['links'] || [])
  data['external_links'] = parse_links(options['external_links'] || [])
  data['ports'] = parse_stringified_ports(options['ports'] || [])
  data['memory'] = parse_memory(options['mem_limit'].to_s) if options['mem_limit']
  data['memory_swap'] = parse_memory(options['memswap_limit'].to_s) if options['memswap_limit']
  data['shm_size'] = parse_memory(options['shm_size'].to_s) if options['shm_size']
  data['cpus'] = options['cpus'] if options['cpus']
  data['cpu_shares'] = options['cpu_shares'] if options['cpu_shares']
  data['volumes'] = options['volumes'] || []
  data['volumes_from'] = options['volumes_from'] || []
  data['cmd'] = Shellwords.split(options['command']) if options['command']
  data['affinity'] = options['affinity'] || []
  data['user'] = options['user'] if options['user']
  data['stateful'] = options['stateful'] == true
  data['privileged'] = options['privileged'] unless options['privileged'].nil?
  data['cap_add'] = options['cap_add'] if options['cap_add']
  data['cap_drop'] = options['cap_drop'] if options['cap_drop']
  data['net'] = options['net'] if options['net']
  data['pid'] = options['pid'] if options['pid']
  data['log_driver'] = options['log_driver'] if options['log_driver']
  data['log_opts'] = options['log_opt'] if options['log_opt'] && !options['log_opt'].empty?
  deploy_opts = options['deploy'] || {}
  data['strategy'] = deploy_opts['strategy'] if deploy_opts['strategy']
  deploy = {
    'wait_for_port' => deploy_opts['wait_for_port'],
    'min_health' => deploy_opts['min_health']
  }
  if deploy_opts.has_key?('interval')
    deploy['interval'] = parse_relative_time(deploy_opts['interval'])
  else
    deploy['interval'] = nil
  end
  data['deploy_opts'] = deploy
  data['hooks'] = options['hooks'] || {}
  data['secrets'] = options['secrets'] if options['secrets']
  data['certificates'] = options['certificates'] if options['certificates']
  data['build'] = parse_build_options(options) if options['build']
  data['health_check'] = parse_health_check(options)
  data['stop_signal'] = options['stop_signal'] if options['stop_signal']
  data['stop_grace_period'] = options['stop_grace_period'] if options['stop_grace_period']
  data['read_only'] = options['read_only'] || false
  data['entrypoint'] = options['entrypoint'] if options['entrypoint']
  data
end
parse_health_check(options) click to toggle source

@param [Hash] options @return [Hash]

# File lib/kontena/cli/stacks/service_generator.rb, line 123
def parse_health_check(options)
  health_check = {}
  %w(port protocol uri timeout interval initial_delay).each do |k|
    health_check[k] = options.dig('health_check', k)
  end
  health_check
end
parse_stringified_ports(port_options) click to toggle source

@param [Array<String>] port_options @return [Array<Hash>]

# File lib/kontena/cli/stacks/service_generator.rb, line 78
def parse_stringified_ports(port_options)
  parse_ports(port_options).map {|p|
    {
      'ip' => p[:ip],
      'container_port' => p[:container_port],
      'node_port' => p[:node_port],
      'protocol' => p[:protocol]
    }
  }
end