central-cli 0.6.3
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/.dockerignore +3 -0
- data/.gitignore +15 -0
- data/.rspec +6 -0
- data/.rubocop.yml +5 -0
- data/Dockerfile +15 -0
- data/Gemfile +10 -0
- data/LICENSE +191 -0
- data/README.md +39 -0
- data/Rakefile +9 -0
- data/VERSION +1 -0
- data/bin/cm +85 -0
- data/central-cli.gemspec +35 -0
- data/central-docker.sh +6 -0
- data/lib/central/cli/app_command.rb +29 -0
- data/lib/central/cli/apps/build_command.rb +24 -0
- data/lib/central/cli/apps/central_yml_generator.rb +88 -0
- data/lib/central/cli/apps/common.rb +166 -0
- data/lib/central/cli/apps/deploy_command.rb +191 -0
- data/lib/central/cli/apps/docker_compose_generator.rb +48 -0
- data/lib/central/cli/apps/docker_helper.rb +85 -0
- data/lib/central/cli/apps/dockerfile_generator.rb +15 -0
- data/lib/central/cli/apps/init_command.rb +91 -0
- data/lib/central/cli/apps/list_command.rb +68 -0
- data/lib/central/cli/apps/logs_command.rb +76 -0
- data/lib/central/cli/apps/monitor_command.rb +93 -0
- data/lib/central/cli/apps/remove_command.rb +80 -0
- data/lib/central/cli/apps/restart_command.rb +38 -0
- data/lib/central/cli/apps/scale_command.rb +31 -0
- data/lib/central/cli/apps/show_command.rb +23 -0
- data/lib/central/cli/apps/start_command.rb +39 -0
- data/lib/central/cli/apps/stop_command.rb +39 -0
- data/lib/central/cli/auth/aws/create_command.rb +34 -0
- data/lib/central/cli/auth/aws_command.rb +7 -0
- data/lib/central/cli/auth/list_command.rb +28 -0
- data/lib/central/cli/auth_command.rb +9 -0
- data/lib/central/cli/bytes_helper.rb +38 -0
- data/lib/central/cli/common.rb +148 -0
- data/lib/central/cli/container_command.rb +10 -0
- data/lib/central/cli/containers/exec_command.rb +21 -0
- data/lib/central/cli/containers/inspect_command.rb +22 -0
- data/lib/central/cli/etcd/common.rb +7 -0
- data/lib/central/cli/etcd/get_command.rb +26 -0
- data/lib/central/cli/etcd/list_command.rb +31 -0
- data/lib/central/cli/etcd/mkdir_command.rb +21 -0
- data/lib/central/cli/etcd/remove_command.rb +25 -0
- data/lib/central/cli/etcd/set_command.rb +22 -0
- data/lib/central/cli/etcd_command.rb +16 -0
- data/lib/central/cli/external_registries/add_command.rb +21 -0
- data/lib/central/cli/external_registries/delete_command.rb +15 -0
- data/lib/central/cli/external_registries/list_command.rb +27 -0
- data/lib/central/cli/external_registries/remove_command.rb +13 -0
- data/lib/central/cli/external_registry_command.rb +14 -0
- data/lib/central/cli/login_command.rb +121 -0
- data/lib/central/cli/logout_command.rb +7 -0
- data/lib/central/cli/master/aws/create_command.rb +41 -0
- data/lib/central/cli/master/aws_command.rb +7 -0
- data/lib/central/cli/master/azure/create_command.rb +39 -0
- data/lib/central/cli/master/azure_command.rb +11 -0
- data/lib/central/cli/master/digital_ocean/create_command.rb +35 -0
- data/lib/central/cli/master/digital_ocean_command.rb +11 -0
- data/lib/central/cli/master/list_command.rb +28 -0
- data/lib/central/cli/master/use_command.rb +34 -0
- data/lib/central/cli/master/users/add_role_command.rb +26 -0
- data/lib/central/cli/master/users/invite_command.rb +24 -0
- data/lib/central/cli/master/users/list_command.rb +18 -0
- data/lib/central/cli/master/users/remove_command.rb +22 -0
- data/lib/central/cli/master/users/remove_role_command.rb +25 -0
- data/lib/central/cli/master/users_command.rb +15 -0
- data/lib/central/cli/master/vagrant/create_command.rb +25 -0
- data/lib/central/cli/master/vagrant/restart_command.rb +20 -0
- data/lib/central/cli/master/vagrant/ssh_command.rb +15 -0
- data/lib/central/cli/master/vagrant/start_command.rb +20 -0
- data/lib/central/cli/master/vagrant/stop_command.rb +20 -0
- data/lib/central/cli/master/vagrant/terminate_command.rb +13 -0
- data/lib/central/cli/master/vagrant_command.rb +21 -0
- data/lib/central/cli/master_command.rb +19 -0
- data/lib/central/cli/node_command.rb +30 -0
- data/lib/central/cli/nodes/add_label_command.rb +19 -0
- data/lib/central/cli/nodes/aws/create_command.rb +40 -0
- data/lib/central/cli/nodes/aws/restart_command.rb +29 -0
- data/lib/central/cli/nodes/aws/terminate_command.rb +21 -0
- data/lib/central/cli/nodes/aws_command.rb +14 -0
- data/lib/central/cli/nodes/azure/create_command.rb +40 -0
- data/lib/central/cli/nodes/azure/restart_command.rb +31 -0
- data/lib/central/cli/nodes/azure/terminate_command.rb +21 -0
- data/lib/central/cli/nodes/azure_command.rb +14 -0
- data/lib/central/cli/nodes/digital_ocean/create_command.rb +32 -0
- data/lib/central/cli/nodes/digital_ocean/restart_command.rb +27 -0
- data/lib/central/cli/nodes/digital_ocean/terminate_command.rb +19 -0
- data/lib/central/cli/nodes/digital_ocean_command.rb +14 -0
- data/lib/central/cli/nodes/label_command.rb +12 -0
- data/lib/central/cli/nodes/labels/add_command.rb +19 -0
- data/lib/central/cli/nodes/labels/remove_command.rb +23 -0
- data/lib/central/cli/nodes/list_command.rb +62 -0
- data/lib/central/cli/nodes/remove_command.rb +16 -0
- data/lib/central/cli/nodes/remove_label_command.rb +23 -0
- data/lib/central/cli/nodes/show_command.rb +49 -0
- data/lib/central/cli/nodes/ssh_command.rb +31 -0
- data/lib/central/cli/nodes/update_command.rb +20 -0
- data/lib/central/cli/nodes/vagrant/create_command.rb +27 -0
- data/lib/central/cli/nodes/vagrant/restart_command.rb +26 -0
- data/lib/central/cli/nodes/vagrant/ssh_command.rb +21 -0
- data/lib/central/cli/nodes/vagrant/start_command.rb +26 -0
- data/lib/central/cli/nodes/vagrant/stop_command.rb +26 -0
- data/lib/central/cli/nodes/vagrant/terminate_command.rb +17 -0
- data/lib/central/cli/nodes/vagrant_command.rb +20 -0
- data/lib/central/cli/register_command.rb +21 -0
- data/lib/central/cli/registry/create_command.rb +144 -0
- data/lib/central/cli/registry/delete_command.rb +22 -0
- data/lib/central/cli/registry/remove_command.rb +19 -0
- data/lib/central/cli/registry_command.rb +11 -0
- data/lib/central/cli/service_command.rb +49 -0
- data/lib/central/cli/services/add_env_command.rb +19 -0
- data/lib/central/cli/services/add_secret_command.rb +24 -0
- data/lib/central/cli/services/container_command.rb +8 -0
- data/lib/central/cli/services/containers_command.rb +32 -0
- data/lib/central/cli/services/create_command.rb +90 -0
- data/lib/central/cli/services/delete_command.rb +19 -0
- data/lib/central/cli/services/deploy_command.rb +21 -0
- data/lib/central/cli/services/env_command.rb +11 -0
- data/lib/central/cli/services/envs/add_command.rb +19 -0
- data/lib/central/cli/services/envs/list_command.rb +20 -0
- data/lib/central/cli/services/envs/remove_command.rb +18 -0
- data/lib/central/cli/services/envs_command.rb +20 -0
- data/lib/central/cli/services/link_command.rb +26 -0
- data/lib/central/cli/services/list_command.rb +42 -0
- data/lib/central/cli/services/logs_command.rb +57 -0
- data/lib/central/cli/services/monitor_command.rb +58 -0
- data/lib/central/cli/services/remove_command.rb +17 -0
- data/lib/central/cli/services/remove_env_command.rb +18 -0
- data/lib/central/cli/services/remove_secret_command.rb +28 -0
- data/lib/central/cli/services/restart_command.rb +17 -0
- data/lib/central/cli/services/scale_command.rb +17 -0
- data/lib/central/cli/services/secret_command.rb +9 -0
- data/lib/central/cli/services/secrets/link_command.rb +24 -0
- data/lib/central/cli/services/secrets/unlink_command.rb +28 -0
- data/lib/central/cli/services/services_helper.rb +360 -0
- data/lib/central/cli/services/show_command.rb +18 -0
- data/lib/central/cli/services/start_command.rb +17 -0
- data/lib/central/cli/services/stats_command.rb +74 -0
- data/lib/central/cli/services/stop_command.rb +17 -0
- data/lib/central/cli/services/unlink_command.rb +25 -0
- data/lib/central/cli/services/update_command.rb +78 -0
- data/lib/central/cli/stack_command.rb +32 -0
- data/lib/central/cli/stack_options.rb +11 -0
- data/lib/central/cli/stacks/add_user_command.rb +18 -0
- data/lib/central/cli/stacks/audit_log_command.rb +21 -0
- data/lib/central/cli/stacks/cloud_config_command.rb +41 -0
- data/lib/central/cli/stacks/common.rb +95 -0
- data/lib/central/cli/stacks/create_command.rb +26 -0
- data/lib/central/cli/stacks/current_command.rb +25 -0
- data/lib/central/cli/stacks/env_command.rb +32 -0
- data/lib/central/cli/stacks/list_command.rb +35 -0
- data/lib/central/cli/stacks/list_users_command.rb +26 -0
- data/lib/central/cli/stacks/logs_command.rb +81 -0
- data/lib/central/cli/stacks/remove_command.rb +26 -0
- data/lib/central/cli/stacks/remove_user_command.rb +17 -0
- data/lib/central/cli/stacks/show_command.rb +19 -0
- data/lib/central/cli/stacks/trusted_subnets/add_command.rb +16 -0
- data/lib/central/cli/stacks/trusted_subnets/list_command.rb +17 -0
- data/lib/central/cli/stacks/trusted_subnets/remove_command.rb +20 -0
- data/lib/central/cli/stacks/update_command.rb +27 -0
- data/lib/central/cli/stacks/use_command.rb +21 -0
- data/lib/central/cli/stacks/user_command.rb +11 -0
- data/lib/central/cli/stacks/users/add_command.rb +18 -0
- data/lib/central/cli/stacks/users/list_command.rb +18 -0
- data/lib/central/cli/stacks/users/remove_command.rb +17 -0
- data/lib/central/cli/user/forgot_password_command.rb +16 -0
- data/lib/central/cli/user/reset_password_command.rb +21 -0
- data/lib/central/cli/user/verify_command.rb +22 -0
- data/lib/central/cli/user_command.rb +12 -0
- data/lib/central/cli/vault/list_command.rb +25 -0
- data/lib/central/cli/vault/read_command.rb +17 -0
- data/lib/central/cli/vault/remove_command.rb +14 -0
- data/lib/central/cli/vault/update_command.rb +18 -0
- data/lib/central/cli/vault/write_command.rb +22 -0
- data/lib/central/cli/vault_command.rb +16 -0
- data/lib/central/cli/version.rb +5 -0
- data/lib/central/cli/version_command.rb +22 -0
- data/lib/central/cli/vpn/config_command.rb +25 -0
- data/lib/central/cli/vpn/create_command.rb +71 -0
- data/lib/central/cli/vpn/delete_command.rb +21 -0
- data/lib/central/cli/vpn/remove_command.rb +19 -0
- data/lib/central/cli/vpn_command.rb +13 -0
- data/lib/central/cli/whoami_command.rb +20 -0
- data/lib/central/client.rb +208 -0
- data/lib/central/errors.rb +10 -0
- data/lib/central/machine/aws.rb +14 -0
- data/lib/central/machine/aws/auth_provisioner.rb +161 -0
- data/lib/central/machine/aws/cloudinit.yml +71 -0
- data/lib/central/machine/aws/cloudinit_master.yml +118 -0
- data/lib/central/machine/aws/cloudinit_oauth.yml +76 -0
- data/lib/central/machine/aws/common.rb +31 -0
- data/lib/central/machine/aws/master_provisioner.rb +171 -0
- data/lib/central/machine/aws/node_destroyer.rb +46 -0
- data/lib/central/machine/aws/node_provisioner.rb +214 -0
- data/lib/central/machine/azure.rb +13 -0
- data/lib/central/machine/azure/cloudinit.yml +64 -0
- data/lib/central/machine/azure/cloudinit_master.yml +106 -0
- data/lib/central/machine/azure/logger.rb +26 -0
- data/lib/central/machine/azure/master_provisioner.rb +125 -0
- data/lib/central/machine/azure/node_destroyer.rb +52 -0
- data/lib/central/machine/azure/node_provisioner.rb +126 -0
- data/lib/central/machine/cert_helper.rb +39 -0
- data/lib/central/machine/cloud_config/cloudinit.yml +70 -0
- data/lib/central/machine/cloud_config/node_generator.rb +27 -0
- data/lib/central/machine/common.rb +16 -0
- data/lib/central/machine/digital_ocean.rb +13 -0
- data/lib/central/machine/digital_ocean/cloudinit.yml +64 -0
- data/lib/central/machine/digital_ocean/cloudinit_master.yml +118 -0
- data/lib/central/machine/digital_ocean/master_provisioner.rb +99 -0
- data/lib/central/machine/digital_ocean/node_destroyer.rb +40 -0
- data/lib/central/machine/digital_ocean/node_provisioner.rb +81 -0
- data/lib/central/machine/random_name.rb +39 -0
- data/lib/central/machine/vagrant.rb +12 -0
- data/lib/central/machine/vagrant/Vagrantfile.master.rb.erb +116 -0
- data/lib/central/machine/vagrant/Vagrantfile.node.rb.erb +32 -0
- data/lib/central/machine/vagrant/cloudinit.yml +73 -0
- data/lib/central/machine/vagrant/master_destroyer.rb +34 -0
- data/lib/central/machine/vagrant/master_provisioner.rb +79 -0
- data/lib/central/machine/vagrant/node_destroyer.rb +38 -0
- data/lib/central/machine/vagrant/node_provisioner.rb +68 -0
- data/lib/central/scripts/completer +157 -0
- data/lib/central/scripts/init +11 -0
- data/spec/central/cli/app/common_spec.rb +150 -0
- data/spec/central/cli/app/deploy_command_spec.rb +598 -0
- data/spec/central/cli/app/docker_helper_spec.rb +102 -0
- data/spec/central/cli/app/scale_spec.rb +49 -0
- data/spec/central/cli/common_spec.rb +117 -0
- data/spec/central/cli/login_command_spec.rb +31 -0
- data/spec/central/cli/master/current_command_spec.rb +55 -0
- data/spec/central/cli/master/use_command_spec.rb +37 -0
- data/spec/central/cli/master/users/invite_command_spec.rb +34 -0
- data/spec/central/cli/master/users/remove_command_spec.rb +26 -0
- data/spec/central/cli/master/users/roles/add_command_spec.rb +34 -0
- data/spec/central/cli/master/users/roles/remove_command_spec.rb +34 -0
- data/spec/central/cli/register_command_spec.rb +56 -0
- data/spec/central/cli/services/containers_command_spec.rb +40 -0
- data/spec/central/cli/services/link_command_spec.rb +38 -0
- data/spec/central/cli/services/restart_command_spec.rb +27 -0
- data/spec/central/cli/services/secrets/link_command_spec.rb +59 -0
- data/spec/central/cli/services/secrets/unlink_command_spec.rb +48 -0
- data/spec/central/cli/services/services_helper_spec.rb +170 -0
- data/spec/central/cli/services/unlink_command_spec.rb +38 -0
- data/spec/central/cli/stacks/trusted_subnets/add_command_spec.rb +37 -0
- data/spec/central/cli/stacks/trusted_subnets/list_command_spec.rb +30 -0
- data/spec/central/cli/stacks/trusted_subnets/remove_command_spec.rb +37 -0
- data/spec/central/cli/version_command_spec.rb +16 -0
- data/spec/fixtures/central.yml +17 -0
- data/spec/fixtures/docker-compose.yml +8 -0
- data/spec/fixtures/mysql.yml +3 -0
- data/spec/fixtures/wordpress-scaled.yml +3 -0
- data/spec/fixtures/wordpress.yml +2 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/client_helpers.rb +30 -0
- data/spec/support/fixtures_helpers.rb +7 -0
- data/tasks/rspec.rake +5 -0
- metadata +463 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require_relative 'containers/exec_command'
|
|
2
|
+
require_relative 'containers/inspect_command'
|
|
3
|
+
|
|
4
|
+
class Central::Cli::ContainerCommand < Clamp::Command
|
|
5
|
+
subcommand 'exec', 'Execute command inside a container', Central::Cli::Containers::ExecCommand
|
|
6
|
+
subcommand 'inspect', 'Inspect the container', Central::Cli::Containers::InspectCommand
|
|
7
|
+
|
|
8
|
+
def execute
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Central::Cli::Containers
|
|
2
|
+
class ExecCommand < Clamp::Command
|
|
3
|
+
include Central::Cli::Common
|
|
4
|
+
include Central::Cli::StackOptions
|
|
5
|
+
|
|
6
|
+
parameter 'CONTAINER_ID', 'Container id'
|
|
7
|
+
parameter 'CMD ...', 'Command'
|
|
8
|
+
|
|
9
|
+
def execute
|
|
10
|
+
require_api_url
|
|
11
|
+
token = require_token
|
|
12
|
+
|
|
13
|
+
payload = { cmd: ['sh', '-c', cmd_list.join(' ')] }
|
|
14
|
+
service_name = container_id.match(/(.+)-(\d+)/)[1]
|
|
15
|
+
result = client(token).post("containers/#{current_stack}/#{service_name}/#{container_id}/exec", payload)
|
|
16
|
+
puts result[0].join(' ') unless result[0].size == 0
|
|
17
|
+
STDERR.puts result[1].join(' ') unless result[1].size == 0
|
|
18
|
+
exit result[2]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module Central::Cli::Containers
|
|
2
|
+
class InspectCommand < Clamp::Command
|
|
3
|
+
include Central::Cli::Common
|
|
4
|
+
include Central::Cli::StackOptions
|
|
5
|
+
|
|
6
|
+
parameter 'CONTAINER_ID', 'Container id'
|
|
7
|
+
|
|
8
|
+
def execute
|
|
9
|
+
require_api_url
|
|
10
|
+
token = require_token
|
|
11
|
+
|
|
12
|
+
match = container_id.match(/(.+)-(\d+)/)
|
|
13
|
+
if match
|
|
14
|
+
service_name = match[1]
|
|
15
|
+
result = client(token).get("containers/#{current_stack}/#{service_name}/#{container_id}/inspect")
|
|
16
|
+
puts JSON.pretty_generate(result)
|
|
17
|
+
else
|
|
18
|
+
abort('Cannot resolve container service')
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Etcd
|
|
4
|
+
class GetCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
parameter 'KEY', 'Etcd key'
|
|
10
|
+
|
|
11
|
+
def execute
|
|
12
|
+
require_api_url
|
|
13
|
+
token = require_token
|
|
14
|
+
validate_key
|
|
15
|
+
|
|
16
|
+
response = client(token).get("etcd/#{current_stack}/#{key}")
|
|
17
|
+
if response['value']
|
|
18
|
+
puts response['value']
|
|
19
|
+
elsif response['children']
|
|
20
|
+
abort 'Cannot get value from a directory'
|
|
21
|
+
elsif response['error']
|
|
22
|
+
abort response['error']
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Etcd
|
|
4
|
+
class ListCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
parameter 'KEY', 'Etcd key'
|
|
10
|
+
|
|
11
|
+
option '--recursive', :flag, 'List keys recursively', default: false
|
|
12
|
+
|
|
13
|
+
def execute
|
|
14
|
+
require_api_url
|
|
15
|
+
token = require_token
|
|
16
|
+
validate_key
|
|
17
|
+
|
|
18
|
+
opts = []
|
|
19
|
+
opts << 'recursive=true' if recursive?
|
|
20
|
+
response = client(token).get("etcd/#{current_stack}/#{key}?#{opts.join('&')}")
|
|
21
|
+
if response['children']
|
|
22
|
+
children = response['children'].map { |c| c['key'] }
|
|
23
|
+
puts children.join("\n")
|
|
24
|
+
elsif response['value']
|
|
25
|
+
abort 'Not a directory'
|
|
26
|
+
elsif response['error']
|
|
27
|
+
abort response['error']
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Etcd
|
|
4
|
+
class MkdirCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
parameter 'KEY', 'Etcd key'
|
|
10
|
+
|
|
11
|
+
def execute
|
|
12
|
+
require_api_url
|
|
13
|
+
token = require_token
|
|
14
|
+
validate_key
|
|
15
|
+
|
|
16
|
+
data = {}
|
|
17
|
+
response = client(token).post("etcd/#{current_stack}/#{key}", data)
|
|
18
|
+
abort response['error'] if response['error']
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Etcd
|
|
4
|
+
class RemoveCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
parameter 'KEY', 'Etcd key'
|
|
10
|
+
|
|
11
|
+
option '--recursive', :flag, 'Remove keys recursively'
|
|
12
|
+
|
|
13
|
+
def execute
|
|
14
|
+
require_api_url
|
|
15
|
+
token = require_token
|
|
16
|
+
validate_key
|
|
17
|
+
|
|
18
|
+
data = {}
|
|
19
|
+
data[:recursive] = true if recursive?
|
|
20
|
+
response = client(token).delete("etcd/#{current_stack}/#{key}", data)
|
|
21
|
+
|
|
22
|
+
abort response['error'] if response['error']
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Etcd
|
|
4
|
+
class SetCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
parameter 'KEY', 'Etcd key'
|
|
10
|
+
parameter 'VALUE', 'Etcd value'
|
|
11
|
+
|
|
12
|
+
def execute
|
|
13
|
+
require_api_url
|
|
14
|
+
token = require_token
|
|
15
|
+
validate_key
|
|
16
|
+
|
|
17
|
+
data = { value: value }
|
|
18
|
+
response = client(token).post("etcd/#{current_stack}/#{key}", data)
|
|
19
|
+
abort response['error'] if response['error']
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require_relative 'etcd/get_command'
|
|
2
|
+
require_relative 'etcd/set_command'
|
|
3
|
+
require_relative 'etcd/mkdir_command'
|
|
4
|
+
require_relative 'etcd/list_command'
|
|
5
|
+
require_relative 'etcd/remove_command'
|
|
6
|
+
|
|
7
|
+
class Central::Cli::EtcdCommand < Clamp::Command
|
|
8
|
+
subcommand 'get', 'Get the current value for a single key', Central::Cli::Etcd::GetCommand
|
|
9
|
+
subcommand 'set', 'Set a value on the specified key', Central::Cli::Etcd::SetCommand
|
|
10
|
+
subcommand %w(mkdir mk), 'Create a directory', Central::Cli::Etcd::MkdirCommand
|
|
11
|
+
subcommand %w(list ls), 'List a directory', Central::Cli::Etcd::ListCommand
|
|
12
|
+
subcommand 'rm', 'Remove a key or a directory', Central::Cli::Etcd::RemoveCommand
|
|
13
|
+
|
|
14
|
+
def execute
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Central::Cli::ExternalRegistries
|
|
2
|
+
class AddCommand < Clamp::Command
|
|
3
|
+
include Central::Cli::Common
|
|
4
|
+
include Central::Cli::StackOptions
|
|
5
|
+
|
|
6
|
+
parameter '[URL]', 'Docker Registry url', default: 'https://index.docker.io/v2/'
|
|
7
|
+
|
|
8
|
+
option ['-u', '--username'], 'USERNAME', 'Username', required: true
|
|
9
|
+
option ['-e', '--email'], 'EMAIL', 'Email', required: true
|
|
10
|
+
option ['-p', '--password'], 'PASSWORD', 'Password', required: true
|
|
11
|
+
|
|
12
|
+
def execute
|
|
13
|
+
require_api_url
|
|
14
|
+
require_current_stack
|
|
15
|
+
token = require_token
|
|
16
|
+
|
|
17
|
+
data = { username: username, password: password, email: email, url: url }
|
|
18
|
+
client(token).post("stacks/#{current_stack}/external_registries", data)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Central::Cli::ExternalRegistries
|
|
2
|
+
class DeleteCommand < Clamp::Command
|
|
3
|
+
include Central::Cli::Common
|
|
4
|
+
include Central::Cli::StackOptions
|
|
5
|
+
|
|
6
|
+
parameter 'NAME', 'External registry name to delete'
|
|
7
|
+
|
|
8
|
+
def execute
|
|
9
|
+
puts "DEPRECATION WARNING: Support for 'cm external-registry delete' will be dropped. Use 'cm external-registry remove' instead.".colorize(:red)
|
|
10
|
+
require_api_url
|
|
11
|
+
token = require_token
|
|
12
|
+
client(token).delete("external_registries/#{current_stack}/#{name}")
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
require 'tty'
|
|
3
|
+
|
|
4
|
+
module Central::Cli::ExternalRegistries
|
|
5
|
+
class ListCommand < Clamp::Command
|
|
6
|
+
include Central::Cli::Common
|
|
7
|
+
include Central::Cli::StackOptions
|
|
8
|
+
|
|
9
|
+
def execute
|
|
10
|
+
require_api_url
|
|
11
|
+
require_current_stack
|
|
12
|
+
token = require_token
|
|
13
|
+
result = client(token).get("stacks/#{current_stack}/external_registries")
|
|
14
|
+
header = %w(Name Username Email)
|
|
15
|
+
rows = []
|
|
16
|
+
result['external_registries'].each do |r|
|
|
17
|
+
rows << [r['name'], r['username'], r['email']]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
ttable = TTY::Table.new header: header, rows: Array.new(rows)
|
|
21
|
+
renderer = TTY::Table::Renderer::Unicode.new(ttable)
|
|
22
|
+
renderer.border.style = :cyan
|
|
23
|
+
renderer.padding = [0, 1, 0, 1]
|
|
24
|
+
puts renderer.render
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Central::Cli::ExternalRegistries
|
|
2
|
+
class RemoveCommand < Clamp::Command
|
|
3
|
+
include Central::Cli::Common
|
|
4
|
+
|
|
5
|
+
parameter 'NAME', 'External registry name to remove'
|
|
6
|
+
|
|
7
|
+
def execute
|
|
8
|
+
require_api_url
|
|
9
|
+
token = require_token
|
|
10
|
+
client(token).delete("external_registries/#{current_stack}/#{name}")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require_relative 'external_registries/add_command'
|
|
2
|
+
require_relative 'external_registries/list_command'
|
|
3
|
+
require_relative 'external_registries/delete_command'
|
|
4
|
+
require_relative 'external_registries/remove_command'
|
|
5
|
+
|
|
6
|
+
class Central::Cli::ExternalRegistryCommand < Clamp::Command
|
|
7
|
+
subcommand 'add', 'Add external Docker image registry', Central::Cli::ExternalRegistries::AddCommand
|
|
8
|
+
subcommand %w(list ls), 'List external Docker image registries', Central::Cli::ExternalRegistries::ListCommand
|
|
9
|
+
subcommand %w(remove rm), 'Remove external Docker image registry', Central::Cli::ExternalRegistries::RemoveCommand
|
|
10
|
+
subcommand 'delete', '[DEPRECATED] Delete external Docker image registry', Central::Cli::ExternalRegistries::DeleteCommand
|
|
11
|
+
|
|
12
|
+
def execute
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
class Central::Cli::LoginCommand < Clamp::Command
|
|
2
|
+
include Central::Cli::Common
|
|
3
|
+
|
|
4
|
+
parameter 'URL', 'Central Machine URI'
|
|
5
|
+
|
|
6
|
+
option ['-n', '--name'], 'NAME', 'Local alias name for the master. Default default'
|
|
7
|
+
|
|
8
|
+
def execute
|
|
9
|
+
require 'highline/import'
|
|
10
|
+
|
|
11
|
+
api_url = ask('Central Machine Node URL: ') until !url.nil? && !url.empty?
|
|
12
|
+
|
|
13
|
+
@api_url = url
|
|
14
|
+
|
|
15
|
+
unless request_server_info
|
|
16
|
+
puts 'Could not connect to server'.colorize(:red)
|
|
17
|
+
return false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
email = ask('Email: ')
|
|
21
|
+
password = ask('Password: ') { |q| q.echo = '*' }
|
|
22
|
+
response = do_login(email, password)
|
|
23
|
+
|
|
24
|
+
if response
|
|
25
|
+
update_master_info(name, url, response['access_token'])
|
|
26
|
+
display_logo
|
|
27
|
+
puts ''
|
|
28
|
+
puts "Logged in as #{response['user']['name'].green}"
|
|
29
|
+
reset_client
|
|
30
|
+
stacks = client(require_token).get('stacks')['stacks']
|
|
31
|
+
stack = stacks[0]
|
|
32
|
+
if stack
|
|
33
|
+
self.current_stack = stack
|
|
34
|
+
puts "Using stack #{stack['name'].cyan}"
|
|
35
|
+
puts ''
|
|
36
|
+
if stacks.size > 1
|
|
37
|
+
puts "You have access to following stacks and can switch between them using 'cm stack use <name>'"
|
|
38
|
+
puts ''
|
|
39
|
+
stacks.each do |stack|
|
|
40
|
+
puts " * #{stack['name']}"
|
|
41
|
+
end
|
|
42
|
+
puts ''
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
clear_current_stack
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
puts "Welcome! See 'cm --help' to get started."
|
|
49
|
+
true
|
|
50
|
+
else
|
|
51
|
+
puts 'Login Failed'.colorize(:red)
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def login_client
|
|
57
|
+
@login_client = Central::Client.new(@api_url) if @login_client.nil?
|
|
58
|
+
@login_client
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def do_login(email, password)
|
|
62
|
+
params = {
|
|
63
|
+
username: email,
|
|
64
|
+
password: password,
|
|
65
|
+
grant_type: 'password',
|
|
66
|
+
scope: 'user'
|
|
67
|
+
}
|
|
68
|
+
login_client.post('auth', params)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def request_server_info
|
|
72
|
+
valid = true
|
|
73
|
+
begin
|
|
74
|
+
login_client.get('ping') # test server connection
|
|
75
|
+
rescue Excon::Errors::SocketError => exec
|
|
76
|
+
if exec.message.include?('Unable to verify certificate')
|
|
77
|
+
puts 'The server uses a certificate signed by an unknown authority.'.colorize(:red)
|
|
78
|
+
puts "Protip: you can bypass the certificate check by setting #{'SSL_IGNORE_ERRORS=true'.colorize(:yellow)} env variable, but any data you send to the server could be intercepted by others."
|
|
79
|
+
exit(1)
|
|
80
|
+
else
|
|
81
|
+
valid = false
|
|
82
|
+
end
|
|
83
|
+
rescue => exec
|
|
84
|
+
valid = false
|
|
85
|
+
end
|
|
86
|
+
valid
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
#
|
|
91
|
+
# @param [String] name
|
|
92
|
+
# @param [String] url
|
|
93
|
+
# @param [String] token
|
|
94
|
+
#
|
|
95
|
+
def update_master_info(name, url, token)
|
|
96
|
+
name ||= 'default'
|
|
97
|
+
master = {
|
|
98
|
+
'name' => name,
|
|
99
|
+
'url' => url,
|
|
100
|
+
'token' => token
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
add_master(name, master)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def display_logo
|
|
107
|
+
logo = <<LOGO
|
|
108
|
+
|
|
109
|
+
8""""8
|
|
110
|
+
8 " eeee eeeee eeeee eeeee eeeee e
|
|
111
|
+
8e 8 8 8 8 8 8 8 8 8
|
|
112
|
+
88 8eee 8e 8 8e 8eee8e 8eee8 8e
|
|
113
|
+
88 e 88 88 8 88 88 8 88 8 88
|
|
114
|
+
88eee8 88ee 88 8 88 88 8 88 8 88eee
|
|
115
|
+
------------------------------------------
|
|
116
|
+
Copyright 2016 Stefano Harding
|
|
117
|
+
|
|
118
|
+
LOGO
|
|
119
|
+
puts logo
|
|
120
|
+
end
|
|
121
|
+
end
|