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,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,7 @@
1
+ module Central::Cli::Auth
2
+ require_relative 'aws/create_command'
3
+
4
+ class AwsCommand < Clamp::Command
5
+ subcommand 'create', 'Create a new AWS oAuth Server', Aws::CreateCommand
6
+ end
7
+ 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