class Kontena::Cli::Apps::ServiceGenerator

Attributes

service_config[R]

Public Class Methods

new(service_config) click to toggle source
# File lib/kontena/cli/apps/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/apps/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/apps/service_generator.rb, line 107
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/apps/service_generator.rb, line 26
def parse_data(options)
  data = {}
  data['instances'] = options['instances']
  data['image'] = parse_image(options['image'])
  data['env'] = options['environment'] if options['environment']
  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['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 = {}
  deploy['wait_for_port'] = deploy_opts['wait_for_port'] if deploy_opts.has_key?('wait_for_port')
  deploy['min_health'] = deploy_opts['min_health'] if deploy_opts.has_key?('min_health')
  deploy['interval'] = parse_relative_time(deploy_opts['interval']) if deploy_opts.has_key?('interval')
  unless deploy.empty?
    data['deploy_opts'] = deploy
  end
  data['hooks'] = options['hooks'] || {}
  data['secrets'] = options['secrets'] if options['secrets']
  data['build'] = parse_build_options(options) if options['build']
  health_check = {}
  health_opts = options['health_check'] || {}
  health_check['protocol'] = health_opts['protocol'] if health_opts.has_key?('protocol')
  health_check['uri'] = health_opts['uri'] if health_opts.has_key?('uri')
  health_check['port'] = health_opts['port'] if health_opts.has_key?('port')
  health_check['timeout'] = health_opts['timeout'] if health_opts.has_key?('timeout')
  health_check['interval'] = health_opts['interval'] if health_opts.has_key?('interval')
  health_check['initial_delay'] = health_opts['initial_delay'] if health_opts.has_key?('initial_delay')
  unless health_check.empty?
    data['health_check'] = health_check
  end
  data
end
parse_stringified_ports(port_options) click to toggle source

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

# File lib/kontena/cli/apps/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