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,26 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class CreateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter 'NAME', 'Stack name'
9
+ option '--initial-size', 'INITIAL_SIZE', 'Initial stack size (number of nodes)', default: 1
10
+
11
+ def execute
12
+ require_api_url
13
+
14
+ token = require_token
15
+ payload = {
16
+ name: name
17
+ }
18
+ payload[:initial_size] = initial_size if initial_size
19
+ stack = client(token).post('stacks', payload)
20
+ if stack
21
+ self.current_stack = stack
22
+ puts "Using stack: #{stack['name'].cyan}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class CurrentCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ option ['--name'], :flag, 'Show name only', default: false
9
+
10
+ def execute
11
+ require_api_url
12
+ if current_stack.nil?
13
+ abort 'No stack selected. To select stack, please run: cm stack use <stack name>'
14
+ else
15
+
16
+ stack = client(require_token).get("stacks/#{current_stack}")
17
+ if name?
18
+ puts (stack['name']).to_s
19
+ else
20
+ print_stack(stack)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class EnvCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter '[NAME]', 'Stack name'
9
+ option ['-e', '--export'], :flag, 'Add export', default: false
10
+
11
+ def execute
12
+ require_api_url
13
+
14
+ name_or_current = name.nil? ? current_stack : name
15
+
16
+ if name_or_current.nil?
17
+ abort 'No stack selected. Use: cm stack env <name>, or select a stack with: cm stack use <name>'
18
+ else
19
+ stack = find_stack_by_name(name_or_current)
20
+ abort('Stack not found'.colorize(:red)) unless stack
21
+
22
+ prefix = export? ? 'export ' : ''
23
+
24
+ server = settings['servers'].find { |s| s['name'] == settings['current_server'] }
25
+ if server
26
+ puts "#{prefix}CENTRAL_URI=#{server['url'].sub('http', 'ws')}"
27
+ puts "#{prefix}CENTRAL_TOKEN=#{server['token']}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,35 @@
1
+ require_relative 'common'
2
+ require 'tty'
3
+
4
+ module Central::Cli::Stacks
5
+ class ListCommand < Clamp::Command
6
+ include Central::Cli::Common
7
+ include Common
8
+
9
+ def execute
10
+ require_api_url
11
+
12
+ if stacks['stacks'].size == 0
13
+ puts "You don't have any stacks yet. Create first one with 'cm stack create' command".colorize(:yellow)
14
+ end
15
+
16
+ header = %w(Name Nodes Services Users)
17
+ rows = []
18
+
19
+ stacks['stacks'].each do |stack|
20
+ name = if stack['id'] == current_stack
21
+ "#{stack['name']} *"
22
+ else
23
+ stack['name']
24
+ end
25
+ rows << [name, stack['node_count'], stack['service_count'], stack['user_count']]
26
+ end
27
+
28
+ ttable = TTY::Table.new header: header, rows: Array.new(rows)
29
+ renderer = TTY::Table::Renderer::Unicode.new(ttable)
30
+ renderer.border.style = :cyan
31
+ renderer.padding = [0, 1, 0, 1]
32
+ puts renderer.render
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'common'
2
+ require 'tty'
3
+
4
+ module Central::Cli::Stacks
5
+ class ListUsersCommand < Clamp::Command
6
+ include Central::Cli::Common
7
+ include Common
8
+
9
+ def execute
10
+ require_api_url
11
+ token = require_token
12
+ result = client(token).get("stacks/#{current_stack}/users")
13
+ header = %w(Email Name)
14
+ rows = []
15
+ result['users'].each do |user|
16
+ rows << [user['email'], user['name']]
17
+ end
18
+
19
+ ttable = TTY::Table.new header: header, rows: Array.new(rows)
20
+ renderer = TTY::Table::Renderer::Unicode.new(ttable)
21
+ renderer.border.style = :cyan
22
+ renderer.padding = [0, 1, 0, 1]
23
+ puts renderer.render
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,81 @@
1
+ module Central::Cli::Stacks
2
+ class LogsCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ option ['-t', '--tail'], :flag, 'Tail (follow) logs', default: false
6
+ option '--lines', 'LINES', 'Number of lines to show from the end of the logs'
7
+ option '--since', 'SINCE', 'Show logs since given timestamp'
8
+ option '--node', 'NODE', 'Filter by node name', multivalued: true
9
+ option '--service', 'SERVICE', 'Filter by service name', multivalued: true
10
+ option ['-c', '--container'], 'CONTAINER', 'Filter by container', multivalued: true
11
+
12
+ def execute
13
+ require_api_url
14
+ token = require_token
15
+
16
+ query_params = {}
17
+ query_params[:nodes] = node_list.join(',') unless node_list.empty?
18
+ query_params[:services] = service_list.join(',') unless service_list.empty?
19
+ query_params[:containers] = container_list.join(',') unless container_list.empty?
20
+ query_params[:limit] = lines if lines
21
+ query_params[:since] = since if since
22
+
23
+ if tail?
24
+ @buffer = ''
25
+ query_params[:follow] = 1
26
+ stream_logs(token, query_params)
27
+ else
28
+ list_logs(token, query_params)
29
+ end
30
+ end
31
+
32
+ def list_logs(token, query_params)
33
+ result = client(token).get("stacks/#{current_stack}/container_logs", query_params)
34
+ result['logs'].each do |log|
35
+ color = color_for_container(log['name'])
36
+ prefix = ''
37
+ prefix << "#{log['created_at']} "
38
+ prefix << "#{log['name']}:"
39
+ prefix = prefix.colorize(color)
40
+ puts "#{prefix} #{log['data']}"
41
+ end
42
+ end
43
+
44
+ def stream_logs(token, query_params)
45
+ streamer = lambda do |chunk, _remaining_bytes, _total_bytes|
46
+ begin
47
+ chunk = @buffer + chunk unless @buffer.empty?
48
+ log = JSON.parse(chunk) unless chunk.empty?
49
+ @buffer = ''
50
+ rescue => exc
51
+ @buffer << chunk
52
+ end
53
+ if log
54
+ color = color_for_container(log['name'])
55
+ puts "#{log['name'].colorize(color)} | #{log['data']}"
56
+ end
57
+ end
58
+
59
+ result = client(token).get_stream(
60
+ "stacks/#{current_stack}/container_logs", streamer, query_params
61
+ )
62
+ end
63
+
64
+ def color_for_container(container_id)
65
+ color_maps[container_id] = colors.shift unless color_maps[container_id]
66
+ color_maps[container_id].to_sym
67
+ end
68
+
69
+ def color_maps
70
+ @color_maps ||= {}
71
+ end
72
+
73
+ def colors
74
+ if @colors.nil? || @colors.size == 0
75
+ @colors = [:green, :yellow, :magenta, :cyan, :red,
76
+ :light_green, :light_yellow, :ligh_magenta, :light_cyan, :light_red]
77
+ end
78
+ @colors
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class RemoveCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter 'NAME', 'Stack name'
9
+
10
+ def execute
11
+ require_api_url
12
+ token = require_token
13
+ stack = find_stack_by_name(name)
14
+
15
+ if !stack.nil?
16
+ response = client(token).delete("stacks/#{stack['id']}")
17
+ if response
18
+ clear_current_stack if stack['id'] == current_stack
19
+ puts "removed #{stack['name'].cyan}"
20
+ end
21
+ else
22
+ abort "Could not resolve stack by name [#{name}]. For a list of existing stacks please run: cm stack list".colorize(:red)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class RemoveUserCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include Common
8
+
9
+ parameter 'EMAIL', 'Email address'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+ result = client(token).delete("stacks/#{current_stack}/users/#{email}")
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class ShowCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter 'NAME', 'Stack name'
9
+
10
+ def execute
11
+ require_api_url
12
+
13
+ stack = find_stack_by_name(name)
14
+ abort('Stack not found'.colorize(:red)) unless stack
15
+
16
+ print_stack(stack)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Central::Cli::Stacks::TrustedSubnets
2
+ class AddCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ parameter 'NAME', 'Stack name'
6
+ parameter 'SUBNET', 'Trusted subnet'
7
+
8
+ def execute
9
+ require_api_url
10
+ token = require_token
11
+ stack = client(token).get("stacks/#{name}")
12
+ data = { trusted_subnets: stack['trusted_subnets'] + [subnet] }
13
+ client(token).put("stacks/#{name}", data)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module Central::Cli::Stacks::TrustedSubnets
2
+ class ListCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ parameter 'NAME', 'Stack name'
6
+
7
+ def execute
8
+ require_api_url
9
+ token = require_token
10
+ stack = client(token).get("stacks/#{current_stack}")
11
+ trusted_subnets = stack['trusted_subnets'] || []
12
+ trusted_subnets.each do |subnet|
13
+ puts subnet
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module Central::Cli::Stacks::TrustedSubnets
2
+ class RemoveCommand < Clamp::Command
3
+ include Central::Cli::Common
4
+
5
+ parameter 'NAME', 'Stack name'
6
+ parameter 'SUBNET', 'Trusted subnet'
7
+
8
+ def execute
9
+ require_api_url
10
+ token = require_token
11
+ stack = client(token).get("stacks/#{name}")
12
+ trusted_subnets = stack['trusted_subnets'] || []
13
+ unless trusted_subnets.delete(subnet)
14
+ abort("Stack does not have trusted subnet #{subnet}")
15
+ end
16
+ data = { trusted_subnets: trusted_subnets }
17
+ client(token).put("stacks/#{name}", data)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class UpdateCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter 'NAME', 'Stack name'
9
+ option '--statsd-server', 'STATSD_SERVER', 'Statsd server address (host:port)'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+ payload = {}
15
+ if statsd_server
16
+ server, port = statsd_server.split(':')
17
+ payload[:stats] = {
18
+ statsd: {
19
+ server: server,
20
+ port: port || 8125
21
+ }
22
+ }
23
+ end
24
+ client(token).put("stacks/#{name}", payload)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ require_relative 'common'
2
+
3
+ module Central::Cli::Stacks
4
+ class UseCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Common
7
+
8
+ parameter 'NAME', 'Stack name to use'
9
+
10
+ def execute
11
+ require_api_url
12
+ stack = find_stack_by_name(name)
13
+ if !stack.nil?
14
+ self.current_stack = stack
15
+ puts "Using stack: #{stack['name'].cyan}"
16
+ else
17
+ abort "Could not resolve stack by name [#{name}]. For a list of existing stacks please run: cm stack list".colorize(:red)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module Central::Cli::Stacks
2
+ require_relative 'users/list_command'
3
+ require_relative 'users/add_command'
4
+ require_relative 'users/remove_command'
5
+
6
+ class UserCommand < Clamp::Command
7
+ subcommand %w(list ls), 'List stack users', Users::ListCommand
8
+ subcommand 'add', 'Add user to stack', Users::AddCommand
9
+ subcommand %w(remove rm), 'Remove user from stack', Users::RemoveCommand
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../common'
2
+
3
+ module Central::Cli::Stacks::Users
4
+ class AddCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::StackOptions
7
+ include Central::Cli::Stacks::Common
8
+
9
+ parameter 'EMAIL', 'Email address'
10
+
11
+ def execute
12
+ require_api_url
13
+ token = require_token
14
+ data = { email: email }
15
+ client(token).post("stacks/#{current_stack}/users", data)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../common'
2
+
3
+ module Central::Cli::Stacks::Users
4
+ class ListCommand < Clamp::Command
5
+ include Central::Cli::Common
6
+ include Central::Cli::Stacks::Common
7
+
8
+ def execute
9
+ require_api_url
10
+ token = require_token
11
+ result = client(token).get("stacks/#{current_stack}/users")
12
+ puts '%-40s %-40s' % %w(Email Name)
13
+ result['users'].each do |user|
14
+ puts '%-40.40s %-40.40s' % [user['email'], user['name']]
15
+ end
16
+ end
17
+ end
18
+ end