lib/kontena/cli/apps/common.rb in kontena-cli-0.8.4 vs lib/kontena/cli/apps/common.rb in kontena-cli-0.9.0
- old
+ new
@@ -2,16 +2,16 @@
module Kontena::Cli::Apps
module Common
include Kontena::Cli::Services::ServicesHelper
- def load_services_from_yml
- @service_prefix = project_name || current_dir
-
+ def require_config_file(filename)
abort("File #{filename} does not exist") unless File.exists?(filename)
- services = parse_yml_file(filename, nil, service_prefix)
+ end
+ def load_services(filename, service_list, prefix)
+ services = parse_services(filename, nil, prefix)
services.delete_if { |name, service| !service_list.include?(name)} unless service_list.empty?
services
end
def token
@@ -30,26 +30,55 @@
def service_exists?(name)
get_service(token, prefixed_name(name)) rescue false
end
- def parse_yml_file(file, name = nil, prefix='')
- services = YAML.load(File.read(file) % {prefix: prefix})
+ def parse_services(file, name = nil, prefix='')
+ services = YAML.load(File.read(File.expand_path(file)) % {project: prefix})
+ Dir.chdir(File.dirname(File.expand_path(file)))
services.each do |name, options|
+ normalize_env_vars(options)
if options.has_key?('extends')
- extends = options['extends']
+ extension_file = options['extends']['file']
+ service_name = options['extends']['service']
options.delete('extends')
- services[name] = parse_yml_file(extends['file'], extends['service']).merge(options)
+ services[name] = extend_options(options, extension_file , service_name, prefix)
end
- if options.has_key?('build')
- options.delete('build')
- end
-
end
if name.nil?
services
else
services[name]
end
+ end
+
+ def extend_options(options, file, service_name, prefix)
+ parent_options = parse_services(file, service_name, prefix)
+ options['environment'] = extend_env_vars(parent_options, options)
+ parent_options.merge(options)
+ end
+
+ def normalize_env_vars(options)
+ if options['environment'].is_a?(Hash)
+ options['environment'] = options['environment'].map{|k, v| "#{k}=#{v}"}
+ end
+ end
+
+ def extend_env_vars(from, to)
+ env_vars = to['environment'] || []
+ if from['environment']
+ from['environment'].each do |env|
+ env_vars << env unless to['environment'] && to['environment'].find {|key| key.split('=').first == env.split('=').first}
+ end
+ end
+ env_vars
+ end
+
+ def dockerfile_exist?
+ !dockerfile.nil?
+ end
+
+ def dockerfile
+ @dockerfile ||= File.new('Dockerfile') rescue nil
end
end
end