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.
Files changed (259) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +3 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +6 -0
  5. data/.rubocop.yml +5 -0
  6. data/Dockerfile +15 -0
  7. data/Gemfile +10 -0
  8. data/LICENSE +191 -0
  9. data/README.md +39 -0
  10. data/Rakefile +9 -0
  11. data/VERSION +1 -0
  12. data/bin/cm +85 -0
  13. data/central-cli.gemspec +35 -0
  14. data/central-docker.sh +6 -0
  15. data/lib/central/cli/app_command.rb +29 -0
  16. data/lib/central/cli/apps/build_command.rb +24 -0
  17. data/lib/central/cli/apps/central_yml_generator.rb +88 -0
  18. data/lib/central/cli/apps/common.rb +166 -0
  19. data/lib/central/cli/apps/deploy_command.rb +191 -0
  20. data/lib/central/cli/apps/docker_compose_generator.rb +48 -0
  21. data/lib/central/cli/apps/docker_helper.rb +85 -0
  22. data/lib/central/cli/apps/dockerfile_generator.rb +15 -0
  23. data/lib/central/cli/apps/init_command.rb +91 -0
  24. data/lib/central/cli/apps/list_command.rb +68 -0
  25. data/lib/central/cli/apps/logs_command.rb +76 -0
  26. data/lib/central/cli/apps/monitor_command.rb +93 -0
  27. data/lib/central/cli/apps/remove_command.rb +80 -0
  28. data/lib/central/cli/apps/restart_command.rb +38 -0
  29. data/lib/central/cli/apps/scale_command.rb +31 -0
  30. data/lib/central/cli/apps/show_command.rb +23 -0
  31. data/lib/central/cli/apps/start_command.rb +39 -0
  32. data/lib/central/cli/apps/stop_command.rb +39 -0
  33. data/lib/central/cli/auth/aws/create_command.rb +34 -0
  34. data/lib/central/cli/auth/aws_command.rb +7 -0
  35. data/lib/central/cli/auth/list_command.rb +28 -0
  36. data/lib/central/cli/auth_command.rb +9 -0
  37. data/lib/central/cli/bytes_helper.rb +38 -0
  38. data/lib/central/cli/common.rb +148 -0
  39. data/lib/central/cli/container_command.rb +10 -0
  40. data/lib/central/cli/containers/exec_command.rb +21 -0
  41. data/lib/central/cli/containers/inspect_command.rb +22 -0
  42. data/lib/central/cli/etcd/common.rb +7 -0
  43. data/lib/central/cli/etcd/get_command.rb +26 -0
  44. data/lib/central/cli/etcd/list_command.rb +31 -0
  45. data/lib/central/cli/etcd/mkdir_command.rb +21 -0
  46. data/lib/central/cli/etcd/remove_command.rb +25 -0
  47. data/lib/central/cli/etcd/set_command.rb +22 -0
  48. data/lib/central/cli/etcd_command.rb +16 -0
  49. data/lib/central/cli/external_registries/add_command.rb +21 -0
  50. data/lib/central/cli/external_registries/delete_command.rb +15 -0
  51. data/lib/central/cli/external_registries/list_command.rb +27 -0
  52. data/lib/central/cli/external_registries/remove_command.rb +13 -0
  53. data/lib/central/cli/external_registry_command.rb +14 -0
  54. data/lib/central/cli/login_command.rb +121 -0
  55. data/lib/central/cli/logout_command.rb +7 -0
  56. data/lib/central/cli/master/aws/create_command.rb +41 -0
  57. data/lib/central/cli/master/aws_command.rb +7 -0
  58. data/lib/central/cli/master/azure/create_command.rb +39 -0
  59. data/lib/central/cli/master/azure_command.rb +11 -0
  60. data/lib/central/cli/master/digital_ocean/create_command.rb +35 -0
  61. data/lib/central/cli/master/digital_ocean_command.rb +11 -0
  62. data/lib/central/cli/master/list_command.rb +28 -0
  63. data/lib/central/cli/master/use_command.rb +34 -0
  64. data/lib/central/cli/master/users/add_role_command.rb +26 -0
  65. data/lib/central/cli/master/users/invite_command.rb +24 -0
  66. data/lib/central/cli/master/users/list_command.rb +18 -0
  67. data/lib/central/cli/master/users/remove_command.rb +22 -0
  68. data/lib/central/cli/master/users/remove_role_command.rb +25 -0
  69. data/lib/central/cli/master/users_command.rb +15 -0
  70. data/lib/central/cli/master/vagrant/create_command.rb +25 -0
  71. data/lib/central/cli/master/vagrant/restart_command.rb +20 -0
  72. data/lib/central/cli/master/vagrant/ssh_command.rb +15 -0
  73. data/lib/central/cli/master/vagrant/start_command.rb +20 -0
  74. data/lib/central/cli/master/vagrant/stop_command.rb +20 -0
  75. data/lib/central/cli/master/vagrant/terminate_command.rb +13 -0
  76. data/lib/central/cli/master/vagrant_command.rb +21 -0
  77. data/lib/central/cli/master_command.rb +19 -0
  78. data/lib/central/cli/node_command.rb +30 -0
  79. data/lib/central/cli/nodes/add_label_command.rb +19 -0
  80. data/lib/central/cli/nodes/aws/create_command.rb +40 -0
  81. data/lib/central/cli/nodes/aws/restart_command.rb +29 -0
  82. data/lib/central/cli/nodes/aws/terminate_command.rb +21 -0
  83. data/lib/central/cli/nodes/aws_command.rb +14 -0
  84. data/lib/central/cli/nodes/azure/create_command.rb +40 -0
  85. data/lib/central/cli/nodes/azure/restart_command.rb +31 -0
  86. data/lib/central/cli/nodes/azure/terminate_command.rb +21 -0
  87. data/lib/central/cli/nodes/azure_command.rb +14 -0
  88. data/lib/central/cli/nodes/digital_ocean/create_command.rb +32 -0
  89. data/lib/central/cli/nodes/digital_ocean/restart_command.rb +27 -0
  90. data/lib/central/cli/nodes/digital_ocean/terminate_command.rb +19 -0
  91. data/lib/central/cli/nodes/digital_ocean_command.rb +14 -0
  92. data/lib/central/cli/nodes/label_command.rb +12 -0
  93. data/lib/central/cli/nodes/labels/add_command.rb +19 -0
  94. data/lib/central/cli/nodes/labels/remove_command.rb +23 -0
  95. data/lib/central/cli/nodes/list_command.rb +62 -0
  96. data/lib/central/cli/nodes/remove_command.rb +16 -0
  97. data/lib/central/cli/nodes/remove_label_command.rb +23 -0
  98. data/lib/central/cli/nodes/show_command.rb +49 -0
  99. data/lib/central/cli/nodes/ssh_command.rb +31 -0
  100. data/lib/central/cli/nodes/update_command.rb +20 -0
  101. data/lib/central/cli/nodes/vagrant/create_command.rb +27 -0
  102. data/lib/central/cli/nodes/vagrant/restart_command.rb +26 -0
  103. data/lib/central/cli/nodes/vagrant/ssh_command.rb +21 -0
  104. data/lib/central/cli/nodes/vagrant/start_command.rb +26 -0
  105. data/lib/central/cli/nodes/vagrant/stop_command.rb +26 -0
  106. data/lib/central/cli/nodes/vagrant/terminate_command.rb +17 -0
  107. data/lib/central/cli/nodes/vagrant_command.rb +20 -0
  108. data/lib/central/cli/register_command.rb +21 -0
  109. data/lib/central/cli/registry/create_command.rb +144 -0
  110. data/lib/central/cli/registry/delete_command.rb +22 -0
  111. data/lib/central/cli/registry/remove_command.rb +19 -0
  112. data/lib/central/cli/registry_command.rb +11 -0
  113. data/lib/central/cli/service_command.rb +49 -0
  114. data/lib/central/cli/services/add_env_command.rb +19 -0
  115. data/lib/central/cli/services/add_secret_command.rb +24 -0
  116. data/lib/central/cli/services/container_command.rb +8 -0
  117. data/lib/central/cli/services/containers_command.rb +32 -0
  118. data/lib/central/cli/services/create_command.rb +90 -0
  119. data/lib/central/cli/services/delete_command.rb +19 -0
  120. data/lib/central/cli/services/deploy_command.rb +21 -0
  121. data/lib/central/cli/services/env_command.rb +11 -0
  122. data/lib/central/cli/services/envs/add_command.rb +19 -0
  123. data/lib/central/cli/services/envs/list_command.rb +20 -0
  124. data/lib/central/cli/services/envs/remove_command.rb +18 -0
  125. data/lib/central/cli/services/envs_command.rb +20 -0
  126. data/lib/central/cli/services/link_command.rb +26 -0
  127. data/lib/central/cli/services/list_command.rb +42 -0
  128. data/lib/central/cli/services/logs_command.rb +57 -0
  129. data/lib/central/cli/services/monitor_command.rb +58 -0
  130. data/lib/central/cli/services/remove_command.rb +17 -0
  131. data/lib/central/cli/services/remove_env_command.rb +18 -0
  132. data/lib/central/cli/services/remove_secret_command.rb +28 -0
  133. data/lib/central/cli/services/restart_command.rb +17 -0
  134. data/lib/central/cli/services/scale_command.rb +17 -0
  135. data/lib/central/cli/services/secret_command.rb +9 -0
  136. data/lib/central/cli/services/secrets/link_command.rb +24 -0
  137. data/lib/central/cli/services/secrets/unlink_command.rb +28 -0
  138. data/lib/central/cli/services/services_helper.rb +360 -0
  139. data/lib/central/cli/services/show_command.rb +18 -0
  140. data/lib/central/cli/services/start_command.rb +17 -0
  141. data/lib/central/cli/services/stats_command.rb +74 -0
  142. data/lib/central/cli/services/stop_command.rb +17 -0
  143. data/lib/central/cli/services/unlink_command.rb +25 -0
  144. data/lib/central/cli/services/update_command.rb +78 -0
  145. data/lib/central/cli/stack_command.rb +32 -0
  146. data/lib/central/cli/stack_options.rb +11 -0
  147. data/lib/central/cli/stacks/add_user_command.rb +18 -0
  148. data/lib/central/cli/stacks/audit_log_command.rb +21 -0
  149. data/lib/central/cli/stacks/cloud_config_command.rb +41 -0
  150. data/lib/central/cli/stacks/common.rb +95 -0
  151. data/lib/central/cli/stacks/create_command.rb +26 -0
  152. data/lib/central/cli/stacks/current_command.rb +25 -0
  153. data/lib/central/cli/stacks/env_command.rb +32 -0
  154. data/lib/central/cli/stacks/list_command.rb +35 -0
  155. data/lib/central/cli/stacks/list_users_command.rb +26 -0
  156. data/lib/central/cli/stacks/logs_command.rb +81 -0
  157. data/lib/central/cli/stacks/remove_command.rb +26 -0
  158. data/lib/central/cli/stacks/remove_user_command.rb +17 -0
  159. data/lib/central/cli/stacks/show_command.rb +19 -0
  160. data/lib/central/cli/stacks/trusted_subnets/add_command.rb +16 -0
  161. data/lib/central/cli/stacks/trusted_subnets/list_command.rb +17 -0
  162. data/lib/central/cli/stacks/trusted_subnets/remove_command.rb +20 -0
  163. data/lib/central/cli/stacks/update_command.rb +27 -0
  164. data/lib/central/cli/stacks/use_command.rb +21 -0
  165. data/lib/central/cli/stacks/user_command.rb +11 -0
  166. data/lib/central/cli/stacks/users/add_command.rb +18 -0
  167. data/lib/central/cli/stacks/users/list_command.rb +18 -0
  168. data/lib/central/cli/stacks/users/remove_command.rb +17 -0
  169. data/lib/central/cli/user/forgot_password_command.rb +16 -0
  170. data/lib/central/cli/user/reset_password_command.rb +21 -0
  171. data/lib/central/cli/user/verify_command.rb +22 -0
  172. data/lib/central/cli/user_command.rb +12 -0
  173. data/lib/central/cli/vault/list_command.rb +25 -0
  174. data/lib/central/cli/vault/read_command.rb +17 -0
  175. data/lib/central/cli/vault/remove_command.rb +14 -0
  176. data/lib/central/cli/vault/update_command.rb +18 -0
  177. data/lib/central/cli/vault/write_command.rb +22 -0
  178. data/lib/central/cli/vault_command.rb +16 -0
  179. data/lib/central/cli/version.rb +5 -0
  180. data/lib/central/cli/version_command.rb +22 -0
  181. data/lib/central/cli/vpn/config_command.rb +25 -0
  182. data/lib/central/cli/vpn/create_command.rb +71 -0
  183. data/lib/central/cli/vpn/delete_command.rb +21 -0
  184. data/lib/central/cli/vpn/remove_command.rb +19 -0
  185. data/lib/central/cli/vpn_command.rb +13 -0
  186. data/lib/central/cli/whoami_command.rb +20 -0
  187. data/lib/central/client.rb +208 -0
  188. data/lib/central/errors.rb +10 -0
  189. data/lib/central/machine/aws.rb +14 -0
  190. data/lib/central/machine/aws/auth_provisioner.rb +161 -0
  191. data/lib/central/machine/aws/cloudinit.yml +71 -0
  192. data/lib/central/machine/aws/cloudinit_master.yml +118 -0
  193. data/lib/central/machine/aws/cloudinit_oauth.yml +76 -0
  194. data/lib/central/machine/aws/common.rb +31 -0
  195. data/lib/central/machine/aws/master_provisioner.rb +171 -0
  196. data/lib/central/machine/aws/node_destroyer.rb +46 -0
  197. data/lib/central/machine/aws/node_provisioner.rb +214 -0
  198. data/lib/central/machine/azure.rb +13 -0
  199. data/lib/central/machine/azure/cloudinit.yml +64 -0
  200. data/lib/central/machine/azure/cloudinit_master.yml +106 -0
  201. data/lib/central/machine/azure/logger.rb +26 -0
  202. data/lib/central/machine/azure/master_provisioner.rb +125 -0
  203. data/lib/central/machine/azure/node_destroyer.rb +52 -0
  204. data/lib/central/machine/azure/node_provisioner.rb +126 -0
  205. data/lib/central/machine/cert_helper.rb +39 -0
  206. data/lib/central/machine/cloud_config/cloudinit.yml +70 -0
  207. data/lib/central/machine/cloud_config/node_generator.rb +27 -0
  208. data/lib/central/machine/common.rb +16 -0
  209. data/lib/central/machine/digital_ocean.rb +13 -0
  210. data/lib/central/machine/digital_ocean/cloudinit.yml +64 -0
  211. data/lib/central/machine/digital_ocean/cloudinit_master.yml +118 -0
  212. data/lib/central/machine/digital_ocean/master_provisioner.rb +99 -0
  213. data/lib/central/machine/digital_ocean/node_destroyer.rb +40 -0
  214. data/lib/central/machine/digital_ocean/node_provisioner.rb +81 -0
  215. data/lib/central/machine/random_name.rb +39 -0
  216. data/lib/central/machine/vagrant.rb +12 -0
  217. data/lib/central/machine/vagrant/Vagrantfile.master.rb.erb +116 -0
  218. data/lib/central/machine/vagrant/Vagrantfile.node.rb.erb +32 -0
  219. data/lib/central/machine/vagrant/cloudinit.yml +73 -0
  220. data/lib/central/machine/vagrant/master_destroyer.rb +34 -0
  221. data/lib/central/machine/vagrant/master_provisioner.rb +79 -0
  222. data/lib/central/machine/vagrant/node_destroyer.rb +38 -0
  223. data/lib/central/machine/vagrant/node_provisioner.rb +68 -0
  224. data/lib/central/scripts/completer +157 -0
  225. data/lib/central/scripts/init +11 -0
  226. data/spec/central/cli/app/common_spec.rb +150 -0
  227. data/spec/central/cli/app/deploy_command_spec.rb +598 -0
  228. data/spec/central/cli/app/docker_helper_spec.rb +102 -0
  229. data/spec/central/cli/app/scale_spec.rb +49 -0
  230. data/spec/central/cli/common_spec.rb +117 -0
  231. data/spec/central/cli/login_command_spec.rb +31 -0
  232. data/spec/central/cli/master/current_command_spec.rb +55 -0
  233. data/spec/central/cli/master/use_command_spec.rb +37 -0
  234. data/spec/central/cli/master/users/invite_command_spec.rb +34 -0
  235. data/spec/central/cli/master/users/remove_command_spec.rb +26 -0
  236. data/spec/central/cli/master/users/roles/add_command_spec.rb +34 -0
  237. data/spec/central/cli/master/users/roles/remove_command_spec.rb +34 -0
  238. data/spec/central/cli/register_command_spec.rb +56 -0
  239. data/spec/central/cli/services/containers_command_spec.rb +40 -0
  240. data/spec/central/cli/services/link_command_spec.rb +38 -0
  241. data/spec/central/cli/services/restart_command_spec.rb +27 -0
  242. data/spec/central/cli/services/secrets/link_command_spec.rb +59 -0
  243. data/spec/central/cli/services/secrets/unlink_command_spec.rb +48 -0
  244. data/spec/central/cli/services/services_helper_spec.rb +170 -0
  245. data/spec/central/cli/services/unlink_command_spec.rb +38 -0
  246. data/spec/central/cli/stacks/trusted_subnets/add_command_spec.rb +37 -0
  247. data/spec/central/cli/stacks/trusted_subnets/list_command_spec.rb +30 -0
  248. data/spec/central/cli/stacks/trusted_subnets/remove_command_spec.rb +37 -0
  249. data/spec/central/cli/version_command_spec.rb +16 -0
  250. data/spec/fixtures/central.yml +17 -0
  251. data/spec/fixtures/docker-compose.yml +8 -0
  252. data/spec/fixtures/mysql.yml +3 -0
  253. data/spec/fixtures/wordpress-scaled.yml +3 -0
  254. data/spec/fixtures/wordpress.yml +2 -0
  255. data/spec/spec_helper.rb +27 -0
  256. data/spec/support/client_helpers.rb +30 -0
  257. data/spec/support/fixtures_helpers.rb +7 -0
  258. data/tasks/rspec.rake +5 -0
  259. metadata +463 -0
