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,13 @@
|
|
1
|
+
|
2
|
+
class Kontena::Cli::CloudCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
subcommand "login", "Authenticate to Kontena Cloud", load_subcommand('cloud/login_command')
|
6
|
+
subcommand "logout", "Logout from Kontena Cloud", load_subcommand('cloud/logout_command')
|
7
|
+
subcommand "master", "Master specific commands", load_subcommand('cloud/master_command')
|
8
|
+
|
9
|
+
def subcommand_missing(name)
|
10
|
+
return super(name) unless %w(platform node org organization image-repository ir region token).include?(name)
|
11
|
+
exit_with_error "The #{pastel.cyan('cloud')} plugin has not been installed. Use: #{pastel.cyan('kontena plugin install cloud')}"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,360 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
require 'kontena_cli'
|
3
|
+
|
4
|
+
module Kontena
|
5
|
+
autoload :Client, 'kontena/client'
|
6
|
+
|
7
|
+
module Cli
|
8
|
+
autoload :ShellSpinner, 'kontena/cli/spinner'
|
9
|
+
autoload :Spinner, 'kontena/cli/spinner'
|
10
|
+
autoload :Config, 'kontena/cli/config'
|
11
|
+
|
12
|
+
module Common
|
13
|
+
extend Forwardable
|
14
|
+
|
15
|
+
def_delegators :prompt, :ask, :yes?
|
16
|
+
def_delegators :config,
|
17
|
+
:current_grid=, :require_current_grid, :current_master,
|
18
|
+
:current_master=, :require_current_master, :require_current_account,
|
19
|
+
:current_account
|
20
|
+
def_delegator :config, :config_filename, :settings_filename
|
21
|
+
def_delegator :client, :server_version, :api_url_version
|
22
|
+
|
23
|
+
def logger
|
24
|
+
Kontena.logger
|
25
|
+
end
|
26
|
+
|
27
|
+
def prompt
|
28
|
+
Kontena.prompt
|
29
|
+
end
|
30
|
+
|
31
|
+
def pastel
|
32
|
+
Kontena.pastel
|
33
|
+
end
|
34
|
+
|
35
|
+
def spinner(msg, &block)
|
36
|
+
Kontena::Cli::Spinner.spin(msg, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def config
|
40
|
+
Kontena::Cli::Config.instance
|
41
|
+
end
|
42
|
+
|
43
|
+
def debug?
|
44
|
+
Kontena.debug?
|
45
|
+
end
|
46
|
+
|
47
|
+
# Read from STDIN. If stdin is a console, use prompt to ask.
|
48
|
+
# @param [String] message
|
49
|
+
# @param [Symbol] mode (prompt method: :ask, :multiline, etc)
|
50
|
+
def stdin_input(message = nil, mode = :ask)
|
51
|
+
if $stdin.tty?
|
52
|
+
Array(prompt.send(mode, message)).join.chomp
|
53
|
+
elsif !$stdin.eof?
|
54
|
+
$stdin.read.chomp
|
55
|
+
else
|
56
|
+
exit_with_error 'Missing input'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def running_silent?
|
61
|
+
self.respond_to?(:silent?) && self.silent?
|
62
|
+
end
|
63
|
+
|
64
|
+
def running_verbose?
|
65
|
+
self.respond_to?(:verbose?) && self.verbose?
|
66
|
+
end
|
67
|
+
|
68
|
+
def running_quiet?
|
69
|
+
self.respond_to?(:quiet?) && self.quiet?
|
70
|
+
end
|
71
|
+
|
72
|
+
# Puts that puts even when self.silent?
|
73
|
+
def sputs(*msgs)
|
74
|
+
::Kernel.puts(*msgs)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Print that prints even when self.silent?
|
78
|
+
def sprint(*msgs)
|
79
|
+
::Kernel.print(*msgs)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Print that doesn't print if self.silent?
|
83
|
+
def print(*msgs)
|
84
|
+
if running_silent?
|
85
|
+
logger.debug(msgs.join)
|
86
|
+
else
|
87
|
+
super(*msgs)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Puts that doesn't puts if self.silent?
|
92
|
+
def puts(*msgs)
|
93
|
+
if running_silent?
|
94
|
+
msgs.compact.each { |msg| logger.debug(msg) }
|
95
|
+
elsif Thread.main['spinners'] && !Thread.main['spinners'].empty?
|
96
|
+
Thread.main['spinner_msgs'] ||= []
|
97
|
+
msgs.each { |msg| Thread.main['spinner_msgs'] << msg }
|
98
|
+
else
|
99
|
+
super(*msgs)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# Only output message if in verbose mode
|
104
|
+
def vputs(msg = nil)
|
105
|
+
if running_verbose?
|
106
|
+
puts msg
|
107
|
+
elsif debug? && msg
|
108
|
+
logger.debug msg
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Only show spinner when in verbose mode
|
113
|
+
def vspinner(msg, &block)
|
114
|
+
return vfakespinner(msg) unless block_given?
|
115
|
+
|
116
|
+
if running_verbose? && $stdout.tty?
|
117
|
+
spinner(msg, &block)
|
118
|
+
else
|
119
|
+
logger.debug { msg }
|
120
|
+
yield
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Output a message like: "> Reading foofoo .."
|
125
|
+
# @param message [String] the message to display
|
126
|
+
# @param dots [TrueClass,FalseClass] set to false if you don't want to add ".." after the message
|
127
|
+
def caret(msg, dots: true)
|
128
|
+
puts "#{pastel.green('>')} #{msg}#{" #{pastel.green('..')}" if dots}"
|
129
|
+
end
|
130
|
+
|
131
|
+
# Run a spinner with a message for the block if a truthy value or a proc returns true.
|
132
|
+
# @example
|
133
|
+
# spin_if(proc { prompt.yes?("for real?") }, "Doing as requested") do
|
134
|
+
# # doing stuff
|
135
|
+
# end
|
136
|
+
# spin_if(a == 1, "Value of 'a' is 1, so let's do this") do
|
137
|
+
# # doing stuff
|
138
|
+
# end
|
139
|
+
# @param obj_or_proc [Object,Proc] something that responds to .call or is truthy/falsey
|
140
|
+
# @param message [String] the message to display
|
141
|
+
# @return anything the block returns
|
142
|
+
def spin_if(obj_or_proc, message, &block)
|
143
|
+
if (obj_or_proc.respond_to?(:call) && obj_or_proc.call) || obj_or_proc
|
144
|
+
spinner(message, &block)
|
145
|
+
else
|
146
|
+
logger.debug { message }
|
147
|
+
yield
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# Like vspinner but without actually running any block
|
152
|
+
def vfakespinner(msg, success: true)
|
153
|
+
if !running_verbose?
|
154
|
+
logger.debug { msg }
|
155
|
+
return
|
156
|
+
end
|
157
|
+
puts " [#{ success ? pastel.green('done') : pastel.red('fail')}] #{msg}"
|
158
|
+
end
|
159
|
+
|
160
|
+
def warning(msg)
|
161
|
+
warning = pastel.yellow('warn')
|
162
|
+
$stderr.puts " [#{warning}] #{msg}"
|
163
|
+
end
|
164
|
+
|
165
|
+
def exit_with_error(msg, code = 1)
|
166
|
+
error = pastel.red('error')
|
167
|
+
$stderr.puts " [#{error}] #{msg}"
|
168
|
+
exit code
|
169
|
+
end
|
170
|
+
module_function :exit_with_error
|
171
|
+
|
172
|
+
def require_api_url
|
173
|
+
config.require_current_master.url
|
174
|
+
end
|
175
|
+
|
176
|
+
def require_token
|
177
|
+
retried ||= false
|
178
|
+
config.require_current_master_token
|
179
|
+
rescue Kontena::Cli::Config::TokenExpiredError
|
180
|
+
if retried
|
181
|
+
raise ArgumentError, "Current master access token has expired and refresh failed."
|
182
|
+
else
|
183
|
+
logger.debug "Access token expired, trying to refresh"
|
184
|
+
retried = true
|
185
|
+
client.refresh_token && retry
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
## Invalidate refresh_token
|
190
|
+
# @param [Kontena::Cli::Config::Server] server
|
191
|
+
def use_refresh_token(server)
|
192
|
+
return unless server.token
|
193
|
+
return unless server.token.refresh_token
|
194
|
+
return if server.token.expired?
|
195
|
+
client = Kontena::Client.new(server.url, server.token,
|
196
|
+
ssl_cert_path: server.ssl_cert_path,
|
197
|
+
ssl_subject_cn: server.ssl_subject_cn,
|
198
|
+
)
|
199
|
+
logger.debug "Trying to invalidate refresh token on #{server.name}"
|
200
|
+
client.refresh_token
|
201
|
+
rescue => ex
|
202
|
+
logger.debug "Refreshing failed: #{ex.class.name} : #{ex.message}"
|
203
|
+
end
|
204
|
+
|
205
|
+
def kontena_account
|
206
|
+
@kontena_account ||= config.current_account
|
207
|
+
end
|
208
|
+
|
209
|
+
def cloud_auth?
|
210
|
+
return false unless kontena_account
|
211
|
+
return false unless kontena_account.token
|
212
|
+
return false unless kontena_account.token.access_token
|
213
|
+
true
|
214
|
+
end
|
215
|
+
|
216
|
+
def cloud_client
|
217
|
+
@cloud_client ||= Kontena::Client.new(kontena_account.url, kontena_account.token, prefix: '/')
|
218
|
+
end
|
219
|
+
|
220
|
+
def reset_cloud_client
|
221
|
+
@cloud_client = nil
|
222
|
+
end
|
223
|
+
|
224
|
+
def client(token = nil, api_url = nil)
|
225
|
+
return @client if @client
|
226
|
+
|
227
|
+
if token.kind_of?(String)
|
228
|
+
token = Kontena::Cli::Config::Token.new(access_token: token)
|
229
|
+
end
|
230
|
+
|
231
|
+
@client = Kontena::Client.new(
|
232
|
+
api_url || require_current_master.url,
|
233
|
+
token || require_current_master.token,
|
234
|
+
ssl_cert_path: require_current_master.ssl_cert_path,
|
235
|
+
ssl_subject_cn: require_current_master.ssl_subject_cn,
|
236
|
+
)
|
237
|
+
end
|
238
|
+
|
239
|
+
def reset_client
|
240
|
+
@client = nil
|
241
|
+
end
|
242
|
+
|
243
|
+
def api_url
|
244
|
+
config.require_current_master.url
|
245
|
+
end
|
246
|
+
|
247
|
+
def clear_current_grid
|
248
|
+
current_master.delete_field(:grid) if require_current_master.respond_to?(:grid)
|
249
|
+
config.write
|
250
|
+
end
|
251
|
+
|
252
|
+
def current_grid
|
253
|
+
(self.respond_to?(:grid) ? self.grid : nil) || config.current_grid
|
254
|
+
end
|
255
|
+
|
256
|
+
def current_master_index
|
257
|
+
config.find_server_index(require_current_master.name)
|
258
|
+
end
|
259
|
+
|
260
|
+
def error(message = "Error")
|
261
|
+
prompt.error(message)
|
262
|
+
exit(1)
|
263
|
+
end
|
264
|
+
|
265
|
+
def confirm_command(name, message = nil)
|
266
|
+
if self.respond_to?(:force?) && self.force?
|
267
|
+
return
|
268
|
+
end
|
269
|
+
puts message if message
|
270
|
+
exit_with_error 'Command requires --force' unless $stdout.tty? && $stdin.tty?
|
271
|
+
puts "Destructive command. To proceed, type \"#{name}\" or re-run this command with --force option."
|
272
|
+
|
273
|
+
ask("Enter '#{name}' to confirm: ") == name.to_s || error("Confirmation did not match #{name}. Aborted command.")
|
274
|
+
end
|
275
|
+
|
276
|
+
def confirm(message = 'Destructive command. You can skip this prompt by running this command with --force option. Are you sure?')
|
277
|
+
if self.respond_to?(:force?) && self.force?
|
278
|
+
return
|
279
|
+
end
|
280
|
+
exit_with_error 'Command requires --force' unless $stdout.tty? && $stdin.tty?
|
281
|
+
prompt.yes?(message) || error('Aborted command.')
|
282
|
+
end
|
283
|
+
|
284
|
+
def api_url=(api_url)
|
285
|
+
config.current_master.url = api_url
|
286
|
+
config.write
|
287
|
+
end
|
288
|
+
|
289
|
+
def access_token=(token)
|
290
|
+
require_current_master.token.access_token = token
|
291
|
+
config.write
|
292
|
+
end
|
293
|
+
|
294
|
+
def add_master(server_name, master_info)
|
295
|
+
config.add_server(master_info.merge('name' => server_name))
|
296
|
+
end
|
297
|
+
|
298
|
+
def any_key_to_continue_with_timeout(timeout=9)
|
299
|
+
return nil if running_silent?
|
300
|
+
return nil unless $stdout.tty?
|
301
|
+
prompt.keypress("Press any key to continue or ctrl-c to cancel (Automatically continuing in :countdown seconds) ...", timeout: timeout)
|
302
|
+
end
|
303
|
+
|
304
|
+
def any_key_to_continue(timeout = nil)
|
305
|
+
return nil if running_silent?
|
306
|
+
return nil unless $stdout.tty?
|
307
|
+
return any_key_to_continue_with_timeout(timeout) if timeout
|
308
|
+
prompt.keypress("Press any key to continue or ctrl-c to cancel.. ")
|
309
|
+
end
|
310
|
+
|
311
|
+
def display_account_login_info
|
312
|
+
if kontena_account
|
313
|
+
if kontena_account.token && kontena_account.token.access_token
|
314
|
+
begin
|
315
|
+
puts [
|
316
|
+
pastel.green("Authenticated to Kontena Cloud at"),
|
317
|
+
pastel.yellow(kontena_account.url),
|
318
|
+
pastel.green("as"),
|
319
|
+
pastel.yellow(kontena_account.username)
|
320
|
+
].join(' ')
|
321
|
+
rescue
|
322
|
+
end
|
323
|
+
else
|
324
|
+
puts pastel.cyan("Not authenticated to Kontena Cloud")
|
325
|
+
end
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
def display_master_login_info
|
330
|
+
server = config.current_master
|
331
|
+
if server
|
332
|
+
if server.token && server.token.access_token
|
333
|
+
puts [
|
334
|
+
pastel.green('Authenticated to Kontena Master'),
|
335
|
+
pastel.yellow(server.name),
|
336
|
+
pastel.green('at'),
|
337
|
+
pastel.yellow(server.url),
|
338
|
+
pastel.green('as'),
|
339
|
+
pastel.yellow(server.token.username || server.username)
|
340
|
+
].join(' ')
|
341
|
+
else
|
342
|
+
puts pastel.cyan("Not authenticated to current master #{server.name}")
|
343
|
+
end
|
344
|
+
else
|
345
|
+
puts pastel.cyan("Current master not selected")
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
def display_login_info(only: nil)
|
350
|
+
display_master_login_info unless only == :account
|
351
|
+
display_account_login_info unless only == :master
|
352
|
+
end
|
353
|
+
|
354
|
+
def display_logo
|
355
|
+
puts File.read(File.expand_path('../../../../LOGO', __FILE__))
|
356
|
+
end
|
357
|
+
module_function :display_logo
|
358
|
+
end
|
359
|
+
end
|
360
|
+
end
|