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,30 @@
|
|
1
|
+
|
2
|
+
module Kontena::Cli::Certificate
|
3
|
+
class RegisterCommand < Kontena::Command
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
include Kontena::Cli::GridOptions
|
6
|
+
|
7
|
+
|
8
|
+
parameter "EMAIL", "Email to register"
|
9
|
+
|
10
|
+
option '--agree-tos', :flag, "Automatically agree on Let's Encrypt Terms of Service"
|
11
|
+
|
12
|
+
def execute
|
13
|
+
require_api_url
|
14
|
+
token = require_token
|
15
|
+
|
16
|
+
data = {email: email}
|
17
|
+
|
18
|
+
if self.agree_tos? || ask_continue
|
19
|
+
response = client(token).post("certificates/#{current_grid}/register", data)
|
20
|
+
puts 'Email registered to LetsEncrypt'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def ask_continue
|
25
|
+
puts "By registering, you agree on Let's Encrypt Terms of Service: https://letsencrypt.org/documents/2017.11.15-LE-SA-v1.2.pdf"
|
26
|
+
exit_with_error "Registration canceled!" unless prompt.yes?("Continue?")
|
27
|
+
true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../services/services_helper'
|
2
|
+
|
3
|
+
module Kontena::Cli::Certificate
|
4
|
+
class RemoveCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
include Kontena::Cli::GridOptions
|
7
|
+
|
8
|
+
parameter "SUBJECT", "Certificate subject"
|
9
|
+
option "--force", :flag, "Force remove", default: false, attribute_name: :forced
|
10
|
+
|
11
|
+
requires_current_master
|
12
|
+
requires_current_master_token
|
13
|
+
requires_current_grid
|
14
|
+
|
15
|
+
def execute
|
16
|
+
confirm_command(self.subject) unless forced?
|
17
|
+
|
18
|
+
spinner "Removing certificate for #{self.subject.colorize(:cyan)} from #{current_grid.colorize(:cyan)} grid " do
|
19
|
+
client.delete("certificates/#{current_grid}/#{self.subject}")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module Kontena::Cli::Certificate
|
3
|
+
class RequestCommand < Kontena::Command
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
include Kontena::Cli::GridOptions
|
6
|
+
|
7
|
+
parameter "DOMAIN ...", "Domain(s) to get certificate for"
|
8
|
+
|
9
|
+
def execute
|
10
|
+
require_api_url
|
11
|
+
token = require_token
|
12
|
+
data = {domains: domain_list}
|
13
|
+
|
14
|
+
spinner "Requesting certificate for #{domain_list.join(',').colorize(:cyan)} " do
|
15
|
+
response = client(token).post("grids/#{current_grid}/certificates", data)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../services/services_helper'
|
2
|
+
require_relative './common'
|
3
|
+
|
4
|
+
module Kontena::Cli::Certificate
|
5
|
+
class ShowCommand < Kontena::Command
|
6
|
+
include Kontena::Cli::Common
|
7
|
+
include Kontena::Cli::GridOptions
|
8
|
+
include Common
|
9
|
+
|
10
|
+
parameter "SUBJECT", "Certificate subject"
|
11
|
+
|
12
|
+
requires_current_master
|
13
|
+
requires_current_master_token
|
14
|
+
requires_current_grid
|
15
|
+
|
16
|
+
def execute
|
17
|
+
cert = client.get("certificates/#{current_grid}/#{self.subject}")
|
18
|
+
|
19
|
+
show_certificate(cert)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
class Kontena::Cli::CertificateCommand < Kontena::Command
|
3
|
+
|
4
|
+
subcommand ["list", "ls"], "List certificates", load_subcommand('certificate/list_command')
|
5
|
+
subcommand "show", "Show certificate details", load_subcommand('certificate/show_command')
|
6
|
+
subcommand "export", "Export certificate to file", load_subcommand('certificate/export_command')
|
7
|
+
subcommand "register", "Register to LetsEncrypt", load_subcommand('certificate/register_command')
|
8
|
+
subcommand "authorize", "Create DNS authorization for domain", load_subcommand('certificate/authorize_command')
|
9
|
+
subcommand "request", "Request certificate for domain", load_subcommand('certificate/request_command')
|
10
|
+
subcommand "get", "Get certificate for domain [DEPRECATED]", load_subcommand('certificate/get_command')
|
11
|
+
subcommand "import", "Import certificate from file", load_subcommand('certificate/import_command')
|
12
|
+
subcommand ["remove", "rm"], "Remove certificate for domain", load_subcommand('certificate/remove_command')
|
13
|
+
subcommand "domain-authorization", "Domain authorization sub-commands", load_subcommand('certificate/domain_authorize_command')
|
14
|
+
|
15
|
+
|
16
|
+
def execute
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Kontena::Cli::Cloud
|
4
|
+
class LoginCommand < Kontena::Command
|
5
|
+
include Kontena::Cli::Common
|
6
|
+
|
7
|
+
option ['-t', '--token'], '[TOKEN]', 'Use a pre-generated access token', environment_variable: 'KONTENA_CLOUD_TOKEN'
|
8
|
+
option ['-c', '--code'], '[CODE]', 'Use an authorization code'
|
9
|
+
option ['-v', '--verbose'], :flag, 'Increase output verbosity'
|
10
|
+
option ['-f', '--force'], :flag, 'Force reauthentication'
|
11
|
+
option ['-r', '--remote'], :flag, 'Remote login'
|
12
|
+
|
13
|
+
def execute
|
14
|
+
if self.code && self.force?
|
15
|
+
exit_with_error "Can't use --code and --force together"
|
16
|
+
end
|
17
|
+
|
18
|
+
if self.token
|
19
|
+
exit_with_error "Can't use --token and --force together" if self.force?
|
20
|
+
exit_with_error "Can't use --token and --code together" if self.code
|
21
|
+
end
|
22
|
+
|
23
|
+
if !kontena_account.token || !kontena_account.token.access_token || self.token || self.force?
|
24
|
+
kontena_account.token = Kontena::Cli::Config::Token.new(access_token: self.token, parent_type: :account, parent_name: kontena_account.name)
|
25
|
+
end
|
26
|
+
|
27
|
+
use_authorization_code(self.code) if self.code
|
28
|
+
|
29
|
+
client = Kontena::Client.new(kontena_account.userinfo_endpoint, kontena_account.token, prefix: '')
|
30
|
+
|
31
|
+
if kontena_account.token.access_token
|
32
|
+
auth_ok = vspinner "Verifying current access token" do
|
33
|
+
client.authentication_ok?(kontena_account.userinfo_endpoint)
|
34
|
+
end
|
35
|
+
if auth_ok
|
36
|
+
finish and return
|
37
|
+
end
|
38
|
+
end
|
39
|
+
if remote?
|
40
|
+
remote_login
|
41
|
+
else
|
42
|
+
web_flow
|
43
|
+
end
|
44
|
+
finish
|
45
|
+
end
|
46
|
+
|
47
|
+
def finish
|
48
|
+
update_userinfo unless kontena_account.username
|
49
|
+
config.current_account = kontena_account.name
|
50
|
+
config.write
|
51
|
+
config.reset_instance
|
52
|
+
reset_cloud_client
|
53
|
+
display_logo
|
54
|
+
display_login_info(only: :account)
|
55
|
+
true
|
56
|
+
end
|
57
|
+
|
58
|
+
def remote_login
|
59
|
+
client_id = kontena_account.client_id || Kontena::Client::CLIENT_ID
|
60
|
+
params = {
|
61
|
+
client_id: client_id
|
62
|
+
}
|
63
|
+
cloud_url = kontena_account.url
|
64
|
+
client = Kontena::Client.new(cloud_url, nil)
|
65
|
+
auth_request_response = client.post('/auth_requests', params, {}, { 'Content-Type' => 'application/x-www-form-urlencoded' }) rescue nil
|
66
|
+
if !auth_request_response.kind_of?(Hash)
|
67
|
+
exit_with_error "Remote login request failed"
|
68
|
+
elsif auth_request_response['error']
|
69
|
+
exit_with_error "Remote login request failed: #{auth_request_response['error']}"
|
70
|
+
end
|
71
|
+
begin
|
72
|
+
verification_uri = URI.parse(auth_request_response['verification_uri'])
|
73
|
+
rescue => e
|
74
|
+
exit_with_error "Parsing remote login URL failed."
|
75
|
+
end
|
76
|
+
|
77
|
+
puts "Please visit #{pastel.cyan(verification_uri.to_s)} and enter the code"
|
78
|
+
puts
|
79
|
+
puts "#{auth_request_response['user_code']}"
|
80
|
+
puts
|
81
|
+
puts "Once the authentication is complete you can close the browser"
|
82
|
+
puts "window or tab and return to this window to continue."
|
83
|
+
puts
|
84
|
+
|
85
|
+
code_request_params = {
|
86
|
+
client_id: client_id,
|
87
|
+
device_code: auth_request_response['device_code']
|
88
|
+
}
|
89
|
+
code_response = nil
|
90
|
+
spinner "Waiting for authentication" do
|
91
|
+
until code_response do
|
92
|
+
code_response = client.post("/auth_requests/code", code_request_params, {}, { 'Content-Type' => 'application/x-www-form-urlencoded' }) rescue nil
|
93
|
+
sleep 1
|
94
|
+
end
|
95
|
+
end
|
96
|
+
update_token(code_response)
|
97
|
+
end
|
98
|
+
|
99
|
+
def web_flow
|
100
|
+
if Kontena.browserless? && !force?
|
101
|
+
$stderr.puts "Your current environment does not seem to support opening a local graphical WWW browser. Using remote login instead."
|
102
|
+
$stderr.puts
|
103
|
+
remote_login
|
104
|
+
return
|
105
|
+
end
|
106
|
+
|
107
|
+
require_relative '../localhost_web_server'
|
108
|
+
require 'kontena/cli/browser_launcher'
|
109
|
+
|
110
|
+
uri = URI.parse(kontena_account.authorization_endpoint)
|
111
|
+
uri.host ||= kontena_account.url
|
112
|
+
|
113
|
+
web_server = Kontena::LocalhostWebServer.new
|
114
|
+
|
115
|
+
params = {
|
116
|
+
client_id: kontena_account.client_id || Kontena::Client::CLIENT_ID,
|
117
|
+
response_type: 'code',
|
118
|
+
redirect_uri: "http://localhost:#{web_server.port}/cb"
|
119
|
+
}
|
120
|
+
|
121
|
+
uri.query = URI.encode_www_form(params)
|
122
|
+
|
123
|
+
puts "Opening a browser to #{uri.scheme}://#{uri.host}"
|
124
|
+
#puts
|
125
|
+
#puts "If you are running this command over an ssh connection or it's"
|
126
|
+
#puts "otherwise not possible to open a browser from this terminal"
|
127
|
+
#puts "then you must use a pregenerated access token using the --token"
|
128
|
+
#puts "option : kontena cloud login --token <access_token>"
|
129
|
+
puts
|
130
|
+
puts "Once the authentication is complete you can close the browser"
|
131
|
+
puts "window or tab and return to this window to continue."
|
132
|
+
puts
|
133
|
+
any_key_to_continue(10)
|
134
|
+
|
135
|
+
puts "If the browser does not open, try visiting this URL manually:"
|
136
|
+
puts "#{uri.to_s}"
|
137
|
+
puts
|
138
|
+
|
139
|
+
server_thread = Thread.new { Thread.main['response'] = web_server.serve_one }
|
140
|
+
Kontena::Cli::BrowserLauncher.open(uri.to_s)
|
141
|
+
|
142
|
+
spinner "Waiting for browser authorization response" do
|
143
|
+
server_thread.join
|
144
|
+
end
|
145
|
+
|
146
|
+
update_token(Thread.main['response'])
|
147
|
+
end
|
148
|
+
|
149
|
+
def update_userinfo
|
150
|
+
uri = URI.parse(kontena_account.userinfo_endpoint)
|
151
|
+
path = uri.path
|
152
|
+
uri.path = '/'
|
153
|
+
|
154
|
+
response = Kontena::Client.new(uri.to_s, kontena_account.token).get(path)
|
155
|
+
if response.kind_of?(Hash) && response['data'] && response['data']['attributes']
|
156
|
+
kontena_account.username = response['data']['attributes']['username']
|
157
|
+
elsif response && response['error']
|
158
|
+
exit_with_error response['error']
|
159
|
+
else
|
160
|
+
exit_with_error "Userinfo request failed"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def use_authorization_code(code)
|
165
|
+
response = vspinner "Exchanging authorization code to access token" do
|
166
|
+
Kontena::Client.new(kontena_account.token_endpoint, kontena_account.token).exchange_code(code)
|
167
|
+
end
|
168
|
+
update_token(response)
|
169
|
+
end
|
170
|
+
|
171
|
+
def update_token(response)
|
172
|
+
if !response.kind_of?(Hash)
|
173
|
+
raise TypeError, "Invalid authentication response, expected Hash, got #{response.class}"
|
174
|
+
elsif response['error']
|
175
|
+
exit_with_error "Authentication failed: #{response['error']}"
|
176
|
+
elsif response['code']
|
177
|
+
use_authorization_code(response['code'])
|
178
|
+
else
|
179
|
+
kontena_account.token.access_token = response['access_token']
|
180
|
+
kontena_account.token.refresh_token = response['refresh_token']
|
181
|
+
kontena_account.token.expires_at = response['expires_at']
|
182
|
+
true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Kontena::Cli::Cloud
|
2
|
+
class LogoutCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
def execute
|
6
|
+
config.accounts.each do |account|
|
7
|
+
use_refresh_token(account)
|
8
|
+
account.token = nil
|
9
|
+
end
|
10
|
+
config.write
|
11
|
+
puts pastel.green("You have been logged out of Kontena Cloud")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
module Kontena::Cli::Cloud::Master
|
2
|
+
class AddCommand < Kontena::Command
|
3
|
+
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
|
6
|
+
callback_matcher 'cloud-master', 'create'
|
7
|
+
|
8
|
+
requires_current_account_token
|
9
|
+
|
10
|
+
parameter "[NAME]", "Master name"
|
11
|
+
|
12
|
+
option ['--redirect-uri'], '[URL]', 'Set master redirect URL'
|
13
|
+
option ['--url'], '[URL]', 'Set master URL'
|
14
|
+
option ['--provider'], '[NAME]', 'Set master provider'
|
15
|
+
option ['--name'], '[NAME]', 'Set master name', hidden: true
|
16
|
+
option ['--version'], '[VERSION]', 'Set master version', hidden: true
|
17
|
+
option ['--owner'], '[NAME]', 'Set master owner', hidden: true
|
18
|
+
|
19
|
+
option ['--id'], :flag, 'Just output the ID'
|
20
|
+
option ['--return'], :flag, 'Return the ID', hidden: true
|
21
|
+
option ['--force'], :flag, "Don't ask questions"
|
22
|
+
|
23
|
+
option ['--cloud-master-id'], '[ID]', "Use existing cloud master ID", hidden: true
|
24
|
+
option ['--current'], :flag, 'Register and configure current master', hidden: true
|
25
|
+
|
26
|
+
def register(name, url = nil, provider = nil, redirect_uri = nil, version = nil, owner = nil)
|
27
|
+
attributes = {}
|
28
|
+
attributes['name'] = name
|
29
|
+
attributes['url'] = url if url
|
30
|
+
attributes['provider'] = provider if provider
|
31
|
+
attributes['redirect-uri'] = redirect_uri if redirect_uri
|
32
|
+
attributes['version'] = version if version
|
33
|
+
attributes['owner'] = owner if owner
|
34
|
+
|
35
|
+
response = cloud_client.post('user/masters', { data: { attributes: attributes } })
|
36
|
+
exit_with_error "Failed (invalid response)" unless response.kind_of?(Hash)
|
37
|
+
exit_with_error "Failed: #{response['error']}" if response['error']
|
38
|
+
exit_with_error "Failed (no data)" unless response['data']
|
39
|
+
response
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_existing(id)
|
43
|
+
cloud_client.get("user/masters/#{id}")
|
44
|
+
end
|
45
|
+
|
46
|
+
def cloud_masters
|
47
|
+
masters = []
|
48
|
+
spinner "Retrieving a list of your registered Kontena Masters in Kontena Cloud" do |spin|
|
49
|
+
begin
|
50
|
+
masters = Kontena.run!(%w(cloud master list --return --quiet))
|
51
|
+
rescue SystemExit
|
52
|
+
spin.fail
|
53
|
+
end
|
54
|
+
end
|
55
|
+
masters
|
56
|
+
end
|
57
|
+
|
58
|
+
def new_cloud_master_name(master_name)
|
59
|
+
masters = cloud_masters
|
60
|
+
return master_name if masters.empty?
|
61
|
+
|
62
|
+
existing_master = masters.find { |m| m['attributes']['name'] == master_name }
|
63
|
+
return master_name unless existing_master
|
64
|
+
|
65
|
+
new_name = "#{master_name}-2"
|
66
|
+
new_name.succ! until masters.find { |m| m['attributes']['name'] == new_name }.nil?
|
67
|
+
new_name
|
68
|
+
end
|
69
|
+
|
70
|
+
def register_current
|
71
|
+
require_api_url
|
72
|
+
require_token
|
73
|
+
|
74
|
+
unless self.force?
|
75
|
+
puts "Proceeding will:"
|
76
|
+
puts " * Register the Kontena Master #{current_master.name} to Kontena Cloud"
|
77
|
+
puts " * Configure the Kontena Master to use Kontena Cloud as the"
|
78
|
+
puts " authentication provider"
|
79
|
+
puts
|
80
|
+
puts "After this:"
|
81
|
+
puts " * Users will not be able to reauthenticate without authorizing the"
|
82
|
+
puts " Master to access their Kontena Cloud user information"
|
83
|
+
puts " * Users that have registered a different email address to Kontena"
|
84
|
+
puts " Cloud than the one they currently have as their username in the"
|
85
|
+
puts " master will not be able to authenticate before an administrator"
|
86
|
+
puts " of the Kontena Master creates an invitation code for them"
|
87
|
+
puts " (kontena master user invite old@email.example.com)"
|
88
|
+
exit_with_error "Aborted" unless prompt.yes?("Proceed?")
|
89
|
+
end
|
90
|
+
|
91
|
+
new_name = new_cloud_master_name(current_master.name)
|
92
|
+
|
93
|
+
if self.cloud_master_id
|
94
|
+
response = spinner "Retrieving Master information from Kontena Cloud using id" do
|
95
|
+
get_existing(self.cloud_master_id)
|
96
|
+
end
|
97
|
+
if response && response.kind_of?(Hash) && response.has_key?('data') && response['data']['attributes']
|
98
|
+
if (self.provider && response['data']['attributes']['provider'] != self.provider) || (self.version && response['data']['attributes']['version'] != self.version)
|
99
|
+
spinner "Updating provider and version attributes to Kontena Cloud master" do |spin|
|
100
|
+
args = []
|
101
|
+
args += ['--provider', self.provider] if self.provider
|
102
|
+
args += ['--version', self.version] if self.version
|
103
|
+
args << self.cloud_master_id
|
104
|
+
spin.fail! unless Kontena.run(['cloud', 'master', 'update'] + args)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
else
|
109
|
+
response = spinner "Registering current Kontena Master '#{current_master.name}' #{" as '#{new_name}' " unless new_name == current_master.name}to Kontena Cloud" do
|
110
|
+
register(new_name, current_master.url, self.provider, current_master.url.gsub(/\/$/, '') + "/cb", self.version)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
spinner "Loading Kontena Cloud auth provider base configuration to Kontena Master" do |spin|
|
115
|
+
spin.fail! unless Kontena.run(%w(master config import --force --preset kontena_auth_provider))
|
116
|
+
end
|
117
|
+
|
118
|
+
spinner "Updating OAuth2 client-id and client-secret to Kontena Master" do |spin|
|
119
|
+
spin.fail! unless Kontena.run(
|
120
|
+
[
|
121
|
+
'master', 'config', 'set',
|
122
|
+
"oauth2.client_id=#{response['data']['attributes']['client-id'].shellescape}",
|
123
|
+
"oauth2.client_secret=#{response['data']['attributes']['client-secret'].shellescape}",
|
124
|
+
"server.root_url=#{current_master.url.shellescape}",
|
125
|
+
"server.name=#{current_master.name.shellescape}",
|
126
|
+
"cloud.provider_is_kontena=true"
|
127
|
+
]
|
128
|
+
)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def execute
|
133
|
+
unless cloud_client.authentication_ok?(kontena_account.userinfo_endpoint)
|
134
|
+
Kontena.run!(%w(cloud login))
|
135
|
+
config.reset_instance
|
136
|
+
reset_cloud_client
|
137
|
+
end
|
138
|
+
|
139
|
+
return register_current if self.current?
|
140
|
+
|
141
|
+
exit_with_error 'Master name is required' unless self.name
|
142
|
+
|
143
|
+
response = register(self.name, self.url, self.provider, self.redirect_uri, self.version, self.owner)
|
144
|
+
if self.return?
|
145
|
+
return response['data']['id']
|
146
|
+
elsif self.id?
|
147
|
+
puts response['data']['id']
|
148
|
+
else
|
149
|
+
puts pastel.green("Registered master.")
|
150
|
+
puts "ID: #{response['data']['id']}"
|
151
|
+
puts "Client ID: #{response['data']['attributes']['client-id']}"
|
152
|
+
puts "Client Secret: #{response['data']['attributes']['client-secret']}"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Kontena::Cli::Cloud::Master
|
2
|
+
class ListCommand < Kontena::Command
|
3
|
+
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
include Kontena::Cli::TableGenerator::Helper
|
6
|
+
|
7
|
+
callback_matcher 'cloud-master', 'list'
|
8
|
+
|
9
|
+
option '--return', :flag, 'Return the list', hidden: true
|
10
|
+
|
11
|
+
requires_current_account_token
|
12
|
+
|
13
|
+
def fields
|
14
|
+
quiet? ? ['id'] : %w(id name owner url connected)
|
15
|
+
end
|
16
|
+
|
17
|
+
def execute
|
18
|
+
response = spin_if(!quiet?, "Retrieving Master list from Kontena Cloud") do
|
19
|
+
cloud_client.get('user/masters')
|
20
|
+
end
|
21
|
+
|
22
|
+
unless response && response.kind_of?(Hash) && response['data'].kind_of?(Array)
|
23
|
+
abort pastel.red("Listing masters failed")
|
24
|
+
end
|
25
|
+
|
26
|
+
return Array(response['data']) if self.return?
|
27
|
+
|
28
|
+
print_table(response['data']) do |row|
|
29
|
+
row.merge!(row['attributes'])
|
30
|
+
row['connected'] = !!row['connected'] ? pastel.green('yes') : pastel.red('no')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Kontena::Cli::Cloud::Master
|
2
|
+
class RemoveCommand < Kontena::Command
|
3
|
+
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
|
6
|
+
callback_matcher 'cloud-master', 'delete'
|
7
|
+
|
8
|
+
requires_current_account_token
|
9
|
+
|
10
|
+
parameter "[MASTER_ID]", "Master ID"
|
11
|
+
|
12
|
+
option ['-f', '--force'], :flag, "Don't ask for confirmation"
|
13
|
+
|
14
|
+
def delete_server(id)
|
15
|
+
spinner "Deleting server #{id} from Kontena Cloud" do |spin|
|
16
|
+
begin
|
17
|
+
cloud_client.delete("user/masters/#{id}")
|
18
|
+
rescue
|
19
|
+
spin.fail
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_interactive
|
25
|
+
response = nil
|
26
|
+
spinner "Retrieving a list of registered masters on Kontena Cloud" do
|
27
|
+
response = cloud_client.get('user/masters')
|
28
|
+
unless response && response.kind_of?(Hash) && response['data'].kind_of?(Array)
|
29
|
+
abort pastel.red('Listing masters failed')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if response['data'].empty?
|
34
|
+
puts "No registered masters"
|
35
|
+
return
|
36
|
+
end
|
37
|
+
|
38
|
+
servers_to_delete = prompt.multi_select("Select registered master(s) to delete:") do |menu|
|
39
|
+
response['data'].each do |server|
|
40
|
+
menu.choice "#{server['attributes']['name']} (#{server['attributes']['url'] || "?"})", server['id']
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if servers_to_delete.empty?
|
45
|
+
puts "No masters selected"
|
46
|
+
else
|
47
|
+
puts "About to delete servers from Kontena Cloud:"
|
48
|
+
servers_to_delete.each do |id|
|
49
|
+
puts " * #{id}"
|
50
|
+
end
|
51
|
+
confirm unless self.force?
|
52
|
+
servers_to_delete.each do |id|
|
53
|
+
delete_server(id)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def execute
|
59
|
+
if self.master_id.nil?
|
60
|
+
run_interactive
|
61
|
+
else
|
62
|
+
confirm unless self.force?
|
63
|
+
delete_server(self.master_id)
|
64
|
+
end
|
65
|
+
exit 0
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Kontena::Cli::Cloud::Master
|
2
|
+
class ShowCommand < Kontena::Command
|
3
|
+
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
|
6
|
+
callback_matcher 'cloud-master', 'show'
|
7
|
+
|
8
|
+
requires_current_account_token
|
9
|
+
|
10
|
+
parameter "MASTER_ID", "Master ID"
|
11
|
+
|
12
|
+
def execute
|
13
|
+
response = cloud_client.get("user/masters/#{master_id}")
|
14
|
+
response['data']['attributes']['id'] = response['data']['id']
|
15
|
+
response['data']['attributes'].each do |key, value|
|
16
|
+
puts "%20.20s : %s" % [key, value]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Kontena::Cli::Cloud::Master
|
2
|
+
class UpdateCommand < Kontena::Command
|
3
|
+
|
4
|
+
include Kontena::Cli::Common
|
5
|
+
|
6
|
+
callback_matcher 'cloud-master', 'update'
|
7
|
+
|
8
|
+
requires_current_account_token
|
9
|
+
|
10
|
+
parameter "MASTER_ID", "Master ID"
|
11
|
+
|
12
|
+
option ['--redirect-uri'], '[URL]', 'Set master redirect URL'
|
13
|
+
option ['--url'], '[URL]', 'Set master URL'
|
14
|
+
option ['--provider'], '[NAME]', 'Set master provider'
|
15
|
+
option ['--name'], '[NAME]', 'Set master name', hidden: true
|
16
|
+
option ['--version'], '[VERSION]', 'Set master version', hidden: true
|
17
|
+
option ['--owner'], '[NAME]', 'Set master owner', hidden: true
|
18
|
+
|
19
|
+
def get_attributes
|
20
|
+
cloud_client.get("user/masters/#{self.master_id}")["data"]["attributes"]
|
21
|
+
rescue
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def execute
|
26
|
+
attrs = get_attributes
|
27
|
+
unless attrs
|
28
|
+
puts pastel.red("Failed to obtain master credentials")
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
attrs["name"] = self.name if self.name
|
33
|
+
attrs["redirect-uri"] = self.redirect_uri if self.redirect_uri
|
34
|
+
attrs["url"] = self.url if self.url
|
35
|
+
attrs["provider"] = self.provider if self.provider
|
36
|
+
attrs["version"] = self.version if self.version
|
37
|
+
attrs["owner"] = self.owner if self.owner
|
38
|
+
|
39
|
+
response = cloud_client.put(
|
40
|
+
"user/masters/#{master_id}",
|
41
|
+
{ data: { attributes: attrs.reject{ |k, _| ['client-id', 'client-secret'].include?(k) } } }
|
42
|
+
)
|
43
|
+
|
44
|
+
if response
|
45
|
+
puts "Master settings updated"
|
46
|
+
else
|
47
|
+
puts "Request failed"
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Kontena::Cli::Cloud
|
2
|
+
class MasterCommand < Kontena::Command
|
3
|
+
include Kontena::Cli::Common
|
4
|
+
|
5
|
+
subcommand ['list', 'ls'], "List masters in Kontena Cloud", load_subcommand('cloud/master/list_command')
|
6
|
+
subcommand "add", "Register a master in Kontena Cloud", load_subcommand('cloud/master/add_command')
|
7
|
+
subcommand ['remove', 'rm'], "Remove a master registration from Kontena Cloud", load_subcommand('cloud/master/remove_command')
|
8
|
+
subcommand "show", "Show master settings in Kontena Cloud", load_subcommand('cloud/master/show_command')
|
9
|
+
subcommand "update", "Update master settings in Kontena Cloud", load_subcommand('cloud/master/update_command')
|
10
|
+
|
11
|
+
def execute
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|