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,80 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class RemoveCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
10
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
11
|
+
|
|
12
|
+
parameter '[SERVICE] ...', 'Remove services'
|
|
13
|
+
|
|
14
|
+
attr_reader :services, :service_prefix
|
|
15
|
+
|
|
16
|
+
def execute
|
|
17
|
+
require_api_url
|
|
18
|
+
require_token
|
|
19
|
+
require_config_file(filename)
|
|
20
|
+
|
|
21
|
+
@service_prefix = project_name || current_dir
|
|
22
|
+
@services = load_services(filename, service_list, service_prefix)
|
|
23
|
+
if services.size > 0
|
|
24
|
+
remove_services(services)
|
|
25
|
+
elsif !service_list.empty?
|
|
26
|
+
puts "No such service: #{service_list.join(', ')}".colorize(:red)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def remove_services(services)
|
|
33
|
+
services.find_all do |_service_name, options|
|
|
34
|
+
options['links'] && options['links'].size > 0
|
|
35
|
+
end.each do |service_name, options|
|
|
36
|
+
delete(service_name, options, false)
|
|
37
|
+
services.delete(service_name)
|
|
38
|
+
end
|
|
39
|
+
services.each do |service_name, options|
|
|
40
|
+
delete(service_name, options)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def delete(name, _options, async = true)
|
|
45
|
+
unless deleted_services.include?(name)
|
|
46
|
+
print "deleting #{name.colorize(:cyan)}"
|
|
47
|
+
ShellSpinner ' ' do
|
|
48
|
+
service = begin
|
|
49
|
+
get_service(token, prefixed_name(name))
|
|
50
|
+
rescue
|
|
51
|
+
nil
|
|
52
|
+
end
|
|
53
|
+
if service
|
|
54
|
+
delete_service(token, prefixed_name(name))
|
|
55
|
+
wait_for_delete_to_finish(service) unless async
|
|
56
|
+
deleted_services << name
|
|
57
|
+
else
|
|
58
|
+
puts "No such service: #{name}".colorize(:red)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def wait_for_delete_to_finish(service)
|
|
65
|
+
until service.nil?
|
|
66
|
+
service = begin
|
|
67
|
+
get_service(token, service['name'])
|
|
68
|
+
rescue
|
|
69
|
+
nil
|
|
70
|
+
end
|
|
71
|
+
sleep 0.5
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @return [Array]
|
|
76
|
+
def deleted_services
|
|
77
|
+
@deleted_services ||= []
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class RestartCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Common
|
|
7
|
+
|
|
8
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
9
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
10
|
+
|
|
11
|
+
parameter '[SERVICE] ...', 'Services to start'
|
|
12
|
+
|
|
13
|
+
attr_reader :services, :service_prefix
|
|
14
|
+
|
|
15
|
+
def execute
|
|
16
|
+
require_config_file(filename)
|
|
17
|
+
|
|
18
|
+
@service_prefix = project_name || current_dir
|
|
19
|
+
@services = load_services(filename, service_list, service_prefix)
|
|
20
|
+
if services.size > 0
|
|
21
|
+
restart_services(services)
|
|
22
|
+
elsif !service_list.empty?
|
|
23
|
+
puts "No such service: #{service_list.join(', ')}".colorize(:red)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def restart_services(services)
|
|
28
|
+
services.each do |service_name, _opts|
|
|
29
|
+
if service_exists?(service_name)
|
|
30
|
+
puts "restarting #{prefixed_name(service_name)}"
|
|
31
|
+
restart_service(token, prefixed_name(service_name))
|
|
32
|
+
else
|
|
33
|
+
puts "No such service: #{service_name}".colorize(:red)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class ScaleCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
10
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
11
|
+
|
|
12
|
+
parameter 'SERVICE', 'Service to show'
|
|
13
|
+
parameter 'INSTANCES', 'Scales service to given number of instances'
|
|
14
|
+
|
|
15
|
+
attr_reader :services, :service_prefix
|
|
16
|
+
|
|
17
|
+
def execute
|
|
18
|
+
require_config_file(filename)
|
|
19
|
+
@service_prefix = project_name || current_dir
|
|
20
|
+
yml_service = load_services(filename, [service], service_prefix)
|
|
21
|
+
if yml_service[service]
|
|
22
|
+
options = yml_service[service]
|
|
23
|
+
abort("Service has already instances defined in #{filename}. Please update #{filename} and deploy service instead") if options['instances']
|
|
24
|
+
@service_prefix = project_name || current_dir
|
|
25
|
+
scale_service(require_token, prefixed_name(service), instances)
|
|
26
|
+
else
|
|
27
|
+
abort('Service not found')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class ShowCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
10
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
11
|
+
|
|
12
|
+
parameter 'SERVICE', 'Service to show'
|
|
13
|
+
|
|
14
|
+
attr_reader :services, :service_prefix
|
|
15
|
+
|
|
16
|
+
def execute
|
|
17
|
+
require_config_file(filename)
|
|
18
|
+
|
|
19
|
+
@service_prefix = project_name || current_dir
|
|
20
|
+
show_service(require_token, prefixed_name(service))
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class StartCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
10
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
11
|
+
|
|
12
|
+
parameter '[SERVICE] ...', 'Services to start'
|
|
13
|
+
|
|
14
|
+
attr_reader :services, :service_prefix
|
|
15
|
+
|
|
16
|
+
def execute
|
|
17
|
+
require_config_file(filename)
|
|
18
|
+
|
|
19
|
+
@service_prefix = project_name || current_dir
|
|
20
|
+
@services = load_services(filename, service_list, service_prefix)
|
|
21
|
+
if services.size > 0
|
|
22
|
+
start_services(services)
|
|
23
|
+
elsif !service_list.empty?
|
|
24
|
+
puts "No such service: #{service_list.join(', ')}".colorize(:red)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def start_services(services)
|
|
29
|
+
services.each do |service_name, _opts|
|
|
30
|
+
if service_exists?(service_name)
|
|
31
|
+
puts "starting #{prefixed_name(service_name)}"
|
|
32
|
+
start_service(token, prefixed_name(service_name))
|
|
33
|
+
else
|
|
34
|
+
puts "No such service: #{service_name}".colorize(:red)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative 'common'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Apps
|
|
4
|
+
class StopCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
include Central::Cli::StackOptions
|
|
7
|
+
include Common
|
|
8
|
+
|
|
9
|
+
option ['-f', '--file'], 'FILE', 'Specify an alternate Central compose file', attribute_name: :filename, default: 'central.yml'
|
|
10
|
+
option ['-p', '--project-name'], 'NAME', 'Specify an alternate project name (default: directory name)'
|
|
11
|
+
|
|
12
|
+
parameter '[SERVICE] ...', 'Services to stop'
|
|
13
|
+
|
|
14
|
+
attr_reader :services, :service_prefix
|
|
15
|
+
|
|
16
|
+
def execute
|
|
17
|
+
require_config_file(filename)
|
|
18
|
+
|
|
19
|
+
@service_prefix = project_name || current_dir
|
|
20
|
+
@services = load_services(filename, service_list, service_prefix)
|
|
21
|
+
if services.size > 0
|
|
22
|
+
stop_services(services)
|
|
23
|
+
elsif !service_list.empty?
|
|
24
|
+
puts "No such service: #{service_list.join(', ')}".colorize(:red)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def stop_services(services)
|
|
29
|
+
services.each do |service_name, _opts|
|
|
30
|
+
if service_exists?(service_name)
|
|
31
|
+
puts "stopping #{prefixed_name(service_name)}"
|
|
32
|
+
stop_service(token, prefixed_name(service_name))
|
|
33
|
+
else
|
|
34
|
+
puts "No such service: #{service_name}".colorize(:red)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
|
|
2
|
+
module Central::Cli::Auth::Aws
|
|
3
|
+
class CreateCommand < Clamp::Command
|
|
4
|
+
include Central::Cli::Common
|
|
5
|
+
|
|
6
|
+
option '--access-key', 'ACCESS_KEY', 'AWS access key ID', environment_variable: 'AWS_ACCESS_KEY_ID', required: true
|
|
7
|
+
option '--secret-key', 'SECRET_KEY', 'AWS secret key', environment_variable: 'AWS_SECRET_ACCESS_KEY', required: true
|
|
8
|
+
option '--key-pair', 'KEY_PAIR', 'EC2 key pair name', required: true
|
|
9
|
+
option '--ssl-cert', 'SSL CERT', 'SSL certificate file (default: generate self-signed cert)'
|
|
10
|
+
option '--region', 'REGION', 'EC2 Region', default: 'us-west-2'
|
|
11
|
+
option '--zone', 'ZONE', 'EC2 Availability Zone', default: 'a'
|
|
12
|
+
option '--vpc-id', 'VPC ID', 'Virtual Private Cloud (VPC) ID (default: default vpc)'
|
|
13
|
+
option '--subnet-id', 'SUBNET ID', 'VPC option to specify subnet to launch instance into (default: first subnet from vpc/az)'
|
|
14
|
+
option '--type', 'SIZE', 'Instance type', default: 't2.small'
|
|
15
|
+
option '--storage', 'STORAGE', 'Storage size (GiB)', default: '30'
|
|
16
|
+
option '--version', 'VERSION', 'Define installed Central version', default: 'latest'
|
|
17
|
+
|
|
18
|
+
def execute
|
|
19
|
+
require 'central/machine/aws'
|
|
20
|
+
|
|
21
|
+
provisioner = Central::Machine::Aws::AuthProvisioner.new(access_key, secret_key, region)
|
|
22
|
+
provisioner.run!(
|
|
23
|
+
type: type,
|
|
24
|
+
vpc: vpc_id,
|
|
25
|
+
zone: zone,
|
|
26
|
+
subnet: subnet_id,
|
|
27
|
+
ssl_cert: ssl_cert,
|
|
28
|
+
storage: storage,
|
|
29
|
+
version: version,
|
|
30
|
+
key_pair: key_pair
|
|
31
|
+
)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'tty'
|
|
2
|
+
|
|
3
|
+
module Central::Cli::Auth
|
|
4
|
+
class ListCommand < Clamp::Command
|
|
5
|
+
include Central::Cli::Common
|
|
6
|
+
|
|
7
|
+
def execute
|
|
8
|
+
header = %w(Name Url)
|
|
9
|
+
rows = []
|
|
10
|
+
|
|
11
|
+
current_server = settings['current_server']
|
|
12
|
+
settings['servers'].each do |server|
|
|
13
|
+
name = if server['name'] == current_server
|
|
14
|
+
"* #{server['name']}"
|
|
15
|
+
else
|
|
16
|
+
server['name']
|
|
17
|
+
end
|
|
18
|
+
rows << [name, server['url']]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
ttable = TTY::Table.new header: header, rows: Array.new(rows)
|
|
22
|
+
renderer = TTY::Table::Renderer::Unicode.new(ttable)
|
|
23
|
+
renderer.border.style = :cyan
|
|
24
|
+
renderer.padding = [0, 1, 0, 1]
|
|
25
|
+
puts renderer.render
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require_relative 'auth/aws_command'
|
|
2
|
+
require_relative 'auth/list_command'
|
|
3
|
+
|
|
4
|
+
class Central::Cli::AuthCommand < Clamp::Command
|
|
5
|
+
subcommand 'aws', 'AWS specific commands', Central::Cli::Auth::AwsCommand
|
|
6
|
+
subcommand %w(list ls), 'List oAuth servers', Central::Cli::Auth::ListCommand
|
|
7
|
+
def execute
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
module Central
|
|
3
|
+
module Cli
|
|
4
|
+
module BytesHelper
|
|
5
|
+
KILOBYTE = 1024
|
|
6
|
+
MEGABYTE = KILOBYTE * 1024
|
|
7
|
+
GIGABYTE = MEGABYTE * 1024
|
|
8
|
+
TERABYTE = GIGABYTE * 1024
|
|
9
|
+
|
|
10
|
+
def to_kilobytes(bytes, ndigits = nil)
|
|
11
|
+
return 0.0 if bytes.nil?
|
|
12
|
+
round(bytes.to_f / KILOBYTE, ndigits)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_megabytes(bytes, ndigits = nil)
|
|
16
|
+
return 0.0 if bytes.nil?
|
|
17
|
+
round(bytes.to_f / MEGABYTE, ndigits)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def to_gigabytes(bytes, ndigits = nil)
|
|
21
|
+
return 0.0 if bytes.nil?
|
|
22
|
+
round(bytes.to_f / GIGABYTE, ndigits)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def to_terabytes(bytes, ndigits)
|
|
26
|
+
return 0.0 if bytes.nil?
|
|
27
|
+
round(bytes.to_f / TERABYTE, ndigits)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def round(value, ndigits = nil)
|
|
33
|
+
return value if ndigits.nil?
|
|
34
|
+
value.round(ndigits)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
require 'colorize'
|
|
2
|
+
require 'uri'
|
|
3
|
+
|
|
4
|
+
module Central
|
|
5
|
+
module Cli
|
|
6
|
+
module Common
|
|
7
|
+
def require_api_url
|
|
8
|
+
api_url
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def require_token
|
|
12
|
+
token = ENV['CENTRAL_TOKEN'] || current_master['token']
|
|
13
|
+
unless token
|
|
14
|
+
fail ArgumentError.new('Please login first using: cm login')
|
|
15
|
+
end
|
|
16
|
+
token
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def client(token = nil)
|
|
20
|
+
if @client.nil?
|
|
21
|
+
headers = {}
|
|
22
|
+
headers['Authorization'] = "Bearer #{token}" unless token.nil?
|
|
23
|
+
|
|
24
|
+
@client = Central::Client.new(api_url, headers)
|
|
25
|
+
end
|
|
26
|
+
@client
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def reset_client
|
|
30
|
+
@client = nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def settings_filename
|
|
34
|
+
File.join(Dir.home, '/.central_client.json')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def settings
|
|
38
|
+
if @settings.nil?
|
|
39
|
+
if File.exist?(settings_filename)
|
|
40
|
+
@settings = JSON.parse(File.read(settings_filename))
|
|
41
|
+
unless @settings['current_server']
|
|
42
|
+
# Let's migrate the old settings model to new
|
|
43
|
+
@settings['server']['name'] = 'default'
|
|
44
|
+
@settings = {
|
|
45
|
+
'current_server' => 'default',
|
|
46
|
+
'servers' => [@settings['server']]
|
|
47
|
+
}
|
|
48
|
+
save_settings
|
|
49
|
+
end
|
|
50
|
+
else
|
|
51
|
+
@settings = {
|
|
52
|
+
'current_server' => 'default',
|
|
53
|
+
'servers' => [{}]
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
@settings
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def api_url
|
|
61
|
+
url = ENV['CENTRAL_URL'] || current_master['url']
|
|
62
|
+
unless url
|
|
63
|
+
fail ArgumentError.new("It seem's that you are not logged into Central master, please login with: cm login")
|
|
64
|
+
end
|
|
65
|
+
ensure_custom_ssl_ca(url)
|
|
66
|
+
url
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ensure_custom_ssl_ca(url)
|
|
70
|
+
return if Excon.defaults[:ssl_ca_file]
|
|
71
|
+
|
|
72
|
+
uri = URI.parse(url)
|
|
73
|
+
cert_file = File.join(Dir.home, "/.central/certs/#{uri.host}.pem")
|
|
74
|
+
Excon.defaults[:ssl_ca_file] = cert_file if File.exist?(cert_file)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def current_stack=(stack)
|
|
78
|
+
settings['servers'][current_master_index]['stack'] = stack['id']
|
|
79
|
+
save_settings
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def require_current_stack
|
|
83
|
+
if current_stack.nil?
|
|
84
|
+
fail ArgumentError.new('Please select stack first using: cm stack use <stack name>')
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def clear_current_stack
|
|
89
|
+
settings['servers'][current_master_index].delete('stack')
|
|
90
|
+
save_settings
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def current_stack
|
|
94
|
+
if respond_to?(:stack)
|
|
95
|
+
ENV['CENTRAL_STACK'] || stack || current_master['stack']
|
|
96
|
+
else
|
|
97
|
+
ENV['CENTRAL_STACK'] || current_master['stack']
|
|
98
|
+
end
|
|
99
|
+
rescue ArgumentError => e
|
|
100
|
+
nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def current_master_index
|
|
104
|
+
current_server = settings['current_server'] || 'default'
|
|
105
|
+
settings['servers'].find_index { |m| m['name'] == current_server }
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def current_master
|
|
109
|
+
index = current_master_index
|
|
110
|
+
unless index
|
|
111
|
+
fail ArgumentError.new("It seem's that you are not logged into ANY Central master, please login with: cm login")
|
|
112
|
+
end
|
|
113
|
+
settings['servers'][index]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def current_master=(master_alias)
|
|
117
|
+
settings['current_server'] = master_alias
|
|
118
|
+
save_settings
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def api_url=(api_url)
|
|
122
|
+
settings['servers'][current_master_index]['url'] = api_url
|
|
123
|
+
save_settings
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def access_token=(token)
|
|
127
|
+
settings['servers'][current_master_index]['token'] = token
|
|
128
|
+
save_settings
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def add_master(server_name, master_info)
|
|
132
|
+
server_name ||= 'default'
|
|
133
|
+
index = settings['servers'].find_index { |m| m['name'] == server_name }
|
|
134
|
+
if index
|
|
135
|
+
settings['servers'][index] = master_info
|
|
136
|
+
else
|
|
137
|
+
settings['servers'] << master_info
|
|
138
|
+
end
|
|
139
|
+
settings['current_server'] = server_name
|
|
140
|
+
save_settings
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def save_settings
|
|
144
|
+
File.write(settings_filename, JSON.pretty_generate(settings))
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|