class Kontena::Cli::Apps::KontenaYmlGenerator
Attributes
image_name[R]
service_prefix[R]
Public Class Methods
new(image_name, service_prefix)
click to toggle source
# File lib/kontena/cli/apps/kontena_yml_generator.rb, line 9 def initialize(image_name, service_prefix) @image_name = image_name @service_prefix = service_prefix end
Public Instance Methods
create_yml(services, filename)
click to toggle source
Calls superclass method
Kontena::Cli::Apps::Common#create_yml
# File lib/kontena/cli/apps/kontena_yml_generator.rb, line 88 def create_yml(services, filename) if File.exist?(filename) && !File.zero?(filename) kontena_services = yml_services(File.read(filename)) services.each do |name, options| if kontena_services[name] services[name].merge!(kontena_services[name]) end end end kontena_services = { 'version' => '2', 'name' => service_prefix, 'services' => services } super(kontena_services, filename) end
generate(procfile, addons, env_file)
click to toggle source
# File lib/kontena/cli/apps/kontena_yml_generator.rb, line 55 def generate(procfile, addons, env_file) image = image_name || "registry.kontena.local/#{File.basename(Dir.getwd)}:latest" if procfile.keys.size > 0 # generate services found in Procfile services = {} procfile.keys.each do |name| services[name] = {'image' => image} services[name]['environment'] = ['PORT=5000'] if app_json && name == 'web' # Heroku generates PORT env variable so should we do too services[name]['command'] = "/start #{name}" if name != 'web' services[name]['env_file'] = env_file if env_file # generate addon services addons.each do |addon| addon_service = addon.split(":")[0] addon_service.slice!('heroku-') if valid_addons.has_key?(addon_service) services[name]['links'] ||= [] services[name]['links'] << "#{addon_service}:#{addon_service}" services[name]['environment'] ||= [] services[name]['environment'] += valid_addons(service_prefix)[addon_service]['environment'] services[addon_service] = {'image' => valid_addons[addon_service]['image'], 'stateful' => true} end end end else # no Procfile found, create dummy web service services = {'web' => { 'image' => image}} services['web']['env_file'] = env_file if env_file end # create kontena.yml file create_yml(services, 'kontena.yml') end
generate_from_compose_file(docker_compose_file)
click to toggle source
# File lib/kontena/cli/apps/kontena_yml_generator.rb, line 14 def generate_from_compose_file(docker_compose_file) services = {} # extend services from docker-compose.yml file = File.read(docker_compose_file) yml_services(file).each do |name, options| services[name] = {'extends' => { 'file' => 'docker-compose.yml', 'service' => name }} if options.has_key?('build') image = image_name || "registry.kontena.local/#{File.basename(Dir.getwd)}:latest" services[name]['image'] = image end # set Heroku addon service as stateful by default if valid_addons.has_key?(name) services[name]['stateful'] = true end # we have to generate Kontena urls to env vars for Heroku addons # redis://openredis:6379 -> redis://project-name-openredis:6379 if options['links'] options['links'].each do |link| service_link = link.split(':').first if valid_addons.has_key?(service_link) services[name]['environment'] ||= [] services[name]['environment'] += valid_addons(service_prefix)[service_link]['environment'] end end end end create_yml(services, 'kontena.yml') end
yml_services(file)
click to toggle source
# File lib/kontena/cli/apps/kontena_yml_generator.rb, line 46 def yml_services(file) yml = ::YAML.safe_load(file) if yml['version'] == '2' yml['services'] else yml end end