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,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,7 @@
1
+ module Central::Cli::Etcd
2
+ module Common
3
+ def validate_key
4
+ abort("Invalid key, did you mean /#{key} ?") unless key[0] == '/'
5
+ end
6
+ end
7
+ 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
@@ -0,0 +1,7 @@
1
+ class Central::Cli::LogoutCommand < Clamp::Command
2
+ include Central::Cli::Common
3
+
4
+ def execute
5
+ self.access_token = nil
6
+ end
7
+ end