krates 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +212 -0
- data/LOGO +10 -0
- data/VERSION +1 -0
- data/bin/krates +23 -0
- data/lib/kontena/autoload_core.rb +19 -0
- data/lib/kontena/callback.rb +60 -0
- data/lib/kontena/callbacks/.gitkeep +0 -0
- data/lib/kontena/callbacks/auth/01_list_and_select_grid_after_master_auth.rb +26 -0
- data/lib/kontena/callbacks/master/01_clear_current_master_after_terminate.rb +19 -0
- data/lib/kontena/callbacks/master/deploy/01_show_logo_before_deploy.rb +14 -0
- data/lib/kontena/callbacks/master/deploy/04_default_master_version.rb +18 -0
- data/lib/kontena/callbacks/master/deploy/05_before_deploy_configuration_wizard.rb +105 -0
- data/lib/kontena/callbacks/master/deploy/40_install_ssl_certificate_after_deploy.rb +32 -0
- data/lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb +66 -0
- data/lib/kontena/callbacks/master/deploy/55_create_initial_grid_after_deploy.rb +21 -0
- data/lib/kontena/callbacks/master/deploy/56_set_server_provider_after_deploy.rb +24 -0
- data/lib/kontena/callbacks/master/deploy/60_configure_auth_provider_after_deploy.rb +31 -0
- data/lib/kontena/callbacks/master/deploy/70_invite_self_after_deploy.rb +95 -0
- data/lib/kontena/callbacks/master/deploy/90_proptip_after_deploy.rb +33 -0
- data/lib/kontena/cli/browser_launcher.rb +61 -0
- data/lib/kontena/cli/bytes_helper.rb +40 -0
- data/lib/kontena/cli/certificate/authorize_command.rb +107 -0
- data/lib/kontena/cli/certificate/common.rb +16 -0
- data/lib/kontena/cli/certificate/domain_authorization/list_command.rb +24 -0
- data/lib/kontena/cli/certificate/domain_authorization/remove_authorization_command.rb +25 -0
- data/lib/kontena/cli/certificate/domain_authorize_command.rb +7 -0
- data/lib/kontena/cli/certificate/export_command.rb +28 -0
- data/lib/kontena/cli/certificate/get_command.rb +33 -0
- data/lib/kontena/cli/certificate/import_command.rb +61 -0
- data/lib/kontena/cli/certificate/list_command.rb +75 -0
- data/lib/kontena/cli/certificate/register_command.rb +30 -0
- data/lib/kontena/cli/certificate/remove_command.rb +23 -0
- data/lib/kontena/cli/certificate/request_command.rb +20 -0
- data/lib/kontena/cli/certificate/show_command.rb +22 -0
- data/lib/kontena/cli/certificate_command.rb +18 -0
- data/lib/kontena/cli/cloud/login_command.rb +186 -0
- data/lib/kontena/cli/cloud/logout_command.rb +14 -0
- data/lib/kontena/cli/cloud/master/add_command.rb +156 -0
- data/lib/kontena/cli/cloud/master/list_command.rb +35 -0
- data/lib/kontena/cli/cloud/master/remove_command.rb +68 -0
- data/lib/kontena/cli/cloud/master/show_command.rb +21 -0
- data/lib/kontena/cli/cloud/master/update_command.rb +52 -0
- data/lib/kontena/cli/cloud/master_command.rb +14 -0
- data/lib/kontena/cli/cloud_command.rb +13 -0
- data/lib/kontena/cli/common.rb +360 -0
- data/lib/kontena/cli/config.rb +662 -0
- data/lib/kontena/cli/container_command.rb +10 -0
- data/lib/kontena/cli/containers/exec_command.rb +31 -0
- data/lib/kontena/cli/containers/inspect_command.rb +16 -0
- data/lib/kontena/cli/containers/list_command.rb +51 -0
- data/lib/kontena/cli/containers/logs_command.rb +19 -0
- data/lib/kontena/cli/etcd/common.rb +8 -0
- data/lib/kontena/cli/etcd/get_command.rb +26 -0
- data/lib/kontena/cli/etcd/health_command.rb +53 -0
- data/lib/kontena/cli/etcd/list_command.rb +36 -0
- data/lib/kontena/cli/etcd/mkdir_command.rb +23 -0
- data/lib/kontena/cli/etcd/remove_command.rb +29 -0
- data/lib/kontena/cli/etcd/set_command.rb +24 -0
- data/lib/kontena/cli/etcd_command.rb +12 -0
- data/lib/kontena/cli/external_registries/add_command.rb +25 -0
- data/lib/kontena/cli/external_registries/list_command.rb +23 -0
- data/lib/kontena/cli/external_registries/remove_command.rb +17 -0
- data/lib/kontena/cli/external_registry_command.rb +9 -0
- data/lib/kontena/cli/grid_command.rb +21 -0
- data/lib/kontena/cli/grid_options.rb +12 -0
- data/lib/kontena/cli/grids/audit_log_command.rb +22 -0
- data/lib/kontena/cli/grids/cloud_config_command.rb +53 -0
- data/lib/kontena/cli/grids/common.rb +182 -0
- data/lib/kontena/cli/grids/create_command.rb +48 -0
- data/lib/kontena/cli/grids/current_command.rb +25 -0
- data/lib/kontena/cli/grids/env_command.rb +32 -0
- data/lib/kontena/cli/grids/events_command.rb +50 -0
- data/lib/kontena/cli/grids/health_command.rb +69 -0
- data/lib/kontena/cli/grids/list_command.rb +59 -0
- data/lib/kontena/cli/grids/logs_command.rb +35 -0
- data/lib/kontena/cli/grids/remove_command.rb +31 -0
- data/lib/kontena/cli/grids/show_command.rb +25 -0
- data/lib/kontena/cli/grids/trusted_subnet_command.rb +10 -0
- data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +18 -0
- data/lib/kontena/cli/grids/trusted_subnets/list_command.rb +18 -0
- data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +26 -0
- data/lib/kontena/cli/grids/update_command.rb +35 -0
- data/lib/kontena/cli/grids/use_command.rb +26 -0
- data/lib/kontena/cli/grids/user_command.rb +9 -0
- data/lib/kontena/cli/grids/users/add_command.rb +18 -0
- data/lib/kontena/cli/grids/users/list_command.rb +20 -0
- data/lib/kontena/cli/grids/users/remove_command.rb +20 -0
- data/lib/kontena/cli/helpers/exec_helper.rb +209 -0
- data/lib/kontena/cli/helpers/health_helper.rb +65 -0
- data/lib/kontena/cli/helpers/log_helper.rb +113 -0
- data/lib/kontena/cli/helpers/time_helper.rb +29 -0
- data/lib/kontena/cli/localhost_web_server.rb +113 -0
- data/lib/kontena/cli/log_formatters/compact.rb +65 -0
- data/lib/kontena/cli/log_formatters/strip_color.rb +13 -0
- data/lib/kontena/cli/logout_command.rb +10 -0
- data/lib/kontena/cli/master/audit_log_command.rb +19 -0
- data/lib/kontena/cli/master/config/export_command.rb +46 -0
- data/lib/kontena/cli/master/config/get_command.rb +26 -0
- data/lib/kontena/cli/master/config/import_command.rb +67 -0
- data/lib/kontena/cli/master/config/set_command.rb +19 -0
- data/lib/kontena/cli/master/config/unset_command.rb +20 -0
- data/lib/kontena/cli/master/config_command.rb +17 -0
- data/lib/kontena/cli/master/create_command.rb +74 -0
- data/lib/kontena/cli/master/current_command.rb +25 -0
- data/lib/kontena/cli/master/init_cloud_command.rb +45 -0
- data/lib/kontena/cli/master/join_command.rb +22 -0
- data/lib/kontena/cli/master/list_command.rb +24 -0
- data/lib/kontena/cli/master/login_command.rb +331 -0
- data/lib/kontena/cli/master/logout_command.rb +25 -0
- data/lib/kontena/cli/master/remove_command.rb +55 -0
- data/lib/kontena/cli/master/ssh_command.rb +72 -0
- data/lib/kontena/cli/master/token/common.rb +29 -0
- data/lib/kontena/cli/master/token/create_command.rb +50 -0
- data/lib/kontena/cli/master/token/current_command.rb +45 -0
- data/lib/kontena/cli/master/token/list_command.rb +39 -0
- data/lib/kontena/cli/master/token/remove_command.rb +19 -0
- data/lib/kontena/cli/master/token/show_command.rb +34 -0
- data/lib/kontena/cli/master/token_command.rb +13 -0
- data/lib/kontena/cli/master/use_command.rb +31 -0
- data/lib/kontena/cli/master/user/invite_command.rb +51 -0
- data/lib/kontena/cli/master/user/list_command.rb +29 -0
- data/lib/kontena/cli/master/user/remove_command.rb +24 -0
- data/lib/kontena/cli/master/user/role/add_command.rb +29 -0
- data/lib/kontena/cli/master/user/role/remove_command.rb +27 -0
- data/lib/kontena/cli/master/user/role_command.rb +6 -0
- data/lib/kontena/cli/master/user_command.rb +9 -0
- data/lib/kontena/cli/master_command.rb +21 -0
- data/lib/kontena/cli/node_command.rb +17 -0
- data/lib/kontena/cli/nodes/create_command.rb +25 -0
- data/lib/kontena/cli/nodes/env_command.rb +37 -0
- data/lib/kontena/cli/nodes/health_command.rb +47 -0
- data/lib/kontena/cli/nodes/label_command.rb +10 -0
- data/lib/kontena/cli/nodes/labels/add_command.rb +18 -0
- data/lib/kontena/cli/nodes/labels/list_command.rb +19 -0
- data/lib/kontena/cli/nodes/labels/remove_command.rb +32 -0
- data/lib/kontena/cli/nodes/list_command.rb +97 -0
- data/lib/kontena/cli/nodes/remove_command.rb +34 -0
- data/lib/kontena/cli/nodes/reset_token_command.rb +34 -0
- data/lib/kontena/cli/nodes/show_command.rb +56 -0
- data/lib/kontena/cli/nodes/ssh_command.rb +63 -0
- data/lib/kontena/cli/nodes/update_command.rb +31 -0
- data/lib/kontena/cli/plugin_command.rb +12 -0
- data/lib/kontena/cli/plugins/common.rb +8 -0
- data/lib/kontena/cli/plugins/install_command.rb +42 -0
- data/lib/kontena/cli/plugins/list_command.rb +31 -0
- data/lib/kontena/cli/plugins/search_command.rb +25 -0
- data/lib/kontena/cli/plugins/show_command.rb +17 -0
- data/lib/kontena/cli/plugins/uninstall_command.rb +31 -0
- data/lib/kontena/cli/plugins/upgrade_command.rb +60 -0
- data/lib/kontena/cli/registry/create_command.rb +151 -0
- data/lib/kontena/cli/registry/remove_command.rb +21 -0
- data/lib/kontena/cli/registry_command.rb +8 -0
- data/lib/kontena/cli/service_command.rb +28 -0
- data/lib/kontena/cli/services/container_command.rb +8 -0
- data/lib/kontena/cli/services/containers_command.rb +39 -0
- data/lib/kontena/cli/services/create_command.rb +105 -0
- data/lib/kontena/cli/services/deploy_command.rb +25 -0
- data/lib/kontena/cli/services/env_command.rb +9 -0
- data/lib/kontena/cli/services/envs/add_command.rb +21 -0
- data/lib/kontena/cli/services/envs/list_command.rb +22 -0
- data/lib/kontena/cli/services/envs/remove_command.rb +22 -0
- data/lib/kontena/cli/services/events_command.rb +36 -0
- data/lib/kontena/cli/services/exec_command.rb +107 -0
- data/lib/kontena/cli/services/link_command.rb +35 -0
- data/lib/kontena/cli/services/list_command.rb +66 -0
- data/lib/kontena/cli/services/logs_command.rb +33 -0
- data/lib/kontena/cli/services/monitor_command.rb +58 -0
- data/lib/kontena/cli/services/remove_command.rb +60 -0
- data/lib/kontena/cli/services/restart_command.rb +19 -0
- data/lib/kontena/cli/services/scale_command.rb +21 -0
- data/lib/kontena/cli/services/secret_command.rb +8 -0
- data/lib/kontena/cli/services/secrets/link_command.rb +26 -0
- data/lib/kontena/cli/services/secrets/unlink_command.rb +28 -0
- data/lib/kontena/cli/services/services_helper.rb +579 -0
- data/lib/kontena/cli/services/show_command.rb +26 -0
- data/lib/kontena/cli/services/start_command.rb +21 -0
- data/lib/kontena/cli/services/stats_command.rb +87 -0
- data/lib/kontena/cli/services/stop_command.rb +21 -0
- data/lib/kontena/cli/services/unlink_command.rb +30 -0
- data/lib/kontena/cli/services/update_command.rb +94 -0
- data/lib/kontena/cli/spinner.rb +205 -0
- data/lib/kontena/cli/stack_command.rb +21 -0
- data/lib/kontena/cli/stacks/build_command.rb +125 -0
- data/lib/kontena/cli/stacks/common.rb +209 -0
- data/lib/kontena/cli/stacks/deploy_command.rb +37 -0
- data/lib/kontena/cli/stacks/events_command.rb +33 -0
- data/lib/kontena/cli/stacks/inspect_command.rb +17 -0
- data/lib/kontena/cli/stacks/install_command.rb +95 -0
- data/lib/kontena/cli/stacks/label_command.rb +10 -0
- data/lib/kontena/cli/stacks/labels/add_command.rb +21 -0
- data/lib/kontena/cli/stacks/labels/common.rb +19 -0
- data/lib/kontena/cli/stacks/labels/list_command.rb +21 -0
- data/lib/kontena/cli/stacks/labels/remove_command.rb +21 -0
- data/lib/kontena/cli/stacks/list_command.rb +154 -0
- data/lib/kontena/cli/stacks/logs_command.rb +35 -0
- data/lib/kontena/cli/stacks/monitor_command.rb +93 -0
- data/lib/kontena/cli/stacks/registry/create_command.rb +24 -0
- data/lib/kontena/cli/stacks/registry/make_private_command.rb +24 -0
- data/lib/kontena/cli/stacks/registry/make_public_command.rb +24 -0
- data/lib/kontena/cli/stacks/registry/pull_command.rb +28 -0
- data/lib/kontena/cli/stacks/registry/push_command.rb +40 -0
- data/lib/kontena/cli/stacks/registry/remove_command.rb +30 -0
- data/lib/kontena/cli/stacks/registry/search_command.rb +42 -0
- data/lib/kontena/cli/stacks/registry/show_command.rb +65 -0
- data/lib/kontena/cli/stacks/registry_command.rb +12 -0
- data/lib/kontena/cli/stacks/remove_command.rb +80 -0
- data/lib/kontena/cli/stacks/restart_command.rb +24 -0
- data/lib/kontena/cli/stacks/service_generator.rb +131 -0
- data/lib/kontena/cli/stacks/service_generator_v2.rb +27 -0
- data/lib/kontena/cli/stacks/show_command.rb +168 -0
- data/lib/kontena/cli/stacks/stack_name.rb +71 -0
- data/lib/kontena/cli/stacks/stacks_helper.rb +83 -0
- data/lib/kontena/cli/stacks/stop_command.rb +24 -0
- data/lib/kontena/cli/stacks/upgrade_command.rb +264 -0
- data/lib/kontena/cli/stacks/validate_command.rb +75 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/affinities_validator.rb +19 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/build_validator.rb +22 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/certificates_validator.rb +22 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/extends_validator.rb +22 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb +102 -0
- data/lib/kontena/cli/stacks/yaml/custom_validators/secrets_validator.rb +22 -0
- data/lib/kontena/cli/stacks/yaml/opto/certificates_resolver.rb +37 -0
- data/lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb +78 -0
- data/lib/kontena/cli/stacks/yaml/opto/service_instances_resolver.rb +25 -0
- data/lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb +80 -0
- data/lib/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver.rb +39 -0
- data/lib/kontena/cli/stacks/yaml/opto/vault_resolver.rb +13 -0
- data/lib/kontena/cli/stacks/yaml/opto/vault_setter.rb +12 -0
- data/lib/kontena/cli/stacks/yaml/opto.rb +16 -0
- data/lib/kontena/cli/stacks/yaml/reader.rb +525 -0
- data/lib/kontena/cli/stacks/yaml/service_extender.rb +65 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/file_loader.rb +41 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/registry_loader.rb +24 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader/uri_loader.rb +23 -0
- data/lib/kontena/cli/stacks/yaml/stack_file_loader.rb +152 -0
- data/lib/kontena/cli/stacks/yaml/validations.rb +119 -0
- data/lib/kontena/cli/stacks/yaml/validator_v3.rb +164 -0
- data/lib/kontena/cli/subcommand_loader.rb +83 -0
- data/lib/kontena/cli/table_generator.rb +128 -0
- data/lib/kontena/cli/vault/export_command.rb +24 -0
- data/lib/kontena/cli/vault/import_command.rb +75 -0
- data/lib/kontena/cli/vault/list_command.rb +37 -0
- data/lib/kontena/cli/vault/read_command.rb +27 -0
- data/lib/kontena/cli/vault/remove_command.rb +23 -0
- data/lib/kontena/cli/vault/update_command.rb +24 -0
- data/lib/kontena/cli/vault/write_command.rb +23 -0
- data/lib/kontena/cli/vault_command.rb +13 -0
- data/lib/kontena/cli/version.rb +10 -0
- data/lib/kontena/cli/version_command.rb +20 -0
- data/lib/kontena/cli/volume_command.rb +9 -0
- data/lib/kontena/cli/volumes/create_command.rb +42 -0
- data/lib/kontena/cli/volumes/list_command.rb +29 -0
- data/lib/kontena/cli/volumes/remove_command.rb +29 -0
- data/lib/kontena/cli/volumes/show_command.rb +38 -0
- data/lib/kontena/cli/vpn/config_command.rb +27 -0
- data/lib/kontena/cli/vpn/create_command.rb +99 -0
- data/lib/kontena/cli/vpn/remove_command.rb +22 -0
- data/lib/kontena/cli/vpn_command.rb +9 -0
- data/lib/kontena/cli/whoami_command.rb +38 -0
- data/lib/kontena/client.rb +574 -0
- data/lib/kontena/command.rb +251 -0
- data/lib/kontena/debug_instrumentor.rb +80 -0
- data/lib/kontena/errors.rb +50 -0
- data/lib/kontena/light_prompt.rb +103 -0
- data/lib/kontena/machine/cert_helper.rb +43 -0
- data/lib/kontena/machine/cloud_config/cloudinit.yml +82 -0
- data/lib/kontena/machine/cloud_config/node_generator.rb +28 -0
- data/lib/kontena/machine/common.rb +17 -0
- data/lib/kontena/machine/random_name.rb +42 -0
- data/lib/kontena/main_command.rb +66 -0
- data/lib/kontena/plugin_manager/cleaner.rb +33 -0
- data/lib/kontena/plugin_manager/common.rb +89 -0
- data/lib/kontena/plugin_manager/installer.rb +78 -0
- data/lib/kontena/plugin_manager/loader.rb +93 -0
- data/lib/kontena/plugin_manager/rubygems_client.rb +59 -0
- data/lib/kontena/plugin_manager/uninstaller.rb +34 -0
- data/lib/kontena/plugin_manager.rb +26 -0
- data/lib/kontena/presets/github_auth_provider.yml +11 -0
- data/lib/kontena/presets/kontena_auth_provider.yml +11 -0
- data/lib/kontena/scripts/completer +9 -0
- data/lib/kontena/scripts/completer.rb +334 -0
- data/lib/kontena/scripts/init +18 -0
- data/lib/kontena/scripts/kontena.zsh +11 -0
- data/lib/kontena/scripts/krates.bash +8 -0
- data/lib/kontena/stacks/change_resolver.rb +118 -0
- data/lib/kontena/stacks/stack_data.rb +58 -0
- data/lib/kontena/stacks/stack_data_set.rb +51 -0
- data/lib/kontena/stacks_cache.rb +110 -0
- data/lib/kontena/stacks_client.rb +177 -0
- data/lib/kontena/util.rb +116 -0
- data/lib/kontena_cli.rb +190 -0
- metadata +518 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks
|
4
|
+
class MonitorCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
banner "Monitor services in a stack"
|
10
|
+
|
11
|
+
parameter "NAME", "Stack name"
|
12
|
+
parameter "[SERVICES] ...", "Stack services to monitor", attribute_name: 'selected_services'
|
13
|
+
|
14
|
+
requires_current_master
|
15
|
+
requires_current_master_token
|
16
|
+
|
17
|
+
def execute
|
18
|
+
response = client.get("grids/#{current_grid}/services?stack=#{name}")
|
19
|
+
services = response['services']
|
20
|
+
if selected_services.size > 0
|
21
|
+
services.delete_if{ |s| !selected_services.include?(s['name'])}
|
22
|
+
end
|
23
|
+
show_monitor(services)
|
24
|
+
end
|
25
|
+
|
26
|
+
# @param [Array<Hash>]
|
27
|
+
def show_monitor(services)
|
28
|
+
loop do
|
29
|
+
nodes = {}
|
30
|
+
services.each do |service|
|
31
|
+
result = client.get("services/#{service['id']}/containers") rescue nil
|
32
|
+
service['instances'] = 0
|
33
|
+
if result
|
34
|
+
service['instances'] = result['containers'].size
|
35
|
+
result['containers'].each do |container|
|
36
|
+
container['service'] = service['name']
|
37
|
+
nodes[container['node']['name']] ||= []
|
38
|
+
nodes[container['node']['name']] << container
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
clear_terminal
|
43
|
+
puts "grid: #{current_grid}"
|
44
|
+
puts "stack: #{name}"
|
45
|
+
puts "services:"
|
46
|
+
services.each do |service|
|
47
|
+
color = color_for_service(service['name'])
|
48
|
+
puts " #{pastel.send(color, "■")} #{service['name']} (#{service['instances']} instances)"
|
49
|
+
end
|
50
|
+
puts "nodes:"
|
51
|
+
node_names = nodes.keys.sort
|
52
|
+
node_names.each do |name|
|
53
|
+
containers = nodes[name]
|
54
|
+
puts " #{name} (#{containers.size} instances)"
|
55
|
+
print " "
|
56
|
+
containers.each do |container|
|
57
|
+
icon = "■"
|
58
|
+
if container['status'] != 'running'
|
59
|
+
icon = "□"
|
60
|
+
end
|
61
|
+
color = color_for_service(container['service'])
|
62
|
+
print pastel.send(color, icon)
|
63
|
+
end
|
64
|
+
puts ''
|
65
|
+
end
|
66
|
+
sleep 1
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def color_for_service(service)
|
71
|
+
color_maps[service] = colors.shift unless color_maps[service]
|
72
|
+
color_maps[service].to_sym
|
73
|
+
end
|
74
|
+
|
75
|
+
def color_maps
|
76
|
+
@color_maps ||= {}
|
77
|
+
end
|
78
|
+
|
79
|
+
def colors
|
80
|
+
if(@colors.nil? || @colors.size == 0)
|
81
|
+
@colors = %i(
|
82
|
+
red green yellow blue magenta cyan bright_red bright_green
|
83
|
+
bright_yellow bright_blue bright_magenta bright_cyan
|
84
|
+
)
|
85
|
+
end
|
86
|
+
@colors
|
87
|
+
end
|
88
|
+
|
89
|
+
def clear_terminal
|
90
|
+
print "\e[H\e[2J"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class CreateCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Creates a new Stack to Kontena Stack Registry"
|
10
|
+
|
11
|
+
option '--private', :flag, "Create as private", attribute_name: :is_private
|
12
|
+
|
13
|
+
requires_current_account_token
|
14
|
+
|
15
|
+
def execute
|
16
|
+
exit_with_error "Can't create a stack with a version number" unless stack_name.version.nil?
|
17
|
+
spinner "Creating #{is_private? ? pastel.yellow('private') : 'public'} stack #{pastel.cyan(stack_name)} in Kontena Stack Registry" do
|
18
|
+
stacks_client.create(stack_name, is_private: is_private?)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class MakePrivateCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Changes Stack visibility private in the Kontena Cloud Stack Registry"
|
10
|
+
|
11
|
+
option '--force', :flag, "Don't ask for confirmation"
|
12
|
+
|
13
|
+
requires_current_account_token
|
14
|
+
|
15
|
+
def execute
|
16
|
+
unless force?
|
17
|
+
confirm("Change stack #{pastel.cyan(stack_name)} visibility to private?")
|
18
|
+
end
|
19
|
+
spinner "Updating Stack #{pastel.cyan(stack_name)} visibility to private" do
|
20
|
+
stacks_client.make_private(stack_name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class MakePublicCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Changes Stack visibility private in the Kontena Cloud Stack Registry"
|
10
|
+
|
11
|
+
option '--force', :flag, "Don't ask for confirmation"
|
12
|
+
|
13
|
+
requires_current_account_token
|
14
|
+
|
15
|
+
def execute
|
16
|
+
unless force?
|
17
|
+
confirm("Change stack #{pastel.cyan(stack_name)} visibility to public?")
|
18
|
+
end
|
19
|
+
spinner "Updating Stack #{pastel.cyan(stack_name)} visibility to public" do
|
20
|
+
stacks_client.make_public(stack_name)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class PullCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Pulls / downloads a stack from the stack registry"
|
10
|
+
|
11
|
+
option ['-F', '--file'], '[FILENAME]', "Write to file (default STDOUT)"
|
12
|
+
option '--no-cache', :flag, "Don't use local cache"
|
13
|
+
option '--return', :flag, 'Return the result', hidden: true
|
14
|
+
|
15
|
+
def execute
|
16
|
+
target = no_cache? ? stacks_client : Kontena::StacksCache
|
17
|
+
content = target.pull(stack_name)
|
18
|
+
if return?
|
19
|
+
return content
|
20
|
+
elsif file
|
21
|
+
File.write(file, content)
|
22
|
+
puts pastel.green("Wrote #{content.bytesize} bytes to #{file}")
|
23
|
+
else
|
24
|
+
puts content
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class PushCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
|
8
|
+
banner "Pushes (uploads) a stack to the stack registry"
|
9
|
+
|
10
|
+
parameter "[FILE]", "Kontena stack file path", default: "kontena.yml", attribute_name: :source
|
11
|
+
|
12
|
+
requires_current_account_token
|
13
|
+
|
14
|
+
option '--dry-run', :flag, "Do not perform any uploading", hidden: true
|
15
|
+
|
16
|
+
def includes_local_dependencies?(dependencies = loader.dependencies)
|
17
|
+
return false if dependencies.nil?
|
18
|
+
dependencies.any? { |dep| Kontena::Cli::Stacks::YAML::StackFileLoader.for(dep['stack']).origin == 'file' || includes_local_dependencies(dep['depends']) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def includes_local_extends?
|
22
|
+
loader.yaml.fetch('services', {}).any? { |_, svc| svc.key?('extends') && svc['extends'].key?('file') }
|
23
|
+
end
|
24
|
+
|
25
|
+
def execute
|
26
|
+
exit_with_error "Can only perform push from local files" unless loader.origin == "file"
|
27
|
+
exit_with_error "Stack file contains dependencies to local files" if includes_local_dependencies?
|
28
|
+
exit_with_error "Stack file has services that extend from local files" if includes_local_extends?
|
29
|
+
|
30
|
+
spinner("Pushing #{pastel.cyan(source)} to stack registry as #{loader.stack_name}") do
|
31
|
+
unless dry_run?
|
32
|
+
stacks_client.push(
|
33
|
+
loader.stack_name,
|
34
|
+
loader.content
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Removes a stack (or version) from the stack registry. Use user/stack_name or user/stack_name:version."
|
10
|
+
|
11
|
+
option ['-f', '--force'], :flag, "Force delete"
|
12
|
+
|
13
|
+
requires_current_account_token
|
14
|
+
|
15
|
+
def execute
|
16
|
+
unless force?
|
17
|
+
if stack_name.version
|
18
|
+
puts "About to delete #{pastel.cyan("#{stack_name}")} from the stacks registry"
|
19
|
+
confirm
|
20
|
+
else
|
21
|
+
puts "About to delete an entire stack and all of its versions from the stacks registry"
|
22
|
+
confirm_command(stack_name)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
spinner "Removing #{pastel.cyan(stack_name)} from the registry" do
|
26
|
+
stacks_client.destroy(stack_name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class SearchCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::TableGenerator::Helper
|
8
|
+
|
9
|
+
banner "Search for stacks on the stack registry"
|
10
|
+
|
11
|
+
parameter "[QUERY]", "Query string"
|
12
|
+
|
13
|
+
option ['--[no-]pre'], :flag, "Include pre-release versions", default: true
|
14
|
+
option ['--[no-]private'], :flag, "Include private stacks", default: true, attribute_name: :priv
|
15
|
+
|
16
|
+
option ['--tag', '-t'], '[TAG]', "Search by tags", multivalued: true
|
17
|
+
|
18
|
+
option ['-q', '--quiet'], :flag, "Output the identifying column only"
|
19
|
+
|
20
|
+
def fields
|
21
|
+
quiet? ? ['name'] : %w(name version pulls description)
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute
|
25
|
+
results = stacks_client.search(query.to_s, tags: tag_list, include_prerelease: pre?, include_private: priv?)
|
26
|
+
exit_with_error 'Nothing found' if results.empty?
|
27
|
+
print_table(results.map { |r| r['attributes'] }) do |row|
|
28
|
+
next if quiet?
|
29
|
+
row['name'] = '%s/%s' % [row['organization-id'], row['name']]
|
30
|
+
row['name'] = pastel.yellow(row['name']) if row['is-private']
|
31
|
+
if row['latest-version'] && row['latest-version']['version']
|
32
|
+
row['version'] = row['latest-version']['version']
|
33
|
+
row['description'] = row['latest-version']['description']
|
34
|
+
else
|
35
|
+
row['version'] = '?'
|
36
|
+
end
|
37
|
+
|
38
|
+
row['description'] = '-' if row['description'].to_s.empty?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative '../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks::Registry
|
4
|
+
class ShowCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::Stacks::Common
|
7
|
+
include Kontena::Cli::Stacks::Common::RegistryNameParam
|
8
|
+
|
9
|
+
banner "Shows information about a stack on the stacks registry"
|
10
|
+
|
11
|
+
option ['-v', '--versions'], :flag, "Only list available versions"
|
12
|
+
|
13
|
+
requires_current_account_token
|
14
|
+
|
15
|
+
def execute
|
16
|
+
versions = stacks_client.versions(stack_name)
|
17
|
+
|
18
|
+
if versions?
|
19
|
+
stacks_client.versions(stack_name).each do |version|
|
20
|
+
puts version['attributes']['version']
|
21
|
+
end
|
22
|
+
else
|
23
|
+
data = stacks_client.show(stack_name).dig('data', 'attributes')
|
24
|
+
puts "#{data['organization-id']}/#{data['name']}:"
|
25
|
+
puts " description: #{data.dig('latest-version', 'description') || '-'}"
|
26
|
+
puts " latest_version: #{data.dig('latest-version', 'version') || '-'}"
|
27
|
+
puts " created_at: #{data.dig('created-at')}"
|
28
|
+
puts " pulls: #{data.dig('pulls')}"
|
29
|
+
puts " private: #{data.dig('is-private')}"
|
30
|
+
meta = data.dig('latest-version', 'meta')
|
31
|
+
if meta
|
32
|
+
puts " meta:"
|
33
|
+
readme = meta.delete('readme')
|
34
|
+
meta_lines = YAML.dump(meta).split(/[\r\n]/)
|
35
|
+
meta_lines.shift
|
36
|
+
meta_lines.each do |meta_line|
|
37
|
+
puts " %s" % meta_line
|
38
|
+
end
|
39
|
+
if readme
|
40
|
+
if readme =~ /^http\S+$/
|
41
|
+
puts " readme: readme"
|
42
|
+
else
|
43
|
+
puts " readme: |"
|
44
|
+
readme.gsub!(/(\S{#{70}})(?=\S)/, '\1 ')
|
45
|
+
readme.gsub!(/(.{1,#{70}})(?:\s+|$)/, "\\1\n")
|
46
|
+
readme.gsub!(/^/, ' ')
|
47
|
+
puts readme
|
48
|
+
end
|
49
|
+
end
|
50
|
+
else
|
51
|
+
puts " meta: -"
|
52
|
+
end
|
53
|
+
|
54
|
+
if versions.empty?
|
55
|
+
puts " versions: -"
|
56
|
+
else
|
57
|
+
puts " versions:"
|
58
|
+
versions.each do |version|
|
59
|
+
puts " - #{version['attributes']['version']} (#{version['attributes']['created-at']})"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Kontena::Cli::Stacks
|
2
|
+
class RegistryCommand < Kontena::Command
|
3
|
+
subcommand "push", "Push a stack into the stacks registry", load_subcommand('stacks/registry/push_command')
|
4
|
+
subcommand "pull", "Pull a stack from the stacks registry", load_subcommand('stacks/registry/pull_command')
|
5
|
+
subcommand ["search"], "Search for stacks in the stacks registry", load_subcommand('stacks/registry/search_command')
|
6
|
+
subcommand "show", "Show info about a stack in the stacks registry", load_subcommand('stacks/registry/show_command')
|
7
|
+
subcommand ["remove", "rm"], "Remove a stack (or version) from the stacks registry", load_subcommand('stacks/registry/remove_command')
|
8
|
+
subcommand "create", "Create a stack in the registry", load_subcommand('stacks/registry/create_command')
|
9
|
+
subcommand "make-private", "Change Stack visibility to private", load_subcommand('stacks/registry/make_private_command')
|
10
|
+
subcommand "make-public", "Change Stack visibility to public", load_subcommand('stacks/registry/make_public_command')
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
banner "Removes a stack in a grid on Kontena Master"
|
10
|
+
|
11
|
+
parameter "NAME ...", "Stack name", attribute_name: :names
|
12
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
13
|
+
option "--keep-dependencies", :flag, "Do not remove dependencies"
|
14
|
+
|
15
|
+
requires_current_master
|
16
|
+
requires_current_master_token
|
17
|
+
|
18
|
+
def execute
|
19
|
+
names.each do |name|
|
20
|
+
stack = fetch_stack(name)
|
21
|
+
confirm_remove(stack, name) unless forced?
|
22
|
+
unless keep_dependencies?
|
23
|
+
stack.fetch('children', Hash.new).each do |child_stack|
|
24
|
+
caret"Removing dependency #{pastel.cyan(child_stack['name'])}"
|
25
|
+
Kontena.run!(['stack', 'remove', '--force', child_stack['name']])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
spinner "Removing stack #{pastel.cyan(name)} " do
|
30
|
+
remove_stack(name)
|
31
|
+
wait_stack_removal(name)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# @param stack [Hash]
|
37
|
+
# @param name [String]
|
38
|
+
def confirm_remove(stack, name)
|
39
|
+
if stack['parent']
|
40
|
+
puts "#{pastel.yellow('Warning:')} The stack #{pastel.cyan(stack['parent']['name'])} depends on stack #{name}"
|
41
|
+
end
|
42
|
+
if !keep_dependencies? && stack['children'] && !stack['children'].empty?
|
43
|
+
puts "#{pastel.yellow('Warning:')} The stack #{pastel.cyan(name)} has dependencies that will be removed:"
|
44
|
+
stack['children'].each do |child|
|
45
|
+
puts "- #{pastel.yellow(child['name'])}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
confirm_command(name)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param name [String]
|
52
|
+
# @return [Hash]
|
53
|
+
def fetch_stack(name)
|
54
|
+
client.get("stacks/#{current_grid}/#{name}")
|
55
|
+
end
|
56
|
+
|
57
|
+
# @param name [String]
|
58
|
+
# @return [Hash]
|
59
|
+
def remove_stack(name)
|
60
|
+
client.delete("stacks/#{current_grid}/#{name}")
|
61
|
+
end
|
62
|
+
|
63
|
+
# @param name [String]
|
64
|
+
def wait_stack_removal(name)
|
65
|
+
removed = false
|
66
|
+
until removed == true
|
67
|
+
begin
|
68
|
+
client.get("stacks/#{current_grid}/#{name}")
|
69
|
+
sleep 1
|
70
|
+
rescue Kontena::Errors::StandardError => exc
|
71
|
+
if exc.status == 404
|
72
|
+
removed = true
|
73
|
+
else
|
74
|
+
raise exc
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Stacks
|
4
|
+
class RestartCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
banner "Restarts all services of a stack that has been installed in a grid on Kontena Master"
|
10
|
+
|
11
|
+
parameter "NAME ...", "Stack name", attribute_name: :names
|
12
|
+
|
13
|
+
requires_current_master
|
14
|
+
requires_current_master_token
|
15
|
+
|
16
|
+
def execute
|
17
|
+
names.each do |name|
|
18
|
+
spinner "Sending restart signal for stack #{name} services" do
|
19
|
+
client.post("stacks/#{current_grid}/#{name}/restart", {})
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'shellwords'
|
3
|
+
require_relative '../services/services_helper'
|
4
|
+
|
5
|
+
module Kontena::Cli::Stacks
|
6
|
+
class ServiceGenerator
|
7
|
+
include Kontena::Cli::Services::ServicesHelper
|
8
|
+
|
9
|
+
attr_reader :service_config
|
10
|
+
|
11
|
+
def initialize(service_config)
|
12
|
+
@service_config = service_config
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# @return [Hash]
|
17
|
+
def generate
|
18
|
+
parse_data(service_config)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
##
|
24
|
+
# @param [Hash] options
|
25
|
+
# @return [Hash]
|
26
|
+
def parse_data(options)
|
27
|
+
data = {}
|
28
|
+
data['instances'] = options['instances']
|
29
|
+
data['image'] = parse_image(options['image'])
|
30
|
+
data['env'] = options['environment'] || options['env']
|
31
|
+
data['links'] = parse_links(options['links'] || [])
|
32
|
+
data['external_links'] = parse_links(options['external_links'] || [])
|
33
|
+
data['ports'] = parse_stringified_ports(options['ports'] || [])
|
34
|
+
data['memory'] = parse_memory(options['mem_limit'].to_s) if options['mem_limit']
|
35
|
+
data['memory_swap'] = parse_memory(options['memswap_limit'].to_s) if options['memswap_limit']
|
36
|
+
data['shm_size'] = parse_memory(options['shm_size'].to_s) if options['shm_size']
|
37
|
+
data['cpus'] = options['cpus'] if options['cpus']
|
38
|
+
data['cpu_shares'] = options['cpu_shares'] if options['cpu_shares']
|
39
|
+
data['volumes'] = options['volumes'] || []
|
40
|
+
data['volumes_from'] = options['volumes_from'] || []
|
41
|
+
data['cmd'] = Shellwords.split(options['command']) if options['command']
|
42
|
+
data['affinity'] = options['affinity'] || []
|
43
|
+
data['user'] = options['user'] if options['user']
|
44
|
+
data['stateful'] = options['stateful'] == true
|
45
|
+
data['privileged'] = options['privileged'] unless options['privileged'].nil?
|
46
|
+
data['cap_add'] = options['cap_add'] if options['cap_add']
|
47
|
+
data['cap_drop'] = options['cap_drop'] if options['cap_drop']
|
48
|
+
data['net'] = options['net'] if options['net']
|
49
|
+
data['pid'] = options['pid'] if options['pid']
|
50
|
+
data['log_driver'] = options['log_driver'] if options['log_driver']
|
51
|
+
data['log_opts'] = options['log_opt'] if options['log_opt'] && !options['log_opt'].empty?
|
52
|
+
deploy_opts = options['deploy'] || {}
|
53
|
+
data['strategy'] = deploy_opts['strategy'] if deploy_opts['strategy']
|
54
|
+
deploy = {
|
55
|
+
'wait_for_port' => deploy_opts['wait_for_port'],
|
56
|
+
'min_health' => deploy_opts['min_health']
|
57
|
+
}
|
58
|
+
if deploy_opts.has_key?('interval')
|
59
|
+
deploy['interval'] = parse_relative_time(deploy_opts['interval'])
|
60
|
+
else
|
61
|
+
deploy['interval'] = nil
|
62
|
+
end
|
63
|
+
data['deploy_opts'] = deploy
|
64
|
+
data['hooks'] = options['hooks'] || {}
|
65
|
+
data['secrets'] = options['secrets'] if options['secrets']
|
66
|
+
data['certificates'] = options['certificates'] if options['certificates']
|
67
|
+
data['build'] = parse_build_options(options) if options['build']
|
68
|
+
data['health_check'] = parse_health_check(options)
|
69
|
+
data['stop_signal'] = options['stop_signal'] if options['stop_signal']
|
70
|
+
data['stop_grace_period'] = options['stop_grace_period'] if options['stop_grace_period']
|
71
|
+
data['read_only'] = options['read_only'] || false
|
72
|
+
data['entrypoint'] = options['entrypoint'] if options['entrypoint']
|
73
|
+
data
|
74
|
+
end
|
75
|
+
|
76
|
+
# @param [Array<String>] port_options
|
77
|
+
# @return [Array<Hash>]
|
78
|
+
def parse_stringified_ports(port_options)
|
79
|
+
parse_ports(port_options).map {|p|
|
80
|
+
{
|
81
|
+
'ip' => p[:ip],
|
82
|
+
'container_port' => p[:container_port],
|
83
|
+
'node_port' => p[:node_port],
|
84
|
+
'protocol' => p[:protocol]
|
85
|
+
}
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param [Array<String>] link_options
|
90
|
+
# @return [Array<Hash>]
|
91
|
+
def parse_links(link_options)
|
92
|
+
link_options.map{|l|
|
93
|
+
if l.kind_of?(String)
|
94
|
+
service_name, alias_name = l.split(':')
|
95
|
+
elsif l.kind_of?(Hash)
|
96
|
+
service_name = l['name']
|
97
|
+
alias_name = l['alias']
|
98
|
+
else
|
99
|
+
raise TypeError, "Invalid link type #{l.class.name}, expecting String or Hash"
|
100
|
+
end
|
101
|
+
if service_name.nil?
|
102
|
+
raise ArgumentError.new("Invalid link value #{l}")
|
103
|
+
end
|
104
|
+
alias_name = service_name if alias_name.nil?
|
105
|
+
{
|
106
|
+
'name' => service_name,
|
107
|
+
'alias' => alias_name
|
108
|
+
}
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
112
|
+
# @param [Hash] options
|
113
|
+
# @return [Hash]
|
114
|
+
def parse_build_options(options)
|
115
|
+
build = {}
|
116
|
+
build['context'] = options['build'] if options['build']
|
117
|
+
build['dockerfile'] = options['dockerfile'] if options['dockerfile']
|
118
|
+
build
|
119
|
+
end
|
120
|
+
|
121
|
+
# @param [Hash] options
|
122
|
+
# @return [Hash]
|
123
|
+
def parse_health_check(options)
|
124
|
+
health_check = {}
|
125
|
+
%w(port protocol uri timeout interval initial_delay).each do |k|
|
126
|
+
health_check[k] = options.dig('health_check', k)
|
127
|
+
end
|
128
|
+
health_check
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require_relative 'service_generator'
|
3
|
+
|
4
|
+
module Kontena::Cli::Stacks
|
5
|
+
class ServiceGeneratorV2 < ServiceGenerator
|
6
|
+
|
7
|
+
def parse_data(options)
|
8
|
+
data = super(options)
|
9
|
+
data['net'] = options['network_mode'] if options['network_mode']
|
10
|
+
data['log_driver'] = options.dig('logging', 'driver')
|
11
|
+
data['log_opts'] = options.dig('logging', 'options')
|
12
|
+
if options['depends_on']
|
13
|
+
data['links'] ||= []
|
14
|
+
data['links'] = (data['links'] + parse_links(options['depends_on'])).uniq
|
15
|
+
end
|
16
|
+
data
|
17
|
+
end
|
18
|
+
|
19
|
+
def parse_build_options(options)
|
20
|
+
unless options['build'].is_a?(Hash)
|
21
|
+
options['build'] = { 'context' => options['build']}
|
22
|
+
end
|
23
|
+
options['build']['args'] = parse_build_args(options['build']['args']) if options['build']['args']
|
24
|
+
options['build']
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|