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,34 @@
|
|
1
|
+
require_relative 'common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Master::Token
|
4
|
+
class ShowCommand < Kontena::Command
|
5
|
+
|
6
|
+
parameter "TOKEN_OR_ID", "Access token or access token id"
|
7
|
+
|
8
|
+
include Kontena::Cli::Common
|
9
|
+
include Common
|
10
|
+
|
11
|
+
requires_current_master
|
12
|
+
requires_current_master_token
|
13
|
+
|
14
|
+
option '--id', :flag, "Only output access token id", hidden: true
|
15
|
+
|
16
|
+
def execute
|
17
|
+
data = client.get("/oauth2/tokens/#{token_or_id}")
|
18
|
+
output = token_data_to_hash(data)
|
19
|
+
|
20
|
+
if id?
|
21
|
+
puts output[:id]
|
22
|
+
return
|
23
|
+
end
|
24
|
+
|
25
|
+
id = output.delete(:id)
|
26
|
+
puts '%s:' % id
|
27
|
+
output.each do |key, value|
|
28
|
+
puts " %s: %s" % [key, value.nil? ? '-' : value]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
module Kontena::Cli::Master
|
3
|
+
class TokenCommand < Kontena::Command
|
4
|
+
subcommand ["list", "ls"], "List access tokens", load_subcommand('master/token/list_command')
|
5
|
+
subcommand ["rm", "remove"], "Remove / revoke an access token", load_subcommand('master/token/remove_command')
|
6
|
+
subcommand "show", "Display access token", load_subcommand('master/token/show_command')
|
7
|
+
subcommand "current", "Display current access token", load_subcommand('master/token/current_command')
|
8
|
+
subcommand "create", "Generate an access token", load_subcommand('master/token/create_command')
|
9
|
+
|
10
|
+
def execute
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Kontena::Cli::Master
|
2
|
+
class UseCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "[NAME]", "Master name to use"
|
6
|
+
|
7
|
+
option '--clear', :flag, "Clear current master setting"
|
8
|
+
|
9
|
+
def execute
|
10
|
+
if clear?
|
11
|
+
config.current_master = nil
|
12
|
+
config.write
|
13
|
+
exit 0
|
14
|
+
elsif name.nil?
|
15
|
+
signal_usage_error Clamp.message(:parameter_argument_error, :param => 'NAME', :message => "missing")
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
19
|
+
master = config.find_server(name)
|
20
|
+
if master.nil?
|
21
|
+
exit_with_error "Could not resolve master by name '#{name}'. For a list of known masters please run: kontena master list"
|
22
|
+
else
|
23
|
+
config.current_master = master['name']
|
24
|
+
config.write
|
25
|
+
puts "Using master: #{pastel.cyan(master['name'])} (#{master['url']})"
|
26
|
+
puts "Using grid: #{current_grid ? pastel.cyan(current_grid) : "<none>"}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../../common'
|
2
|
+
require_relative 'role/add_command'
|
3
|
+
|
4
|
+
module Kontena::Cli::Master::User
|
5
|
+
class InviteCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
|
8
|
+
parameter "EMAIL ...", "List of emails"
|
9
|
+
|
10
|
+
option ['-r', '--roles'], '[ROLES]', 'Comma separated list of roles to assign to the invited users'
|
11
|
+
option ['-c', '--code'], :flag, 'Only output the invite code'
|
12
|
+
option '--external-id', '[EXTERNAL ID]', 'Assign external id to user', hidden: true
|
13
|
+
option '--return', :flag, 'Return the code', hidden: true
|
14
|
+
|
15
|
+
requires_current_master
|
16
|
+
requires_current_master_token
|
17
|
+
|
18
|
+
def execute
|
19
|
+
if self.roles
|
20
|
+
roles = self.roles.split(',')
|
21
|
+
else
|
22
|
+
roles = []
|
23
|
+
end
|
24
|
+
external_id = nil
|
25
|
+
if email_list.size == 1 && self.external_id
|
26
|
+
external_id = self.external_id
|
27
|
+
end
|
28
|
+
email_list.each do |email|
|
29
|
+
begin
|
30
|
+
data = { email: email, external_id: external_id, response_type: 'invite' }
|
31
|
+
response = client.post('/oauth2/authorize', data)
|
32
|
+
if self.code?
|
33
|
+
puts response['invite_code']
|
34
|
+
elsif self.return?
|
35
|
+
return response
|
36
|
+
else
|
37
|
+
puts pastel.green("Invitation created for #{response['email']}")
|
38
|
+
puts " * code: #{response['invite_code']}"
|
39
|
+
puts " * command: kontena master join #{current_master.url} #{response['invite_code']}"
|
40
|
+
end
|
41
|
+
roles.each do |role|
|
42
|
+
raise "Failed to add role" unless Kontena.run(["master", "user", "role", "add", role, email])
|
43
|
+
end
|
44
|
+
rescue => ex
|
45
|
+
logger.error(ex)
|
46
|
+
exit_with_error "Failed to invite #{email} : #{ex.message}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Master::User
|
4
|
+
class ListCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::TableGenerator::Helper
|
7
|
+
|
8
|
+
requires_current_master
|
9
|
+
requires_current_master_token
|
10
|
+
|
11
|
+
def fields
|
12
|
+
quiet? ? ['id'] : { email: 'email', roles: 'role_list' }
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
response = spin_if(!quiet? && $stdout.tty?, "Retrieving user list from Kontena Master") do
|
17
|
+
client.get('users')['users']
|
18
|
+
end
|
19
|
+
|
20
|
+
print_table(response) do |row|
|
21
|
+
if row['roles'].empty?
|
22
|
+
row['role_list'] = ''
|
23
|
+
else
|
24
|
+
row['role_list'] = row['roles'].map { |r| r['name'] }.join(',')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require_relative '../../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Master::User
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
|
7
|
+
parameter "EMAIL ...", "List of emails"
|
8
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
9
|
+
|
10
|
+
def execute
|
11
|
+
require_api_url
|
12
|
+
token = require_token
|
13
|
+
confirm unless forced?
|
14
|
+
|
15
|
+
email_list.each do |email|
|
16
|
+
begin
|
17
|
+
client(token).delete("users/#{email}")
|
18
|
+
rescue => ex
|
19
|
+
$stderr.puts pastel.red("Failed to remove user #{email} : #{ex.message}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Master::User
|
4
|
+
module Role
|
5
|
+
class AddCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
|
8
|
+
parameter "ROLE", "Role name"
|
9
|
+
parameter "USER ...", "List of users"
|
10
|
+
|
11
|
+
option '--silent', :flag, 'Reduce output verbosity'
|
12
|
+
|
13
|
+
def execute
|
14
|
+
require_api_url
|
15
|
+
token = require_token
|
16
|
+
data = { role: role }
|
17
|
+
|
18
|
+
user_list.each do |email|
|
19
|
+
begin
|
20
|
+
response = client(token).post("users/#{email}/roles", data)
|
21
|
+
puts "Added role #{role} to #{email}" unless running_silent?
|
22
|
+
rescue => ex
|
23
|
+
abort pastel.red("Failed to add role #{role} to #{email} : #{ex.message}")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../../common'
|
2
|
+
|
3
|
+
module Kontena::Cli::Master::User::Role
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
|
7
|
+
parameter "ROLE", "Role name"
|
8
|
+
parameter "USER ...", "List of users"
|
9
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
10
|
+
|
11
|
+
|
12
|
+
def execute
|
13
|
+
require_api_url
|
14
|
+
token = require_token
|
15
|
+
confirm unless forced?
|
16
|
+
|
17
|
+
user_list.each do |email|
|
18
|
+
begin
|
19
|
+
response = client(token).delete("users/#{email}/roles/#{role}")
|
20
|
+
puts "Removed role #{role} from #{email}" if response
|
21
|
+
rescue => ex
|
22
|
+
$stderr.puts pastel.red("Failed to remove role #{role} from #{email} : #{ex.message}")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
module Kontena::Cli::Master::User
|
2
|
+
class RoleCommand < Kontena::Command
|
3
|
+
subcommand "add", "Add role to user", load_subcommand('master/user/role/add_command')
|
4
|
+
subcommand ["remove", "rm"], "Remove role from user", load_subcommand('master/user/role/remove_command')
|
5
|
+
end
|
6
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module Kontena::Cli::Master
|
2
|
+
class UserCommand < Kontena::Command
|
3
|
+
subcommand "invite", "Invite user to Kontena Master", load_subcommand('master/user/invite_command')
|
4
|
+
subcommand ["remove", "rm"], "Remove user from Kontena Master", load_subcommand('master/user/remove_command')
|
5
|
+
subcommand ["list", "ls"], "List users", load_subcommand('master/user/list_command')
|
6
|
+
subcommand "role", "User role specific commands", load_subcommand('master/user/role_command')
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Kontena::Cli::MasterCommand < Kontena::Command
|
2
|
+
include Kontena::Util
|
3
|
+
|
4
|
+
subcommand ["list", "ls"], "List masters where client has logged in", load_subcommand('master/list_command')
|
5
|
+
subcommand ["remove", "rm"], "Remove a master from configuration", load_subcommand('master/remove_command')
|
6
|
+
subcommand ["config", "cfg"], "Configure master settings", load_subcommand('master/config_command')
|
7
|
+
subcommand "use", "Switch to use selected master", load_subcommand('master/use_command')
|
8
|
+
subcommand "user", "User specific commands", load_subcommand('master/user_command')
|
9
|
+
subcommand "current", "Show current master details", load_subcommand('master/current_command')
|
10
|
+
subcommand "login", "Authenticate to Kontena Master", load_subcommand('master/login_command')
|
11
|
+
subcommand "logout", "Log out of Kontena Master", load_subcommand('master/logout_command')
|
12
|
+
subcommand "token", "Manage Kontena Master access tokens", load_subcommand('master/token_command')
|
13
|
+
subcommand "join", "Join Kontena Master using an invitation code", load_subcommand('master/join_command')
|
14
|
+
subcommand "audit-log", "Show master audit logs", load_subcommand('master/audit_log_command')
|
15
|
+
subcommand "create", "Install a new Kontena Master", load_subcommand('master/create_command') if experimental?
|
16
|
+
subcommand "init-cloud", "Configure current master to use Kontena Cloud services", load_subcommand('master/init_cloud_command')
|
17
|
+
subcommand "ssh", "Connect to the master via SSH", load_subcommand('master/ssh_command')
|
18
|
+
|
19
|
+
def execute
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Kontena::Cli::NodeCommand < Kontena::Command
|
2
|
+
|
3
|
+
subcommand ["list","ls"], "List grid nodes", load_subcommand('nodes/list_command')
|
4
|
+
subcommand "show", "Show node", load_subcommand('nodes/show_command')
|
5
|
+
subcommand "ssh", "Ssh into node", load_subcommand('nodes/ssh_command')
|
6
|
+
subcommand "create", "Create node", load_subcommand('nodes/create_command')
|
7
|
+
subcommand "update", "Update node", load_subcommand('nodes/update_command')
|
8
|
+
subcommand "reset-token", "Reset node token for agent websocket connection", load_subcommand('nodes/reset_token_command')
|
9
|
+
subcommand ["remove","rm"], "Remove node", load_subcommand('nodes/remove_command')
|
10
|
+
subcommand "label", "Node label specific commands", load_subcommand('nodes/label_command')
|
11
|
+
subcommand "health", "Check node health", load_subcommand('nodes/health_command')
|
12
|
+
subcommand "env", "Generate kontena-agent.env configuration", load_subcommand('nodes/env_command')
|
13
|
+
|
14
|
+
|
15
|
+
def execute
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class CreateCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
requires_current_master
|
7
|
+
requires_current_master_token
|
8
|
+
requires_current_grid
|
9
|
+
|
10
|
+
parameter "NAME", "Node name"
|
11
|
+
option ["--token"], "TOKEN", "Node token"
|
12
|
+
option ["-l", "--label"], "LABEL", "Node label", multivalued: true
|
13
|
+
|
14
|
+
def execute
|
15
|
+
data = { name: name }
|
16
|
+
|
17
|
+
data[:token] = token if token
|
18
|
+
data[:labels] = label_list
|
19
|
+
|
20
|
+
spinner "Creating #{pastel.cyan(name)} node " do
|
21
|
+
client.post("grids/#{current_grid}/nodes", data)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class EnvCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
requires_current_master
|
7
|
+
requires_current_master_token
|
8
|
+
requires_current_grid
|
9
|
+
|
10
|
+
parameter "NAME", "Node name"
|
11
|
+
option ['--token'], :flag, 'Only show token', default: false
|
12
|
+
|
13
|
+
def grid_uri
|
14
|
+
grid_uri = self.current_master['url'].sub('http', 'ws')
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_node_token
|
18
|
+
return client.get("nodes/#{current_grid}/#{name}/token")
|
19
|
+
rescue Kontena::Errors::StandardError => exc
|
20
|
+
raise unless exc.status == 404
|
21
|
+
return nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def execute
|
25
|
+
unless token_node = get_node_token()
|
26
|
+
exit_with_error "Node #{name} was not created with a node token. Use `kontena grid env` instead"
|
27
|
+
end
|
28
|
+
|
29
|
+
if self.token?
|
30
|
+
puts token_node['token']
|
31
|
+
else
|
32
|
+
puts "KONTENA_URI=#{grid_uri}"
|
33
|
+
puts "KONTENA_NODE_TOKEN=#{token_node['token']}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'kontena/cli/helpers/health_helper'
|
2
|
+
require 'kontena/cli/helpers/time_helper'
|
3
|
+
|
4
|
+
module Kontena::Cli::Nodes
|
5
|
+
class HealthCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
include Kontena::Cli::GridOptions
|
8
|
+
include Kontena::Cli::Helpers::HealthHelper
|
9
|
+
include Kontena::Cli::Helpers::TimeHelper
|
10
|
+
|
11
|
+
parameter "NODE", "Node name"
|
12
|
+
|
13
|
+
requires_current_master
|
14
|
+
requires_current_grid
|
15
|
+
|
16
|
+
def execute
|
17
|
+
return show_node_health("#{current_grid}/#{self.node}")
|
18
|
+
end
|
19
|
+
|
20
|
+
# @param id [String] :grid/:node
|
21
|
+
# @return [Boolean] true if healthy
|
22
|
+
def show_node_health(id)
|
23
|
+
node_health = client.get("nodes/#{id}/health")
|
24
|
+
|
25
|
+
if node_health['status'] == 'online'
|
26
|
+
puts "#{health_icon(:ok)} Node is online for #{time_since(node_health['connected_at'])}"
|
27
|
+
else
|
28
|
+
puts "#{health_icon(:warning)} Node is #{node_health['status']}"
|
29
|
+
end
|
30
|
+
|
31
|
+
etcd_health, etcd_status = node_etcd_health(node_health['etcd_health'])
|
32
|
+
|
33
|
+
puts "#{health_icon etcd_health} Node #{node_health['name']} etcd is #{etcd_status}"
|
34
|
+
|
35
|
+
return etcd_health == :ok
|
36
|
+
|
37
|
+
rescue Kontena::Errors::StandardErrorHash => exc
|
38
|
+
raise unless exc.status == 422
|
39
|
+
|
40
|
+
exc.errors.each do |what, error|
|
41
|
+
puts "#{health_icon :offline} Node #{id} #{what} error: #{error}"
|
42
|
+
end
|
43
|
+
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class LabelCommand < Kontena::Command
|
3
|
+
subcommand ["list", "ls"], "List node labels", load_subcommand('nodes/labels/list_command')
|
4
|
+
subcommand "add", "Add label to node", load_subcommand('nodes/labels/add_command')
|
5
|
+
subcommand ["remove", "rm"], "Remove label from node", load_subcommand('nodes/labels/remove_command')
|
6
|
+
|
7
|
+
def execute
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Labels
|
2
|
+
class AddCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE", "Node name"
|
6
|
+
parameter "LABEL ...", "Labels"
|
7
|
+
|
8
|
+
requires_current_master
|
9
|
+
requires_current_master_token
|
10
|
+
requires_current_grid
|
11
|
+
|
12
|
+
def execute
|
13
|
+
node = client.get("nodes/#{current_grid}/#{self.node}")
|
14
|
+
data = { labels: (Array(node['labels']) + label_list).uniq }
|
15
|
+
client.put("nodes/#{node['id']}", data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Labels
|
2
|
+
class ListCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE", "Node name"
|
6
|
+
|
7
|
+
# the command outputs id info only anyway, this is here strictly for ignoring purposes
|
8
|
+
option ['-q', '--quiet'], :flag, "Output the identifying column only", hidden: true
|
9
|
+
|
10
|
+
requires_current_master
|
11
|
+
requires_current_master_token
|
12
|
+
requires_current_grid
|
13
|
+
|
14
|
+
def execute
|
15
|
+
node = client.get("nodes/#{current_grid}/#{self.node}")
|
16
|
+
puts Array(node['labels']).join("\n")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Kontena::Cli::Nodes::Labels
|
2
|
+
class RemoveCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
parameter "NODE", "Node name"
|
6
|
+
parameter "LABEL ...", "Labels"
|
7
|
+
|
8
|
+
option '--force', :flag, "Do not abort if items in label list are not found"
|
9
|
+
|
10
|
+
requires_current_master
|
11
|
+
requires_current_master_token
|
12
|
+
requires_current_grid
|
13
|
+
|
14
|
+
def execute
|
15
|
+
node_data = client.get("nodes/#{current_grid}/#{self.node}")
|
16
|
+
|
17
|
+
node_data['labels'] ||= []
|
18
|
+
|
19
|
+
found_labels = label_list.uniq & node_data['labels']
|
20
|
+
|
21
|
+
if !force? && found_labels.size != label_list.uniq.size
|
22
|
+
missing = label_list - found_labels
|
23
|
+
exit_with_error "Label#{'s' if missing.size > 1} #{pastel.cyan(missing.join(', '))} not found on node #{pastel.cyan(node)}"
|
24
|
+
end
|
25
|
+
|
26
|
+
return nil if found_labels.empty?
|
27
|
+
|
28
|
+
data = { labels: node_data['labels'] - found_labels }
|
29
|
+
client.put("nodes/#{node_data['id']}", data)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require_relative '../helpers/health_helper'
|
2
|
+
require_relative '../helpers/time_helper'
|
3
|
+
|
4
|
+
module Kontena::Cli::Nodes
|
5
|
+
class ListCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
include Kontena::Cli::GridOptions
|
8
|
+
include Kontena::Cli::Helpers::HealthHelper
|
9
|
+
include Kontena::Cli::Helpers::TimeHelper
|
10
|
+
include Kontena::Cli::TableGenerator::Helper
|
11
|
+
|
12
|
+
option ['-a', '--all'], :flag, 'List nodes for all grids', default: false
|
13
|
+
|
14
|
+
requires_current_master
|
15
|
+
requires_current_master_token
|
16
|
+
requires_current_grid
|
17
|
+
|
18
|
+
def node_name(node, grid)
|
19
|
+
return node['name'] unless all?
|
20
|
+
"#{grid['name']}/#{node['name']}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def node_status(node)
|
24
|
+
case node_status = node['status']
|
25
|
+
when 'created'
|
26
|
+
"#{pastel.dark('created')} #{time_since(node['created_at'], terse: true)}"
|
27
|
+
when 'connecting'
|
28
|
+
"#{pastel.cyan('connecting')} #{time_since(node['connected_at'], terse: true)}"
|
29
|
+
when 'online'
|
30
|
+
"#{pastel.green('online')} #{time_since(node['connected_at'], terse: true)}"
|
31
|
+
when 'drain'
|
32
|
+
"#{pastel.yellow('drain')}"
|
33
|
+
when 'offline'
|
34
|
+
"#{pastel.red('offline')} #{time_since(node['disconnected_at'], terse: true)}"
|
35
|
+
else
|
36
|
+
pastel.white(node_status.to_s)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def node_initial(node, grid)
|
41
|
+
return '-' unless node['initial_member']
|
42
|
+
"#{node['node_number']} / #{grid['initial_size']}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def node_labels(node)
|
46
|
+
(node['labels'] || ['-']).join(',')
|
47
|
+
end
|
48
|
+
|
49
|
+
def fields
|
50
|
+
return ['name'] if quiet?
|
51
|
+
{
|
52
|
+
name: 'name',
|
53
|
+
version: 'agent_version',
|
54
|
+
status: 'status',
|
55
|
+
initial: 'initial',
|
56
|
+
labels: 'labels',
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
def grids
|
61
|
+
all? ? client.get("grids")['grids'] : [client.get("grids/#{current_grid}")]
|
62
|
+
end
|
63
|
+
|
64
|
+
def grid_nodes(grid_name)
|
65
|
+
client.get("grids/#{grid_name}/nodes")['nodes']
|
66
|
+
end
|
67
|
+
|
68
|
+
def node_data
|
69
|
+
grids.flat_map do |grid|
|
70
|
+
grid_nodes = []
|
71
|
+
|
72
|
+
grid_nodes(grid['id']).each do |node|
|
73
|
+
node['name'] = node_name(node, grid)
|
74
|
+
grid_nodes << node
|
75
|
+
next if quiet?
|
76
|
+
node['agent_version'] ||= '-'
|
77
|
+
node['initial'] = node_initial(node, grid)
|
78
|
+
node['status'] = node_status(node)
|
79
|
+
node['labels'] = node_labels(node)
|
80
|
+
end
|
81
|
+
|
82
|
+
unless quiet?
|
83
|
+
grid_health = grid_health(grid, grid_nodes)
|
84
|
+
grid_nodes.each do |node|
|
85
|
+
node['name'] = health_icon(node_health(node, grid_health)) + " " + (node['name'] || node['node_id'])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
grid_nodes.sort_by { |n| n['node_number'] }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def execute
|
94
|
+
print_table(node_data)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class RemoveCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
parameter "NODE ...", "Node name", attribute_name: :nodes
|
7
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
8
|
+
|
9
|
+
def execute
|
10
|
+
require_api_url
|
11
|
+
require_current_grid
|
12
|
+
token = require_token
|
13
|
+
|
14
|
+
nodes.each do |node_name|
|
15
|
+
node = client(token).get("nodes/#{current_grid}/#{node_name}")
|
16
|
+
provider = Array(node["labels"]).find{ |l| l.start_with?('provider=')}.to_s.split('=').last
|
17
|
+
if node['connected'] && provider
|
18
|
+
plugin = provider == 'kontena' ? 'cloud' : provider
|
19
|
+
exit_with_error "Node #{node['name']} is still connected. You should terminate the node instead: kontena #{plugin} node terminate #{node['name']}"
|
20
|
+
elsif node['connected']
|
21
|
+
exit_with_error "Node #{node['name']} is still connected. You must terminate the node before removing it"
|
22
|
+
else
|
23
|
+
warning "Removing a node from the grid does not terminate the host machine from any cloud provider, so your cloud provider may continue to bill you for the machine until you terminate it"
|
24
|
+
end
|
25
|
+
|
26
|
+
confirm_command(node_name) unless forced?
|
27
|
+
|
28
|
+
spinner "Removing #{pastel.cyan(node_name)} node from #{pastel.cyan(current_grid)} grid " do
|
29
|
+
client(token).delete("nodes/#{node['id']}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Kontena::Cli::Nodes
|
2
|
+
class ResetTokenCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
include Kontena::Cli::GridOptions
|
5
|
+
|
6
|
+
requires_current_master
|
7
|
+
requires_current_master_token
|
8
|
+
requires_current_grid
|
9
|
+
|
10
|
+
parameter "NODE", "Node name"
|
11
|
+
|
12
|
+
option ["--token"], "TOKEN", "Use given node token instead of generating a random token"
|
13
|
+
option ["--clear-token"], :flag, "Clear node token, reverting to grid token"
|
14
|
+
option "--[no-]reset-connection", :flag, "Reset agent websocket connection", default: true
|
15
|
+
option "--force", :flag, "Force token update"
|
16
|
+
|
17
|
+
def execute
|
18
|
+
confirm("Resetting the node token will disconnect the agent (unless using --no-reset-connection), and require you to reconfigure the kontena-agent using the new `kontena node env` values before it will be able to reconnect. Are you sure?")
|
19
|
+
|
20
|
+
spinner "Resetting node #{pastel.cyan(self.node)} websocket connection token" do
|
21
|
+
if self.clear_token?
|
22
|
+
client.delete("nodes/#{current_grid}/#{self.node}/token",
|
23
|
+
reset_connection: self.reset_connection?,
|
24
|
+
)
|
25
|
+
else
|
26
|
+
client.put("nodes/#{current_grid}/#{self.node}/token",
|
27
|
+
token: self.token,
|
28
|
+
reset_connection: self.reset_connection?,
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|