kontena-cli 0.16.0.pre5 → 0.16.0.pre6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +3 -0
- data/VERSION +1 -1
- data/bin/kontena +4 -3
- data/lib/kontena/callbacks/master/deploy/05_before_deploy_configuration_wizard.rb +1 -3
- data/lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb +1 -1
- data/lib/kontena/callbacks/master/deploy/55_create_initial_grid_after_deploy.rb +1 -8
- data/lib/kontena/callbacks/master/deploy/90_suggest_inviting_yourself_after_deploy.rb +1 -1
- data/lib/kontena/cli/apps/build_command.rb +2 -1
- data/lib/kontena/cli/apps/common.rb +3 -8
- data/lib/kontena/cli/apps/deploy_command.rb +25 -17
- data/lib/kontena/cli/apps/docker_helper.rb +5 -5
- data/lib/kontena/cli/apps/monitor_command.rb +4 -2
- data/lib/kontena/cli/apps/remove_command.rb +7 -7
- data/lib/kontena/cli/apps/restart_command.rb +4 -3
- data/lib/kontena/cli/apps/scale_command.rb +7 -5
- data/lib/kontena/cli/apps/start_command.rb +4 -3
- data/lib/kontena/cli/apps/stop_command.rb +4 -3
- data/lib/kontena/cli/apps/yaml/reader.rb +15 -5
- data/lib/kontena/cli/apps/yaml/validator.rb +4 -0
- data/lib/kontena/cli/apps/yaml/validator_v2.rb +5 -1
- data/lib/kontena/cli/cloud/login_command.rb +1 -1
- data/lib/kontena/cli/cloud/logout_command.rb +14 -0
- data/lib/kontena/cli/cloud/master/show_command.rb +0 -2
- data/lib/kontena/cli/cloud_command.rb +2 -0
- data/lib/kontena/cli/common.rb +98 -26
- data/lib/kontena/cli/containers/inspect_command.rb +1 -1
- data/lib/kontena/cli/etcd/get_command.rb +2 -2
- data/lib/kontena/cli/etcd/list_command.rb +2 -2
- data/lib/kontena/cli/etcd/mkdir_command.rb +1 -1
- data/lib/kontena/cli/etcd/remove_command.rb +1 -1
- data/lib/kontena/cli/etcd/set_command.rb +1 -1
- data/lib/kontena/cli/external_registries/add_command.rb +3 -1
- data/lib/kontena/cli/external_registries/delete_command.rb +1 -1
- data/lib/kontena/cli/external_registries/remove_command.rb +5 -1
- data/lib/kontena/cli/grids/cloud_config_command.rb +1 -1
- data/lib/kontena/cli/grids/create_command.rb +14 -6
- data/lib/kontena/cli/grids/current_command.rb +1 -1
- data/lib/kontena/cli/grids/env_command.rb +2 -2
- data/lib/kontena/cli/grids/list_command.rb +1 -1
- data/lib/kontena/cli/grids/remove_command.rb +6 -5
- data/lib/kontena/cli/grids/show_command.rb +2 -2
- data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +3 -1
- data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +6 -2
- data/lib/kontena/cli/grids/use_command.rb +1 -1
- data/lib/kontena/cli/helpers/log_helper.rb +4 -2
- data/lib/kontena/cli/login_command.rb +1 -1
- data/lib/kontena/cli/logout_command.rb +3 -31
- data/lib/kontena/cli/master/config/export_command.rb +1 -2
- data/lib/kontena/cli/master/config/import_command.rb +3 -4
- data/lib/kontena/cli/master/create_command.rb +1 -2
- data/lib/kontena/cli/master/login_command.rb +10 -12
- data/lib/kontena/cli/master/logout_command.rb +23 -0
- data/lib/kontena/cli/master/use_command.rb +1 -1
- data/lib/kontena/cli/master_command.rb +2 -0
- data/lib/kontena/cli/nodes/labels/remove_command.rb +1 -1
- data/lib/kontena/cli/nodes/remove_command.rb +3 -1
- data/lib/kontena/cli/nodes/update_command.rb +3 -2
- data/lib/kontena/cli/plugins/install_command.rb +9 -2
- data/lib/kontena/cli/plugins/search_command.rb +1 -1
- data/lib/kontena/cli/registry/create_command.rb +9 -8
- data/lib/kontena/cli/registry/delete_command.rb +2 -2
- data/lib/kontena/cli/registry/remove_command.rb +6 -3
- data/lib/kontena/cli/services/create_command.rb +7 -5
- data/lib/kontena/cli/services/delete_command.rb +1 -1
- data/lib/kontena/cli/services/deploy_command.rb +4 -1
- data/lib/kontena/cli/services/envs/add_command.rb +3 -1
- data/lib/kontena/cli/services/envs/remove_command.rb +3 -1
- data/lib/kontena/cli/services/link_command.rb +4 -2
- data/lib/kontena/cli/services/remove_command.rb +15 -1
- data/lib/kontena/cli/services/restart_command.rb +3 -1
- data/lib/kontena/cli/services/scale_command.rb +4 -1
- data/lib/kontena/cli/services/secrets/link_command.rb +9 -7
- data/lib/kontena/cli/services/secrets/unlink_command.rb +1 -1
- data/lib/kontena/cli/services/services_helper.rb +21 -10
- data/lib/kontena/cli/services/start_command.rb +3 -1
- data/lib/kontena/cli/services/stop_command.rb +3 -1
- data/lib/kontena/cli/services/unlink_command.rb +1 -1
- data/lib/kontena/cli/services/update_command.rb +7 -5
- data/lib/kontena/cli/spinner.rb +99 -37
- data/lib/kontena/cli/stacks/common.rb +2 -4
- data/lib/kontena/cli/vault/remove_command.rb +3 -1
- data/lib/kontena/cli/vault/update_command.rb +4 -2
- data/lib/kontena/cli/vault/write_command.rb +4 -2
- data/lib/kontena/cli/vpn/create_command.rb +26 -10
- data/lib/kontena/cli/vpn/delete_command.rb +1 -1
- data/lib/kontena/cli/vpn/remove_command.rb +6 -4
- data/lib/kontena/client.rb +13 -5
- data/lib/kontena/errors.rb +3 -1
- data/lib/kontena_cli.rb +1 -1
- data/spec/fixtures/kontena-malformed-yaml.yml +6 -0
- data/spec/fixtures/kontena-not-hash-service-config.yml +3 -0
- data/spec/kontena/cli/app/docker_helper_spec.rb +2 -2
- data/spec/kontena/cli/app/yaml/reader_spec.rb +48 -0
- data/spec/kontena/cli/cloud/logout_command_spec.rb +37 -0
- data/spec/kontena/cli/common_spec.rb +46 -1
- data/spec/kontena/cli/grids/trusted_subnets/remove_command_spec.rb +3 -3
- data/spec/kontena/cli/master/logout_command_spec.rb +85 -0
- data/spec/kontena/cli/master/use_command_spec.rb +4 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35b0390bffba7709f3efa1c42838fa47483991e5
|
4
|
+
data.tar.gz: 1dc946fc0f3b3e498df9b3a8a766edf7d38ca0ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bf3bda5f481fb4648465cb0fb687fc59341557bf94c78dbb20773fa9fc7ff889c891cab3063f81100a5f00986fd1cebe2847914c1c34f00962563cba2d59101
|
7
|
+
data.tar.gz: a3c18982f577d7cdc29d08d93c963a41414dbc770af349d97cc43f7d2c434f2958c5bade13ef8e6768073de63cebd87e193ebff84dd0ff11f4beac616c5d1389
|
data/Dockerfile
CHANGED
@@ -9,9 +9,12 @@ RUN apk update && \
|
|
9
9
|
ca-certificates libssl1.0 openssl libstdc++ && \
|
10
10
|
gem install kontena-cli --no-rdoc --no-ri -v ${CLI_VERSION} && \
|
11
11
|
adduser kontena -D -h /home/kontena -s /bin/sh && \
|
12
|
+
echo "gem: --user-install" > /home/kontena/.gemrc && \
|
12
13
|
chown -R kontena.kontena /home/kontena && \
|
13
14
|
chmod +sx /usr/local/bin/docker
|
14
15
|
|
16
|
+
ENV PATH=$PATH:/home/kontena/.gem/ruby/2.3.0/bin
|
17
|
+
|
15
18
|
VOLUME ["/home/kontena"]
|
16
19
|
WORKDIR /home/kontena
|
17
20
|
USER kontena
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.16.0.
|
1
|
+
0.16.0.pre6
|
data/bin/kontena
CHANGED
@@ -25,10 +25,11 @@ rescue Excon::Errors::SocketError => exc
|
|
25
25
|
end
|
26
26
|
rescue Kontena::Errors::StandardError => exc
|
27
27
|
raise exc if ENV['DEBUG']
|
28
|
-
|
28
|
+
puts " [#{Kontena.pastel.red('error')}] #{exc.message}"
|
29
|
+
exit 1
|
29
30
|
rescue => exc
|
30
31
|
raise exc if ENV['DEBUG']
|
31
|
-
$stderr.puts "Kontena
|
32
|
-
$stderr.puts "Rerun the command with environment DEBUG=true set to get the full exception"
|
32
|
+
$stderr.puts " [#{Kontena.pastel.red('error')}] #{exc.message}"
|
33
|
+
$stderr.puts " Rerun the command with environment DEBUG=true set to get the full exception"
|
33
34
|
abort
|
34
35
|
end
|
@@ -53,7 +53,7 @@ module Kontena
|
|
53
53
|
if master_id.to_s =~ /^[0-9a-f]{16,32}$/
|
54
54
|
master_id
|
55
55
|
else
|
56
|
-
|
56
|
+
exit_with_error 'Cloud Master registration failed'
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -104,5 +104,3 @@ module Kontena
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
107
|
-
|
108
|
-
|
@@ -33,7 +33,7 @@ module Kontena
|
|
33
33
|
ENV["DEBUG"] && puts("Trying to request / from #{new_master.url}")
|
34
34
|
client = Kontena::Client.new(new_master.url, nil, ignore_ssl_errors: true)
|
35
35
|
client.get('/')
|
36
|
-
rescue
|
36
|
+
rescue
|
37
37
|
ENV["DEBUG"] && puts("HTTPS test failed: #{$!} #{$!.message}")
|
38
38
|
unless retried
|
39
39
|
new_master.url = "http://#{command.result[:public_ip]}"
|
@@ -13,14 +13,7 @@ module Kontena
|
|
13
13
|
|
14
14
|
cmd = "grid create --silent test"
|
15
15
|
ENV["DEBUG"] && puts("Running: #{cmd}")
|
16
|
-
|
17
|
-
spinner "Creating initial grid 'test'" do
|
18
|
-
Kontena.run(cmd)
|
19
|
-
end
|
20
|
-
|
21
|
-
spinner "Selecting 'test' as current grid" do
|
22
|
-
Kontena.run("grid use --silent test")
|
23
|
-
end
|
16
|
+
Kontena.run(cmd)
|
24
17
|
end
|
25
18
|
end
|
26
19
|
end
|
@@ -15,7 +15,7 @@ module Kontena
|
|
15
15
|
puts "Protip:"
|
16
16
|
puts " You are currently using Kontena Master administrator account."
|
17
17
|
puts " Consider inviting yourself as a regular user. Use: "
|
18
|
-
puts " kontena master users invite
|
18
|
+
puts " kontena master users invite --roles master_admin your@email.address.example.com"
|
19
19
|
puts " kontena master join <master_url> <invite_code>"
|
20
20
|
puts
|
21
21
|
end
|
@@ -18,7 +18,8 @@ module Kontena::Cli::Apps
|
|
18
18
|
require_config_file(filename)
|
19
19
|
@services = services_from_yaml(filename, service_list, service_prefix)
|
20
20
|
if services.none?{ |name, service| service['build'] }
|
21
|
-
|
21
|
+
error 'Not found any service with build option'
|
22
|
+
abort
|
22
23
|
end
|
23
24
|
process_docker_images(services, true, no_cache?)
|
24
25
|
end
|
@@ -9,7 +9,7 @@ module Kontena::Cli::Apps
|
|
9
9
|
include Kontena::Cli::Services::ServicesHelper
|
10
10
|
|
11
11
|
def require_config_file(filename)
|
12
|
-
|
12
|
+
exit_with_error("File #{filename} does not exist") unless File.exists?(filename)
|
13
13
|
end
|
14
14
|
|
15
15
|
# @param [String] filename
|
@@ -39,7 +39,7 @@ module Kontena::Cli::Apps
|
|
39
39
|
generator_klass = ServiceGenerator
|
40
40
|
end
|
41
41
|
yaml_services.each do |service_name, config|
|
42
|
-
|
42
|
+
exit_with_error("Image is missing for #{service_name}. Aborting.") unless config['image']
|
43
43
|
services[service_name] = generator_klass.new(config).generate
|
44
44
|
end
|
45
45
|
services
|
@@ -62,12 +62,7 @@ module Kontena::Cli::Apps
|
|
62
62
|
|
63
63
|
def project_name_from_yaml(file)
|
64
64
|
reader = YAML::Reader.new(file, true)
|
65
|
-
|
66
|
-
if outcome[:version].to_i == 2
|
67
|
-
outcome[:name]
|
68
|
-
else
|
69
|
-
nil
|
70
|
-
end
|
65
|
+
reader.stack_name
|
71
66
|
end
|
72
67
|
|
73
68
|
# @return [String]
|
@@ -13,7 +13,8 @@ module Kontena::Cli::Apps
|
|
13
13
|
option ['--no-build'], :flag, 'Don\'t build an image, even if it\'s missing', default: false
|
14
14
|
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
15
15
|
option '--async', :flag, 'Run deploys async/parallel'
|
16
|
-
option '--force
|
16
|
+
option '--force', :flag, 'Force deploy even if service does not have any changes'
|
17
|
+
option '--force-deploy', :flag, '[DEPRECATED: use --force]'
|
17
18
|
|
18
19
|
parameter "[SERVICE] ...", "Services to start"
|
19
20
|
|
@@ -44,13 +45,15 @@ module Kontena::Cli::Apps
|
|
44
45
|
queue.each do |service|
|
45
46
|
name = service['id'].split('/').last
|
46
47
|
options = {}
|
47
|
-
options[:force] = true if force_deploy?
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
options[:force] = true if force? || force_deploy? # deprecated
|
49
|
+
if force_deploy?
|
50
|
+
warning " --force-deploy will deprecate in the future, use --force"
|
51
|
+
end
|
52
|
+
spinner "Deploying #{unprefixed_name(name).colorize(:cyan)} " do
|
53
|
+
deploy_service(token, name, options)
|
54
|
+
unless async?
|
55
|
+
wait_for_deploy_to_finish(token, service['id'])
|
56
|
+
end
|
54
57
|
end
|
55
58
|
end
|
56
59
|
end
|
@@ -90,19 +93,24 @@ module Kontena::Cli::Apps
|
|
90
93
|
# @param [String] name
|
91
94
|
# @param [Hash] options
|
92
95
|
def create(name, options)
|
93
|
-
|
94
|
-
name = prefixed_name(name)
|
95
|
-
data = { 'name' => name }
|
96
|
+
data = { 'name' => prefixed_name(name) }
|
96
97
|
data.merge!(options)
|
97
|
-
|
98
|
+
result = nil
|
99
|
+
spinner "Creating #{name.colorize(:cyan)} " do
|
100
|
+
result = create_service(token, current_grid, data)
|
101
|
+
end
|
102
|
+
result
|
98
103
|
end
|
99
104
|
|
100
|
-
# @param [String]
|
105
|
+
# @param [String] name
|
101
106
|
# @param [Hash] options
|
102
|
-
def update(
|
103
|
-
|
104
|
-
|
105
|
-
|
107
|
+
def update(name, options)
|
108
|
+
prefixed_name = prefixed_name(name)
|
109
|
+
result = nil
|
110
|
+
spinner "Updating #{name.colorize(:cyan)} " do
|
111
|
+
result = update_service(token, prefixed_name, options)
|
112
|
+
end
|
113
|
+
result
|
106
114
|
end
|
107
115
|
|
108
116
|
# @param [String] name
|
@@ -8,8 +8,8 @@ module Kontena::Cli::Apps
|
|
8
8
|
services.each do |name, service|
|
9
9
|
if service['build'] && (!image_exist?(service['image']) || force_build)
|
10
10
|
dockerfile = service['build']['dockerfile'] || 'Dockerfile'
|
11
|
-
|
12
|
-
|
11
|
+
raise ("'#{service['image']}' is not valid Docker image name") unless validate_image_name(service['image'])
|
12
|
+
raise ("'#{service['build']['context']}' does not have #{dockerfile}") unless dockerfile_exist?(service['build']['context'], dockerfile)
|
13
13
|
if service['hooks'] && service['hooks']['pre_build']
|
14
14
|
puts "Running pre_build hook".colorize(:cyan)
|
15
15
|
run_pre_build_hook(service['hooks']['pre_build'])
|
@@ -43,7 +43,7 @@ module Kontena::Cli::Apps
|
|
43
43
|
end
|
44
44
|
cmd << build_context
|
45
45
|
ret = system(cmd.join(' '))
|
46
|
-
|
46
|
+
raise ("Failed to build image #{service['image'].colorize(:cyan)}") unless ret
|
47
47
|
ret
|
48
48
|
end
|
49
49
|
|
@@ -51,7 +51,7 @@ module Kontena::Cli::Apps
|
|
51
51
|
# @return [Integer]
|
52
52
|
def push_docker_image(image)
|
53
53
|
ret = system("docker push #{image}")
|
54
|
-
|
54
|
+
raise ("Failed to push image #{image.colorize(:cyan)}") unless ret
|
55
55
|
ret
|
56
56
|
end
|
57
57
|
|
@@ -73,7 +73,7 @@ module Kontena::Cli::Apps
|
|
73
73
|
def run_pre_build_hook(hook)
|
74
74
|
hook.each do |h|
|
75
75
|
ret = system(h['cmd'])
|
76
|
-
|
76
|
+
raise ("Failed to run pre_build hook: #{h['name']}!") unless ret
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
@@ -78,8 +78,10 @@ module Kontena::Cli::Apps
|
|
78
78
|
|
79
79
|
def colors
|
80
80
|
if(@colors.nil? || @colors.size == 0)
|
81
|
-
@colors =
|
82
|
-
|
81
|
+
@colors = %i(
|
82
|
+
red green yellow blue magenta cyan bright_red bright_green
|
83
|
+
bright_yellow bright_blue bright_magenta bright_cyan
|
84
|
+
)
|
83
85
|
end
|
84
86
|
@colors
|
85
87
|
end
|
@@ -29,6 +29,7 @@ module Kontena::Cli::Apps
|
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
|
+
|
32
33
|
def remove_services(services)
|
33
34
|
services.find_all {|service_name, options| options['links'] && options['links'].size > 0 }.each do |service_name, options|
|
34
35
|
delete(service_name, options, false)
|
@@ -41,17 +42,17 @@ module Kontena::Cli::Apps
|
|
41
42
|
|
42
43
|
def delete(name, options, async = true)
|
43
44
|
unless deleted_services.include?(name)
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
service = get_service(token, prefixed_name(name)) rescue nil
|
46
|
+
if(service)
|
47
|
+
spinner "removing #{pastel.cyan(name)}" do
|
47
48
|
delete_service(token, prefixed_name(name))
|
48
49
|
unless async
|
49
50
|
wait_for_delete_to_finish(service)
|
50
51
|
end
|
51
|
-
deleted_services << name
|
52
|
-
else
|
53
|
-
puts "No such service: #{name}".colorize(:red)
|
54
52
|
end
|
53
|
+
deleted_services << name
|
54
|
+
else
|
55
|
+
warning "No such service #{name}"
|
55
56
|
end
|
56
57
|
end
|
57
58
|
end
|
@@ -63,7 +64,6 @@ module Kontena::Cli::Apps
|
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
66
|
-
|
67
67
|
##
|
68
68
|
#
|
69
69
|
# @return [Array]
|
@@ -27,10 +27,11 @@ module Kontena::Cli::Apps
|
|
27
27
|
def restart_services(services)
|
28
28
|
services.each do |service_name, opts|
|
29
29
|
if service_exists?(service_name)
|
30
|
-
|
31
|
-
|
30
|
+
spinner "Sending restart signal to #{service_name.colorize(:cyan)} " do
|
31
|
+
restart_service(token, prefixed_name(service_name))
|
32
|
+
end
|
32
33
|
else
|
33
|
-
|
34
|
+
warning "No such service: #{service_name}"
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
@@ -19,13 +19,15 @@ module Kontena::Cli::Apps
|
|
19
19
|
yml_service = services_from_yaml(filename, [service], service_prefix)
|
20
20
|
if yml_service[service]
|
21
21
|
options = yml_service[service]
|
22
|
-
|
23
|
-
|
22
|
+
exit_with_error("Service has already instances defined in #{filename}. Please update #{filename} and deploy service instead") if options['container_count']
|
23
|
+
spinner "Scaling #{service.colorize(:cyan)} " do
|
24
|
+
scale_service(require_token, prefixed_name(service), instances)
|
25
|
+
wait_for_deploy_to_finish(token, parse_service_id(prefixed_name(service)))
|
26
|
+
end
|
27
|
+
|
24
28
|
else
|
25
|
-
|
29
|
+
exit_with_error("Service not found")
|
26
30
|
end
|
27
31
|
end
|
28
|
-
|
29
|
-
|
30
32
|
end
|
31
33
|
end
|
@@ -28,10 +28,11 @@ module Kontena::Cli::Apps
|
|
28
28
|
def start_services(services)
|
29
29
|
services.each do |service_name, opts|
|
30
30
|
if service_exists?(service_name)
|
31
|
-
|
32
|
-
|
31
|
+
spinner "Starting #{service_name.colorize(:cyan)} " do
|
32
|
+
start_service(token, prefixed_name(service_name))
|
33
|
+
end
|
33
34
|
else
|
34
|
-
|
35
|
+
warning "No such service: #{service_name}"
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -28,10 +28,11 @@ module Kontena::Cli::Apps
|
|
28
28
|
def stop_services(services)
|
29
29
|
services.each do |service_name, opts|
|
30
30
|
if service_exists?(service_name)
|
31
|
-
|
32
|
-
|
31
|
+
spinner "Sending stop signal to #{service_name.colorize(:cyan)} " do
|
32
|
+
stop_service(token, prefixed_name(service_name))
|
33
|
+
end
|
33
34
|
else
|
34
|
-
|
35
|
+
warning "No such service: #{service_name}"
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -27,13 +27,17 @@ module Kontena::Cli::Apps
|
|
27
27
|
Dir.chdir(File.dirname(File.expand_path(file))) do
|
28
28
|
result[:version] = yaml['version'] || '1'
|
29
29
|
result[:name] = yaml['name']
|
30
|
-
result[:services] = parse_services(service_name)
|
31
30
|
result[:errors] = errors
|
32
31
|
result[:notifications] = notifications
|
32
|
+
result[:services] = parse_services(service_name) unless errors.count > 0
|
33
33
|
end
|
34
34
|
result
|
35
35
|
end
|
36
36
|
|
37
|
+
def stack_name
|
38
|
+
yaml['name'] if v2?
|
39
|
+
end
|
40
|
+
|
37
41
|
##
|
38
42
|
# @return [true|false]
|
39
43
|
def v2?
|
@@ -47,7 +51,11 @@ module Kontena::Cli::Apps
|
|
47
51
|
content = content % { project: ENV['project'], grid: ENV['grid'] }
|
48
52
|
interpolate(content)
|
49
53
|
replace_dollar_dollars(content)
|
50
|
-
|
54
|
+
begin
|
55
|
+
@yaml = ::YAML.load(content)
|
56
|
+
rescue Psych::SyntaxError => e
|
57
|
+
raise "Error while parsing #{file}".colorize(:red)+ " "+e.message
|
58
|
+
end
|
51
59
|
end
|
52
60
|
|
53
61
|
# @return [Array] array of validation errors
|
@@ -80,10 +88,12 @@ module Kontena::Cli::Apps
|
|
80
88
|
# @return [Hash]
|
81
89
|
def parse_services(service_name = nil)
|
82
90
|
if service_name.nil?
|
83
|
-
services.each
|
91
|
+
services.each do |name, config|
|
92
|
+
services[name] = process_config(config)
|
93
|
+
end
|
84
94
|
services
|
85
95
|
else
|
86
|
-
|
96
|
+
raise ("Service '#{service_name}' not found in #{file}") unless services.key?(service_name)
|
87
97
|
process_config(services[service_name])
|
88
98
|
end
|
89
99
|
end
|
@@ -132,7 +142,7 @@ module Kontena::Cli::Apps
|
|
132
142
|
if filename
|
133
143
|
parent_config = from_external_file(filename, extended_service)
|
134
144
|
else
|
135
|
-
|
145
|
+
raise ("Service '#{extended_service}' not found in #{file}") unless services.key?(extended_service)
|
136
146
|
parent_config = process_config(services[extended_service])
|
137
147
|
end
|
138
148
|
ServiceExtender.new(service_config).extend(parent_config)
|
@@ -43,6 +43,10 @@ module Kontena::Cli::Apps
|
|
43
43
|
}
|
44
44
|
|
45
45
|
yaml.each do |service, options|
|
46
|
+
unless options.is_a?(Hash)
|
47
|
+
result[:errors] << { service => { 'options' => 'must be a mapping not a string'} }
|
48
|
+
next
|
49
|
+
end
|
46
50
|
key_errors = validate_keys(options)
|
47
51
|
option_errors = validate_options(options)
|
48
52
|
result[:errors] << { service => option_errors.messages } if option_errors.failure?
|
@@ -53,7 +53,11 @@ module Kontena::Cli::Apps
|
|
53
53
|
notifications: []
|
54
54
|
}
|
55
55
|
if yaml.key?('services')
|
56
|
-
yaml['services'].each do |service, options|
|
56
|
+
yaml['services'].each do |service, options|
|
57
|
+
unless options.is_a?(Hash)
|
58
|
+
result[:errors] << { service => { 'options' => 'must be a mapping not a string'} }
|
59
|
+
next
|
60
|
+
end
|
57
61
|
key_errors = validate_keys(options)
|
58
62
|
option_errors = validate_options(options)
|
59
63
|
result[:errors] << { service => option_errors.messages } if option_errors.failure?
|