@@ -0,0 +1,41 @@
1
+ require 'securerandom'
2
+
3
+ module Central::Cli::Master::Aws
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ option '--access-key', 'ACCESS_KEY', 'AWS access key ID', environment_variable: 'AWS_ACCESS_KEY_ID', required: true
8
+ option '--secret-key', 'SECRET_KEY', 'AWS secret key', environment_variable: 'AWS_SECRET_ACCESS_KEY', required: true
9
+ option '--key-pair', 'KEY_PAIR', 'EC2 key pair name', required: true
10
+ option '--ssl-cert', 'SSL CERT', 'SSL certificate file (default: generate self-signed cert)'
11
+ option '--region', 'REGION', 'EC2 Region', default: 'us-west-2'
12
+ option '--zone', 'ZONE', 'EC2 Availability Zone', default: 'a'
13
+ option '--vpc-id', 'VPC ID', 'Virtual Private Cloud (VPC) ID (default: default vpc)'
14
+ option '--subnet-id', 'SUBNET ID', 'VPC option to specify subnet to launch instance into (default: first subnet from vpc/az)'
15
+ option '--type', 'SIZE', 'Instance type', default: 't2.small'
16
+ option '--storage', 'STORAGE', 'Storage size (GiB)', default: '30'
17
+ option '--vault-secret', 'VAULT_SECRET', 'Secret key for Vault (default: generate random secret)'
18
+ option '--vault-iv', 'VAULT_IV', 'Initialization vector for Vault (default: generate random iv)'
19
+ option '--version', 'VERSION', 'Define installed Central version', default: 'latest'
20
+ option '--auth-provider-url', 'AUTH_PROVIDER_URL', 'Define authentication provider url (optional)'
21
+
22
+ def execute
23
+ require 'central/machine/aws'
24
+
25
+ provisioner = Central::Machine::Aws::MasterProvisioner.new(access_key, secret_key, region)
26
+ provisioner.run!(
27
+ type: type,
28
+ vpc: vpc_id,
29
+ zone: zone,
30
+ subnet: subnet_id,
31
+ ssl_cert: ssl_cert,
32
+ storage: storage,
33
+ version: version,
34
+ key_pair: key_pair,
35
+ auth_server: auth_provider_url,
36
+ vault_secret: vault_secret || SecureRandom.hex(24),
37
+ vault_iv: vault_iv || SecureRandom.hex(24)
38
+ )
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ module Central::Cli::Master
2
+ require_relative 'aws/create_command'
3
+
4
+ class AwsCommand < Clamp::Command
5
+ subcommand 'create', 'Create a new AWS master', Aws::CreateCommand
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ require 'securerandom'
2
+
3
+ module Central::Cli::Master::Azure
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ option '--subscription-id', 'SUBSCRIPTION ID', 'Azure subscription id', required: true
8
+ option '--subscription-cert', 'CERTIFICATE', 'Path to Azure management certificate', attribute_name: :certificate, required: true
9
+ option '--size', 'SIZE', 'SIZE', default: 'Small'
10
+ option '--network', 'NETWORK', 'Virtual Network name'
11
+ option '--subnet', 'SUBNET', 'Subnet name'
12
+ option '--ssh-key', 'SSH KEY', 'SSH private key file', required: true
13
+ option '--password', 'PASSWORD', 'Password'
14
+ option '--location', 'LOCATION', 'Location', default: 'West Europe'
15
+ option '--ssl-cert', 'SSL CERT', 'SSL certificate file'
16
+ option '--vault-secret', 'VAULT_SECRET', 'Secret key for Vault'
17
+ option '--vault-iv', 'VAULT_IV', 'Initialization vector for Vault'
18
+ option '--auth-provider-url', 'AUTH_PROVIDER_URL', 'Define authentication provider url'
19
+ option '--version', 'VERSION', 'Define installed Central version', default: 'latest'
20
+
21
+ def execute
22
+ require 'central/machine/azure'
23
+ provisioner = Central::Machine::Azure::MasterProvisioner.new(subscription_id, certificate)
24
+ provisioner.run!(
25
+ password: password,
26
+ ssh_key: ssh_key,
27
+ ssl_cert: ssl_cert,
28
+ size: size,
29
+ virtual_network: network,
30
+ subnet: subnet,
31
+ location: location,
32
+ auth_server: auth_provider_url,
33
+ version: version,
34
+ vault_secret: vault_secret || SecureRandom.hex(24),
35
+ vault_iv: vault_iv || SecureRandom.hex(24)
36
+ )
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module Central::Cli::Master
3
+ require_relative 'azure/create_command'
4
+
5
+ class AzureCommand < Clamp::Command
6
+ subcommand 'create', 'Create a new Azure master', Azure::CreateCommand
7
+
8
+ def execute
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,35 @@
1
+ require 'securerandom'
2
+
3
+ module Central::Cli::Master::DigitalOcean
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ option '--token', 'TOKEN', 'DigitalOcean API token', required: true
8
+ option '--ssh-key', 'SSH_KEY', 'Path to ssh public key', required: true
9
+ option '--ssl-cert', 'SSL CERT', 'SSL certificate file'
10
+ option '--size', 'SIZE', 'Droplet size', default: '1gb'
11
+ option '--region', 'REGION', 'Region', default: 'ams2'
12
+ option '--vault-secret', 'VAULT_SECRET', 'Secret key for Vault (optional)'
13
+ option '--vault-iv', 'VAULT_IV', 'Initialization vector for Vault (optional)'
14
+ option '--mongodb-uri', 'URI', 'External MongoDB uri (optional)'
15
+ option '--version', 'VERSION', 'Define installed Central version', default: 'latest'
16
+ option '--auth-provider-url', 'AUTH_PROVIDER_URL', 'Define authentication provider url'
17
+
18
+ def execute
19
+ require 'central/machine/digital_ocean'
20
+
21
+ provisioner = Central::Machine::DigitalOcean::MasterProvisioner.new(token)
22
+ provisioner.run!(
23
+ ssh_key: ssh_key,
24
+ ssl_cert: ssl_cert,
25
+ size: size,
26
+ region: region,
27
+ version: version,
28
+ auth_server: auth_provider_url,
29
+ vault_secret: vault_secret || SecureRandom.hex(24),
30
+ vault_iv: vault_iv || SecureRandom.hex(24),
31
+ mongodb_uri: mongodb_uri
32
+ )
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+
2
+ module Central::Cli::Master
3
+ require_relative 'digital_ocean/create_command'
4
+
5
+ class DigitalOceanCommand < Clamp::Command
6
+ subcommand 'create', 'Create a new DigitalOcean master', DigitalOcean::CreateCommand
7
+
8
+ def execute
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ require 'tty'
2
+
3
+ module Central::Cli::Master
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,34 @@
1
+ module Central::Cli::Master
2
+ class UseCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ parameter 'NAME', 'Master name to use'
6
+
7
+ def execute
8
+ master = find_master_by_name(name)
9
+ if !master.nil?
10
+ self.current_master = master['name']
11
+ puts "Using master: #{master['name'].cyan} (#{master['url']})"
12
+ puts "Using stack: #{current_stack.cyan}" if current_stack
13
+ stacks = client(require_token).get('stacks')['stacks']
14
+ if stacks.size > 1
15
+ puts ''
16
+ puts "You have access to following stacks and can switch between them using 'cm stack use <name>'"
17
+ puts ''
18
+ stacks.each do |stack|
19
+ puts " * #{stack['name']}"
20
+ end
21
+ puts ''
22
+ end
23
+ else
24
+ abort "Could not resolve master by name [#{name}]. For a list of known masters please run: cm master list".colorize(:red)
25
+ end
26
+ end
27
+
28
+ def find_master_by_name(name)
29
+ settings['servers'].each do |server|
30
+ return server if server['name'] == name
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../../common'
2
+
3
+ module Central::Cli::Master::Users
4
+ class AddRoleCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ parameter 'ROLE', 'Role name'
8
+ parameter 'USER ...', 'List of users'
9
+
10
+ def execute
11
+ require_api_url
12
+ token = require_token
13
+ data = { role: role }
14
+
15
+ user_list.each do |email|
16
+ begin
17
+ response = client(token).post("users/#{email}/roles", data)
18
+ puts "Added role #{role} to #{email}"
19
+ rescue => exec
20
+ puts "Failed to add role #{role} to #{email}".colorize(:red)
21
+ puts exec.message
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../../common'
2
+
3
+ module Central::Cli::Master::Users
4
+ class InviteCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ parameter 'EMAIL ...', 'List of emails'
8
+
9
+ def execute
10
+ require_api_url
11
+ token = require_token
12
+ email_list.each do |email|
13
+ begin
14
+ data = { email: email }
15
+ response = client(token).post('users', data)
16
+ puts "Invitation send to #{email}"
17
+ rescue
18
+ puts "Failed to invite #{email}".colorize(:red)
19
+ puts exec.message
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../common'
2
+
3
+ module Central::Cli::Master::Users
4
+ class ListCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ def execute
8
+ require_api_url
9
+ token = require_token
10
+ response = client(token).get('users')
11
+
12
+ response['users'].each do |user|
13
+ roles = user['roles'].map { |r| r['name'] }
14
+ puts "#{user['email']} - #{roles.join(', ')}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../../common'
2
+
3
+ module Central::Cli::Master::Users
4
+ class RemoveCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ parameter 'EMAIL ...', 'List of emails'
8
+
9
+ def execute
10
+ require_api_url
11
+ token = require_token
12
+ email_list.each do |email|
13
+ begin
14
+ client(token).delete("users/#{email}")
15
+ rescue => exec
16
+ STDERR.puts "Failed to remove user #{email}".colorize(:red)
17
+ STDERR.puts exec.message
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../common'
2
+
3
+ module Central::Cli::Master::Users
4
+ class RemoveRoleCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ parameter 'ROLE', 'Role name'
8
+ parameter 'USER ...', 'List of users'
9
+
10
+ def execute
11
+ require_api_url
12
+ token = require_token
13
+
14
+ user_list.each do |email|
15
+ begin
16
+ response = client(token).delete("users/#{email}/roles/#{role}")
17
+ puts "Removed role #{role} from #{email}" if response
18
+ rescue => exec
19
+ puts "Failed to remove role #{role} from #{email}".colorize(:red)
20
+ puts exec.message
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module Central::Cli::Master
2
+ require_relative 'users/invite_command'
3
+ require_relative 'users/remove_command'
4
+ require_relative 'users/list_command'
5
+ require_relative 'users/add_role_command'
6
+ require_relative 'users/remove_role_command'
7
+
8
+ class UsersCommand < Clamp::Command
9
+ subcommand 'invite', 'Invite user to Central Machine', Users::InviteCommand
10
+ subcommand %w(remove rm), 'Remove user from Central Machine', Users::RemoveCommand
11
+ subcommand %w(list ls), 'List users', Users::ListCommand
12
+ subcommand 'add-role', 'Add role to user', Users::AddRoleCommand
13
+ subcommand 'remove-role', 'Remove role from user', Users::RemoveRoleCommand
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ require 'securerandom'
2
+
3
+ module Central::Cli::Master::Vagrant
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+
7
+ option '--memory', 'MEMORY', 'How much memory node has', default: '512'
8
+ option '--version', 'VERSION', 'Define installed Central version', default: 'latest'
9
+ option '--auth-provider-url', 'AUTH_PROVIDER_URL', 'Define authentication provider url'
10
+ option '--vault-secret', 'VAULT_SECRET', 'Secret key for Vault'
11
+ option '--vault-iv', 'VAULT_IV', 'Initialization vector for Vault'
12
+
13
+ def execute
14
+ require 'central/machine/vagrant'
15
+ provisioner = Central::Machine::Vagrant::MasterProvisioner.new
16
+ provisioner.run!(
17
+ memory: memory,
18
+ version: version,
19
+ auth_server: auth_provider_url,
20
+ vault_secret: vault_secret || SecureRandom.hex(24),
21
+ vault_iv: vault_iv || SecureRandom.hex(24)
22
+ )
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,20 @@
1
+ module Central::Cli::Master::Vagrant
2
+ class RestartCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ def execute
6
+ require 'central/machine/vagrant'
7
+ vagrant_path = "#{Dir.home}/.central/vagrant_master"
8
+ abort('Cannot find Vagrant central-machine'.colorize(:red)) unless Dir.exist?(vagrant_path)
9
+ Dir.chdir(vagrant_path) do
10
+ ShellSpinner 'Restarting Vagrant central-machine ' do
11
+ Open3.popen2('vagrant reload') do |_stdin, output, _wait|
12
+ while o = output.gets
13
+ print o if ENV['DEBUG']
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module Central::Cli::Master::Vagrant
2
+ class SshCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ def execute
6
+ require 'central/machine/vagrant'
7
+ vagrant_path = "#{Dir.home}/.central/vagrant_master"
8
+ abort('Cannot find Vagrant central-machine'.colorize(:red)) unless Dir.exist?(vagrant_path)
9
+
10
+ Dir.chdir(vagrant_path) do
11
+ system('vagrant ssh')
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Central::Cli::Master::Vagrant
2
+ class StartCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ def execute
6
+ require 'central/machine/vagrant'
7
+ vagrant_path = "#{Dir.home}/.central/vagrant_master"
8
+ abort('Cannot find Vagrant node central-machine'.colorize(:red)) unless Dir.exist?(vagrant_path)
9
+ Dir.chdir(vagrant_path) do
10
+ ShellSpinner 'Starting Vagrant machine central-machine ' do
11
+ Open3.popen2('vagrant up') do |_stdin, output, _wait|
12
+ while o = output.gets
13
+ print o if ENV['DEBUG']
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Central::Cli::Master::Vagrant
2
+ class StopCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ def execute
6
+ require 'central/machine/vagrant'
7
+ vagrant_path = "#{Dir.home}/.central/vagrant_master"
8
+ abort('Cannot find Vagrant central-machine'.colorize(:red)) unless Dir.exist?(vagrant_path)
9
+ Dir.chdir(vagrant_path) do
10
+ ShellSpinner 'Stopping Vagrant central-machine ' do
11
+ Open3.popen2('vagrant halt') do |_stdin, output, _wait|
12
+ while o = output.gets
13
+ print o if ENV['DEBUG']
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end