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,16 @@
|
|
1
|
+
module Kontena::Cli::Containers
|
2
|
+
class InspectCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
parameter "CONTAINER_ID", "Container id"
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
token = require_token
|
11
|
+
|
12
|
+
result = client(token).get("containers/#{current_grid}/#{container_id}/inspect")
|
13
|
+
puts JSON.pretty_generate(result)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Kontena::Cli::Containers
|
2
|
+
class ListCommand < Kontena::Command
|
3
|
+
include Kontena::Util
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
include Kontena::Cli::GridOptions
|
6
|
+
include Kontena::Cli::TableGenerator::Helper
|
7
|
+
|
8
|
+
option ['-a', '--all'], :flag, 'Show all containers'
|
9
|
+
|
10
|
+
requires_current_master
|
11
|
+
requires_current_master_token
|
12
|
+
|
13
|
+
NON_STOP_STATES = ['paused', 'restarting', 'oom_killed', 'dead', 'running']
|
14
|
+
|
15
|
+
def fields
|
16
|
+
return ['id'] if quiet?
|
17
|
+
{ container_id: 'id', image: 'image', command: 'cmd', created: 'created_at', status: 'state' }
|
18
|
+
end
|
19
|
+
|
20
|
+
def execute
|
21
|
+
result = spin_if(!quiet?, "Retrieving container list") do
|
22
|
+
Array(client.get("containers/#{current_grid}#{'?all=1' if all?}")['containers'])
|
23
|
+
end
|
24
|
+
|
25
|
+
print_table(result.reverse) do |row|
|
26
|
+
row['id'] = container_id(row)
|
27
|
+
row['created_at'] = time_ago(row['created_at'])
|
28
|
+
row['cmd'] = truncate_cmd(row)
|
29
|
+
row['state'] = container_state(row)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def container_id(row)
|
34
|
+
if row['node']
|
35
|
+
"#{row['node']['name']}/#{row['name']}"
|
36
|
+
else
|
37
|
+
"/#{row['name']}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def truncate_cmd(row)
|
42
|
+
cmd = row['cmd'].nil? ? '' : row['cmd'].join(' ')
|
43
|
+
cmd = "#{cmd[0..24]}#{pastel.cyan('..')}" if cmd.length > 26
|
44
|
+
"\"#{cmd}\""
|
45
|
+
end
|
46
|
+
|
47
|
+
def container_state(row)
|
48
|
+
NON_STOP_STATES.find { |state| row.fetch('state', {})[state] == true } || pastel.cyan('stopped')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../helpers/log_helper'
|
2
|
+
|
3
|
+
module Kontena::Cli::Containers
|
4
|
+
class LogsCommand < Clamp::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Kontena::Cli::Helpers::LogHelper
|
8
|
+
|
9
|
+
parameter "CONTAINER_ID", "Container id"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
require_api_url
|
13
|
+
|
14
|
+
show_logs("containers/#{current_grid}/#{container_id}/logs") do |log|
|
15
|
+
show_log(log)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Etcd
|
4
|
+
class GetCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
parameter "KEY", "Etcd key"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
require_api_url
|
13
|
+
token = require_token
|
14
|
+
validate_key
|
15
|
+
|
16
|
+
response = client(token).get("etcd/#{current_grid}/#{key}")
|
17
|
+
if response['value']
|
18
|
+
puts response['value']
|
19
|
+
elsif response['children']
|
20
|
+
exit_with_error "Cannot get value from a directory"
|
21
|
+
elsif response['error']
|
22
|
+
exit_with_error response['error']
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
require 'kontena/cli/helpers/health_helper'
|
3
|
+
|
4
|
+
module Kontena::Cli::Etcd
|
5
|
+
class HealthCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
include Kontena::Cli::GridOptions
|
8
|
+
include Kontena::Cli::Helpers::HealthHelper
|
9
|
+
|
10
|
+
parameter "[NODE]", "Show health for specific node"
|
11
|
+
|
12
|
+
requires_current_master
|
13
|
+
requires_current_grid
|
14
|
+
|
15
|
+
def execute
|
16
|
+
ret = true
|
17
|
+
|
18
|
+
if self.node
|
19
|
+
ret = show_etcd_health("#{current_grid}/#{self.node}")
|
20
|
+
else
|
21
|
+
nodes = client.get("grids/#{current_grid}/nodes")['nodes']
|
22
|
+
|
23
|
+
nodes.each do |node|
|
24
|
+
if !show_etcd_health(node['id'])
|
25
|
+
ret = false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
return ret
|
31
|
+
end
|
32
|
+
|
33
|
+
# @param id [String] :grid/:node
|
34
|
+
# @return [Boolean]
|
35
|
+
def show_etcd_health(id)
|
36
|
+
node_health = client.get("nodes/#{id}/health")
|
37
|
+
etcd_health, status = node_etcd_health(node_health['etcd_health'])
|
38
|
+
|
39
|
+
puts "#{health_icon etcd_health} Node #{node_health['name']} etcd is #{status}"
|
40
|
+
|
41
|
+
return etcd_health == :ok
|
42
|
+
|
43
|
+
rescue Kontena::Errors::StandardErrorHash => exc
|
44
|
+
raise unless exc.status == 422
|
45
|
+
|
46
|
+
exc.errors.each do |what, error|
|
47
|
+
puts "#{health_icon :offline} Node #{id} #{what} error: #{error}"
|
48
|
+
end
|
49
|
+
|
50
|
+
return false
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Etcd
|
4
|
+
class ListCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
parameter "[KEY]", "Etcd key", default: '/'
|
10
|
+
|
11
|
+
option ['-r', '--recursive'], :flag, "List keys recursively", default: false
|
12
|
+
|
13
|
+
# the command outputs id info only anyway, this is here strictly for ignoring purposes
|
14
|
+
option ['-q', '--quiet'], :flag, "Output the identifying column only", hidden: true
|
15
|
+
|
16
|
+
requires_current_master
|
17
|
+
requires_current_master_token
|
18
|
+
|
19
|
+
def execute
|
20
|
+
validate_key
|
21
|
+
|
22
|
+
response = spin_if(!quiet?, "Retrieving keys from etcd") do
|
23
|
+
client.get("etcd/#{current_grid}/#{key}#{'?recursive=true' if recursive?}")
|
24
|
+
end
|
25
|
+
|
26
|
+
if response['children']
|
27
|
+
children = response['children'].map{|c| c['key'] }
|
28
|
+
puts children.join("\n")
|
29
|
+
elsif response['value']
|
30
|
+
exit_with_error "Not a directory"
|
31
|
+
elsif response['error']
|
32
|
+
exit_with_error response['error']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Etcd
|
4
|
+
class MkdirCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
parameter "KEY", "Etcd key"
|
10
|
+
|
11
|
+
def execute
|
12
|
+
require_api_url
|
13
|
+
token = require_token
|
14
|
+
validate_key
|
15
|
+
|
16
|
+
data = {}
|
17
|
+
response = client(token).post("etcd/#{current_grid}/#{key}", data)
|
18
|
+
if response['error']
|
19
|
+
exit_with_error response['error']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Etcd
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
parameter "KEY", "Etcd key"
|
10
|
+
|
11
|
+
option "--recursive", :flag, "Remove keys recursively"
|
12
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
13
|
+
|
14
|
+
def execute
|
15
|
+
require_api_url
|
16
|
+
token = require_token
|
17
|
+
validate_key
|
18
|
+
confirm unless forced?
|
19
|
+
|
20
|
+
data = {}
|
21
|
+
data[:recursive] = true if recursive?
|
22
|
+
response = client(token).delete("etcd/#{current_grid}/#{key}", data)
|
23
|
+
|
24
|
+
if response['error']
|
25
|
+
exit_with_error response['error']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Etcd
|
4
|
+
class SetCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
include Common
|
8
|
+
|
9
|
+
parameter "KEY", "Etcd key"
|
10
|
+
parameter "VALUE", "Etcd value"
|
11
|
+
|
12
|
+
def execute
|
13
|
+
require_api_url
|
14
|
+
token = require_token
|
15
|
+
validate_key
|
16
|
+
|
17
|
+
data = {value: value}
|
18
|
+
response = client(token).post("etcd/#{current_grid}/#{key}", data)
|
19
|
+
if response['error']
|
20
|
+
exit_with_error response['error']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Kontena::Cli::EtcdCommand < Kontena::Command
|
2
|
+
|
3
|
+
subcommand "get", "Get the current value for a single key", load_subcommand('etcd/get_command')
|
4
|
+
subcommand "set", "Set a value on the specified key", load_subcommand('etcd/set_command')
|
5
|
+
subcommand ["mkdir", "mk"], "Create a directory", load_subcommand('etcd/mkdir_command')
|
6
|
+
subcommand ["list", "ls"], "List a directory", load_subcommand('etcd/list_command')
|
7
|
+
subcommand ["remove", "rm"], "Remove a key or a directory", load_subcommand('etcd/remove_command')
|
8
|
+
subcommand "health", "Check etcd health", load_subcommand('etcd/health_command')
|
9
|
+
|
10
|
+
def execute
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Cli::ExternalRegistries
|
2
|
+
class AddCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
parameter '[URL]', 'Docker Registry url', default: 'https://index.docker.io/v2/'
|
7
|
+
|
8
|
+
option ['-u', '--username'], 'USERNAME', 'Username', required: true
|
9
|
+
option ['-p', '--password'], 'PASSWORD', 'Password', required: true
|
10
|
+
option ['-e', '--email'], 'EMAIL', 'Email', required: false
|
11
|
+
|
12
|
+
def execute
|
13
|
+
require_api_url
|
14
|
+
require_current_grid
|
15
|
+
token = require_token
|
16
|
+
|
17
|
+
self.url = "https://#{self.url}" unless self.url.start_with?('http')
|
18
|
+
|
19
|
+
data = { username: username, password: password, email: email, url: url }
|
20
|
+
spinner "Adding #{pastel.cyan(url)} to external registries " do
|
21
|
+
client(token).post("grids/#{current_grid}/external_registries", data)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Kontena::Cli::ExternalRegistries
|
2
|
+
class ListCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
include Kontena::Cli::TableGenerator::Helper
|
6
|
+
|
7
|
+
requires_current_master
|
8
|
+
requires_current_master_token
|
9
|
+
requires_current_grid
|
10
|
+
|
11
|
+
def fields
|
12
|
+
quiet? ? %w(name) : %w(name username email)
|
13
|
+
end
|
14
|
+
|
15
|
+
def external_registries
|
16
|
+
client.get("grids/#{current_grid}/external_registries")['external_registries']
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
print_table(external_registries)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Kontena::Cli::ExternalRegistries
|
2
|
+
class RemoveCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NAME", "External registry name to remove"
|
6
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
7
|
+
|
8
|
+
def execute
|
9
|
+
require_api_url
|
10
|
+
token = require_token
|
11
|
+
confirm_command(name) unless forced?
|
12
|
+
spinner "Removing #{pastel.cyan(name)} external-registry from #{pastel.cyan(current_grid)} grid " do
|
13
|
+
client(token).delete("external_registries/#{current_grid}/#{name}")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Kontena::Cli::ExternalRegistryCommand < Kontena::Command
|
2
|
+
|
3
|
+
subcommand "add", "Add external Docker image registry", load_subcommand('external_registries/add_command')
|
4
|
+
subcommand ["list", "ls"], "List external Docker image registries", load_subcommand('external_registries/list_command')
|
5
|
+
subcommand ["remove", "rm"], "Remove external Docker image registry", load_subcommand('external_registries/remove_command')
|
6
|
+
|
7
|
+
def execute
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Kontena::Cli::GridCommand < Kontena::Command
|
2
|
+
|
3
|
+
subcommand ["list","ls"], "List all grids", load_subcommand('grids/list_command')
|
4
|
+
subcommand "create", "Create a new grid", load_subcommand('grids/create_command')
|
5
|
+
subcommand "update", "Update grid", load_subcommand('grids/update_command')
|
6
|
+
subcommand "use", "Switch to use specific grid", load_subcommand('grids/use_command')
|
7
|
+
subcommand "show", "Show grid details", load_subcommand('grids/show_command')
|
8
|
+
subcommand "logs", "Show logs from grid containers", load_subcommand('grids/logs_command')
|
9
|
+
subcommand "events", "Show events from grid", load_subcommand('grids/events_command')
|
10
|
+
subcommand ["remove","rm"], "Remove a grid", load_subcommand('grids/remove_command')
|
11
|
+
subcommand "current", "Show current grid details", load_subcommand('grids/current_command')
|
12
|
+
subcommand "env", "Show the current grid environment details", load_subcommand('grids/env_command')
|
13
|
+
subcommand "audit-log", "Show audit log of the current grid", load_subcommand('grids/audit_log_command')
|
14
|
+
subcommand "user", "User specific commands", load_subcommand('grids/user_command')
|
15
|
+
subcommand "cloud-config", "Generate cloud-config", load_subcommand('grids/cloud_config_command')
|
16
|
+
subcommand "trusted-subnet", "Trusted subnet related commands", load_subcommand('grids/trusted_subnet_command')
|
17
|
+
subcommand "health", "Check grid health", load_subcommand('grids/health_command')
|
18
|
+
|
19
|
+
def execute
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Grids
|
4
|
+
class AuditLogCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Common
|
7
|
+
|
8
|
+
option ["-l", "--lines"], "LINES", "Number of lines"
|
9
|
+
|
10
|
+
requires_current_master
|
11
|
+
requires_current_master_token
|
12
|
+
requires_current_grid
|
13
|
+
|
14
|
+
def execute
|
15
|
+
audit_logs = client.get("grids/#{current_grid}/audit_log", {limit: lines})
|
16
|
+
puts '%-30.30s %-10s %-15s %-25s %-15s %-25s %-15s %-15s' % ['Time', 'Grid', 'Resource Type', 'Resource Name', 'Event Name', 'User', 'Source IP', 'User-Agent']
|
17
|
+
audit_logs['logs'].each do |log|
|
18
|
+
puts '%-30.30s %-10s %-15s %-25s %-15s %-25s %-15s %-15s' % [ log['time'], log['grid'], log['resource_type'], log['resource_name'], log['event_name'], log['user_identity']['email'], log['source_ip'], log['user_agent']]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Grids
|
4
|
+
class CloudConfigCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Common
|
7
|
+
|
8
|
+
parameter "NAME", "Grid name"
|
9
|
+
option "--dns", "DNS", "DNS server", multivalued: true
|
10
|
+
option "--peer-interface", "IFACE", "Peer (private) network interface", default: "eth1"
|
11
|
+
option "--default-interface-match", "IFACE-GLOB", "Match default network interfaces", default: nil
|
12
|
+
option "--docker-bip", "BIP", "Docker bridge ip", default: "172.17.43.1/16"
|
13
|
+
option "--version", "VERSION", "Agent version", default: "latest"
|
14
|
+
|
15
|
+
def execute
|
16
|
+
require_api_url
|
17
|
+
token = require_token
|
18
|
+
|
19
|
+
grid = find_grid_by_name(name)
|
20
|
+
exit_with_error("Grid not found") unless grid
|
21
|
+
|
22
|
+
default_dns = docker_bip.split('/')[0]
|
23
|
+
if dns_list.size > 0
|
24
|
+
dns_servers = [default_dns] + dns_list
|
25
|
+
else
|
26
|
+
dns_servers = [default_dns, '8.8.8.8', '8.8.4.4']
|
27
|
+
end
|
28
|
+
|
29
|
+
if default_interface_match
|
30
|
+
# use explicit value
|
31
|
+
elsif peer_interface =~ /^([a-z]+)(\d+)$/
|
32
|
+
default_interface_match = "#{$1}*"
|
33
|
+
warning "Guessing --default-interface-match=#{default_interface_match} from --peer-interface=#{peer_interface}, make sure that this matches the interface names used by the node platform"
|
34
|
+
else
|
35
|
+
exit_with_error "Unable to determine --default-interface-match from --peer-interface=#{peer_interface}, configure --default-interface-match= explicitly"
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'kontena/machine/cloud_config/node_generator'
|
39
|
+
generator = Kontena::Machine::CloudConfig::NodeGenerator.new
|
40
|
+
config = generator.generate(
|
41
|
+
master_uri: api_url,
|
42
|
+
grid_token: grid['token'],
|
43
|
+
peer_interface: peer_interface,
|
44
|
+
dns_servers: dns_servers,
|
45
|
+
docker_bip: docker_bip,
|
46
|
+
version: version,
|
47
|
+
match_default_network_name: default_interface_match,
|
48
|
+
grid_subnet: grid['subnet'],
|
49
|
+
)
|
50
|
+
puts config
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|