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,22 @@
1
+ module Central::Cli::Registry
2
+ class DeleteCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+ include Central::Cli::StackOptions
5
+
6
+ def execute
7
+ puts "DEPRECATION WARNING: Support for 'central registry delete' will be dropped. Use 'central registry remove' instead.".colorize(:red)
8
+
9
+ require_api_url
10
+ token = require_token
11
+
12
+ registry = begin
13
+ client(token).get("services/#{current_stack}/registry")
14
+ rescue
15
+ nil
16
+ end
17
+ abort('Docker Registry service does not exist') if registry.nil?
18
+
19
+ client(token).delete("services/#{current_stack}/registry")
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module Central::Cli::Registry
2
+ class RemoveCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ def execute
6
+ require_api_url
7
+ token = require_token
8
+
9
+ registry = begin
10
+ client(token).get("services/#{current_stack}/registry")
11
+ rescue
12
+ nil
13
+ end
14
+ abort('Docker Registry service does not exist') if registry.nil?
15
+
16
+ client(token).delete("services/#{current_stack}/registry")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ require_relative 'registry/create_command'
2
+ require_relative 'registry/delete_command'
3
+ require_relative 'registry/remove_command'
4
+
5
+ class Central::Cli::RegistryCommand < Clamp::Command
6
+ subcommand 'create', 'Create Docker image registry service', Central::Cli::Registry::CreateCommand
7
+ subcommand %w(remove rm), 'Remove Docker image registry service', Central::Cli::Registry::RemoveCommand
8
+
9
+ def execute
10
+ end
11
+ end
@@ -0,0 +1,49 @@
1
+ require_relative 'services/list_command'
2
+ require_relative 'services/show_command'
3
+ require_relative 'services/update_command'
4
+ require_relative 'services/deploy_command'
5
+ require_relative 'services/stop_command'
6
+ require_relative 'services/start_command'
7
+ require_relative 'services/restart_command'
8
+ require_relative 'services/create_command'
9
+ require_relative 'services/scale_command'
10
+ require_relative 'services/delete_command'
11
+ require_relative 'services/remove_command'
12
+ require_relative 'services/containers_command'
13
+ require_relative 'services/logs_command'
14
+ require_relative 'services/stats_command'
15
+ require_relative 'services/monitor_command'
16
+
17
+ require_relative 'services/env_command'
18
+ require_relative 'services/secret_command'
19
+
20
+ require_relative 'services/link_command'
21
+ require_relative 'services/unlink_command'
22
+
23
+ class Central::Cli::ServiceCommand < Clamp::Command
24
+ subcommand %w(list ls), 'List services', Central::Cli::Services::ListCommand
25
+ subcommand 'create', 'Create a new service', Central::Cli::Services::CreateCommand
26
+ subcommand 'show', 'Show service details', Central::Cli::Services::ShowCommand
27
+ subcommand 'update', 'Update service configuration', Central::Cli::Services::UpdateCommand
28
+ subcommand 'deploy', 'Deploy service', Central::Cli::Services::DeployCommand
29
+ subcommand 'stop', 'Stop service', Central::Cli::Services::StopCommand
30
+ subcommand 'start', 'Start service', Central::Cli::Services::StartCommand
31
+ subcommand 'restart', 'Restart service', Central::Cli::Services::RestartCommand
32
+ subcommand 'scale', 'Scale service', Central::Cli::Services::ScaleCommand
33
+ subcommand %w(remove rm), 'Remove service', Central::Cli::Services::RemoveCommand
34
+ subcommand 'delete', '[DEPRECATED] Delete service', Central::Cli::Services::DeleteCommand
35
+ subcommand 'containers', 'List service containers', Central::Cli::Services::ContainersCommand
36
+ subcommand 'logs', 'Show service logs', Central::Cli::Services::LogsCommand
37
+ subcommand 'stats', 'Show service statistics', Central::Cli::Services::StatsCommand
38
+ subcommand 'monitor', 'Monitor', Central::Cli::Services::MonitorCommand
39
+
40
+ subcommand 'env', 'Environment variable specific commands', Central::Cli::Services::EnvCommand
41
+
42
+ subcommand 'secret', 'Secret specific commands', Central::Cli::Services::SecretCommand
43
+
44
+ subcommand 'link', 'Link service to another service', Central::Cli::Services::LinkCommand
45
+ subcommand 'unlink', 'Unlink service from another service', Central::Cli::Services::UnlinkCommand
46
+
47
+ def execute
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class AddEnvCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ parameter 'ENV', 'Environment variable'
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ data = { env: env }
16
+ result = client(token).post("services/#{parse_service_id(name)}/envs", data)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class AddSecretCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ parameter 'SECRET', 'Secret to be added from Vault (format: secret:name:type)'
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ result = client(token).get("services/#{parse_service_id(name)}")
16
+ secrets = result['secrets']
17
+ secrets << parse_secrets([secret])[0]
18
+ data = {
19
+ secrets: secrets
20
+ }
21
+ client(token).put("services/#{parse_service_id(name)}", data)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'containers/exec_command'
2
+
3
+ class Central::Cli::ContainerCommand < Clamp::Command
4
+ subcommand 'exec', 'Execute command inside a container', Central::Cli::Containers::ExecCommand
5
+
6
+ def execute
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class ContainersCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+
15
+ result = client(token).get("services/#{current_stack}/#{name}/containers")
16
+ result['containers'].each do |container|
17
+ puts "#{container['id']}:"
18
+ puts " rev: #{container['deploy_rev']}"
19
+ puts " node: #{container['node']['name']}"
20
+ puts " dns: #{container['name']}.#{current_stack}.central.local"
21
+ puts " ip: #{container['overlay_cidr'].to_s.split('/')[0]}"
22
+ puts " public ip: #{container['node']['public_ip']}"
23
+ if container['status'] == 'unknown'
24
+ puts " status: #{container['status'].colorize(:yellow)}"
25
+ else
26
+ puts " status: #{container['status']}"
27
+ end
28
+ puts ''
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,90 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ parameter 'IMAGE', 'Service image (example: redis:3.0)'
11
+
12
+ option ['-p', '--ports'], 'PORTS', "Publish a service's port to the host", multivalued: true
13
+ option ['-e', '--env'], 'ENV', 'Set environment variables', multivalued: true
14
+ option ['-l', '--link'], 'LINK', 'Add link to another service in the form of name:alias', multivalued: true
15
+ option ['-v', '--volume'], 'VOLUME', 'Add a volume or bind mount it from the host', multivalued: true
16
+ option '--volumes-from', 'VOLUMES_FROM', 'Mount volumes from another container', multivalued: true
17
+ option ['-a', '--affinity'], 'AFFINITY', 'Set service affinity', multivalued: true
18
+ option ['-c', '--cpu-shares'], 'CPU_SHARES', 'CPU shares (relative weight)'
19
+ option ['-m', '--memory'], 'MEMORY', 'Memory limit (format: <number><optional unit>, where unit = b, k, m or g)'
20
+ option ['--memory-swap'], 'MEMORY_SWAP', "Total memory usage (memory + swap), set \'-1\' to disable swap (format: <number><optional unit>, where unit = b, k, m or g)"
21
+ option '--cmd', 'CMD', 'Command to execute'
22
+ option '--instances', 'INSTANCES', 'How many instances should be deployed'
23
+ option ['-u', '--user'], 'USER', 'Username who executes first process inside container'
24
+ option '--stateful', :flag, 'Set service as stateful', default: false
25
+ option '--privileged', :flag, 'Give extended privileges to this service', default: false
26
+ option '--cap-add', 'CAP_ADD', 'Add capabitilies', multivalued: true
27
+ option '--cap-drop', 'CAP_DROP', 'Drop capabitilies', multivalued: true
28
+ option '--net', 'NET', 'Network mode'
29
+ option '--log-driver', 'LOG_DRIVER', 'Set logging driver'
30
+ option '--log-opt', 'LOG_OPT', 'Add logging options', multivalued: true
31
+ option '--deploy-strategy', 'STRATEGY', 'Deploy strategy to use (ha, daemon, random)'
32
+ option '--deploy-wait-for-port', 'PORT', 'Wait for port to respond when deploying'
33
+ option '--deploy-min-health', 'FLOAT', 'The minimum percentage (0.0 - 1.0) of healthy instances that do not sacrifice overall service availability while deploying'
34
+ option '--deploy-interval', 'TIME', 'Auto-deploy with given interval (format: <number><unit>, where unit = min, h, d)'
35
+ option '--pid', 'PID', 'Pid namespace to use'
36
+ option '--secret', 'SECRET', 'Import secret from Vault (format: <secret>:<name>:<env>)', multivalued: true
37
+
38
+ def execute
39
+ require_api_url
40
+ token = require_token
41
+ data = {
42
+ name: name,
43
+ image: image,
44
+ stateful: stateful?
45
+ }
46
+ data.merge!(parse_service_data_from_options)
47
+ create_service(token, current_stack, data)
48
+ end
49
+
50
+ ##
51
+ # parse given options to hash
52
+ # @return [Hash]
53
+ def parse_service_data_from_options
54
+ data = {}
55
+ data[:ports] = parse_ports(ports_list) unless ports_list.empty?
56
+ data[:links] = parse_links(link_list) unless link_list.empty?
57
+ data[:volumes] = volume_list unless volume_list.empty?
58
+ data[:volumes_from] = volumes_from_list unless volumes_from_list.empty?
59
+ data[:memory] = parse_memory(memory) if memory
60
+ data[:memory_swap] = parse_memory(memory_swap) if memory_swap
61
+ data[:cpu_shares] = cpu_shares if cpu_shares
62
+ data[:affinity] = affinity_list unless affinity_list.empty?
63
+ data[:env] = env_list unless env_list.empty?
64
+ data[:secrets] = parse_secrets(secret_list)
65
+ data[:container_count] = instances if instances
66
+ data[:cmd] = cmd.split(' ') if cmd
67
+ data[:user] = user if user
68
+ data[:image] = parse_image(image) if image
69
+ data[:privileged] = privileged?
70
+ data[:cap_add] = cap_add_list unless cap_add_list.empty?
71
+ data[:cap_drop] = cap_drop_list unless cap_drop_list.empty?
72
+ data[:net] = net if net
73
+ data[:log_driver] = log_driver if log_driver
74
+ data[:log_opts] = parse_log_opts(log_opt_list)
75
+ data[:strategy] = deploy_strategy if deploy_strategy
76
+ data[:deploy_opts] = {}
77
+ if deploy_min_health
78
+ data[:deploy_opts][:min_health] = deploy_min_health.to_f
79
+ end
80
+ if deploy_wait_for_port
81
+ data[:deploy_opts][:wait_for_port] = deploy_wait_for_port.to_i
82
+ end
83
+ if deploy_interval
84
+ data[:deploy_opts][:interval] = parse_relative_time(deploy_interval)
85
+ end
86
+ data[:pid] = pid if pid
87
+ data
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class DeleteCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+
11
+ def execute
12
+ puts "DEPRECATION WARNING: Support for 'cm service delete' will be dropped. Use 'cm service remove' instead.".colorize(:red)
13
+ require_api_url
14
+ token = require_token
15
+
16
+ result = client(token).delete("services/#{parse_service_id(name)}")
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class DeployCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ option '--force-deploy', :flag, 'Force deploy even if service does not have any changes'
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ service_id = name
16
+ data = {}
17
+ data[:force] = true if force_deploy?
18
+ deploy_service(token, service_id, data)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module Central::Cli::Services
2
+ require_relative 'envs/add_command'
3
+ require_relative 'envs/list_command'
4
+ require_relative 'envs/remove_command'
5
+
6
+ class EnvCommand < Clamp::Command
7
+ subcommand %w(list ls), 'List service environment variables', Envs::ListCommand
8
+ subcommand 'add', 'Add environment variable', Envs::AddCommand
9
+ subcommand %w(remove rm), 'Remove environment variable', Envs::RemoveCommand
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../services_helper'
2
+
3
+ module Central::Cli::Services::Envs
4
+ class AddCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include Central::Cli::Services::ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ parameter 'ENV', 'Environment variable'
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ data = { env: env }
16
+ result = client(token).post("services/#{parse_service_id(name)}/envs", data)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ require_relative '../services_helper'
2
+
3
+ module Central::Cli::Services::Envs
4
+ class ListCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include Central::Cli::Services::ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+ service = client(token).get("services/#{parse_service_id(name)}")
15
+ service['env'].sort.each do |env|
16
+ puts env
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../services_helper'
2
+
3
+ module Central::Cli::Services::Envs
4
+ class RemoveCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include Central::Cli::Services::ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+ parameter 'ENV', 'Environment variable name'
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+ client(token).delete("services/#{parse_service_id(name)}/envs/#{env}")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'services_helper'
2
+
3
+ module Central::Cli::Services
4
+ class EnvsCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include ServicesHelper
8
+
9
+ parameter 'NAME', 'Service name'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+ service = client(token).get("services/#{parse_service_id(name)}")
15
+ service['env'].each do |env|
16
+ puts env
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../stack_options'
2
+ require_relative 'services_helper'
3
+
4
+ module Central::Cli::Services
5
+ class LinkCommand < Clamp::Command
6
+ include Central::Cli::Common
7
+ include Central::Cli::StackOptions
8
+ include ServicesHelper
9
+
10
+ parameter 'NAME', 'Service name'
11
+ parameter 'TARGET', 'Link target service name'
12
+
13
+ def execute
14
+ require_api_url
15
+ token = require_token
16
+
17
+ service = client(token).get("services/#{parse_service_id(name)}")
18
+ existing_targets = service['links'].map { |l| l['stack_service_id'].split('/')[1] }
19
+ abort("Service is already linked to #{target}") if existing_targets.include?(target.to_s)
20
+ links = service['links'].map { |l| { name: l['stack_service_id'].split('/')[1], alias: l['alias'] } }
21
+ links << { name: target.to_s, alias: target.to_s }
22
+ data = { links: links }
23
+ update_service(token, name, data)
24
+ end
25
+ end
26
+ end