krates 1.6.0

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 (293) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +212 -0
  3. data/LOGO +10 -0
  4. data/VERSION +1 -0
  5. data/bin/krates +23 -0
  6. data/lib/kontena/autoload_core.rb +19 -0
  7. data/lib/kontena/callback.rb +60 -0
  8. data/lib/kontena/callbacks/.gitkeep +0 -0
  9. data/lib/kontena/callbacks/auth/01_list_and_select_grid_after_master_auth.rb +26 -0
  10. data/lib/kontena/callbacks/master/01_clear_current_master_after_terminate.rb +19 -0
  11. data/lib/kontena/callbacks/master/deploy/01_show_logo_before_deploy.rb +14 -0
  12. data/lib/kontena/callbacks/master/deploy/04_default_master_version.rb +18 -0
  13. data/lib/kontena/callbacks/master/deploy/05_before_deploy_configuration_wizard.rb +105 -0
  14. data/lib/kontena/callbacks/master/deploy/40_install_ssl_certificate_after_deploy.rb +32 -0
  15. data/lib/kontena/callbacks/master/deploy/50_authenticate_after_deploy.rb +66 -0
  16. data/lib/kontena/callbacks/master/deploy/55_create_initial_grid_after_deploy.rb +21 -0
  17. data/lib/kontena/callbacks/master/deploy/56_set_server_provider_after_deploy.rb +24 -0
  18. data/lib/kontena/callbacks/master/deploy/60_configure_auth_provider_after_deploy.rb +31 -0
  19. data/lib/kontena/callbacks/master/deploy/70_invite_self_after_deploy.rb +95 -0
  20. data/lib/kontena/callbacks/master/deploy/90_proptip_after_deploy.rb +33 -0
  21. data/lib/kontena/cli/browser_launcher.rb +61 -0
  22. data/lib/kontena/cli/bytes_helper.rb +40 -0
  23. data/lib/kontena/cli/certificate/authorize_command.rb +107 -0
  24. data/lib/kontena/cli/certificate/common.rb +16 -0
  25. data/lib/kontena/cli/certificate/domain_authorization/list_command.rb +24 -0
  26. data/lib/kontena/cli/certificate/domain_authorization/remove_authorization_command.rb +25 -0
  27. data/lib/kontena/cli/certificate/domain_authorize_command.rb +7 -0
  28. data/lib/kontena/cli/certificate/export_command.rb +28 -0
  29. data/lib/kontena/cli/certificate/get_command.rb +33 -0
  30. data/lib/kontena/cli/certificate/import_command.rb +61 -0
  31. data/lib/kontena/cli/certificate/list_command.rb +75 -0
  32. data/lib/kontena/cli/certificate/register_command.rb +30 -0
  33. data/lib/kontena/cli/certificate/remove_command.rb +23 -0
  34. data/lib/kontena/cli/certificate/request_command.rb +20 -0
  35. data/lib/kontena/cli/certificate/show_command.rb +22 -0
  36. data/lib/kontena/cli/certificate_command.rb +18 -0
  37. data/lib/kontena/cli/cloud/login_command.rb +186 -0
  38. data/lib/kontena/cli/cloud/logout_command.rb +14 -0
  39. data/lib/kontena/cli/cloud/master/add_command.rb +156 -0
  40. data/lib/kontena/cli/cloud/master/list_command.rb +35 -0
  41. data/lib/kontena/cli/cloud/master/remove_command.rb +68 -0
  42. data/lib/kontena/cli/cloud/master/show_command.rb +21 -0
  43. data/lib/kontena/cli/cloud/master/update_command.rb +52 -0
  44. data/lib/kontena/cli/cloud/master_command.rb +14 -0
  45. data/lib/kontena/cli/cloud_command.rb +13 -0
  46. data/lib/kontena/cli/common.rb +360 -0
  47. data/lib/kontena/cli/config.rb +662 -0
  48. data/lib/kontena/cli/container_command.rb +10 -0
  49. data/lib/kontena/cli/containers/exec_command.rb +31 -0
  50. data/lib/kontena/cli/containers/inspect_command.rb +16 -0
  51. data/lib/kontena/cli/containers/list_command.rb +51 -0
  52. data/lib/kontena/cli/containers/logs_command.rb +19 -0
  53. data/lib/kontena/cli/etcd/common.rb +8 -0
  54. data/lib/kontena/cli/etcd/get_command.rb +26 -0
  55. data/lib/kontena/cli/etcd/health_command.rb +53 -0
  56. data/lib/kontena/cli/etcd/list_command.rb +36 -0
  57. data/lib/kontena/cli/etcd/mkdir_command.rb +23 -0
  58. data/lib/kontena/cli/etcd/remove_command.rb +29 -0
  59. data/lib/kontena/cli/etcd/set_command.rb +24 -0
  60. data/lib/kontena/cli/etcd_command.rb +12 -0
  61. data/lib/kontena/cli/external_registries/add_command.rb +25 -0
  62. data/lib/kontena/cli/external_registries/list_command.rb +23 -0
  63. data/lib/kontena/cli/external_registries/remove_command.rb +17 -0
  64. data/lib/kontena/cli/external_registry_command.rb +9 -0
  65. data/lib/kontena/cli/grid_command.rb +21 -0
  66. data/lib/kontena/cli/grid_options.rb +12 -0
  67. data/lib/kontena/cli/grids/audit_log_command.rb +22 -0
  68. data/lib/kontena/cli/grids/cloud_config_command.rb +53 -0
  69. data/lib/kontena/cli/grids/common.rb +182 -0
  70. data/lib/kontena/cli/grids/create_command.rb +48 -0
  71. data/lib/kontena/cli/grids/current_command.rb +25 -0
  72. data/lib/kontena/cli/grids/env_command.rb +32 -0
  73. data/lib/kontena/cli/grids/events_command.rb +50 -0
  74. data/lib/kontena/cli/grids/health_command.rb +69 -0
  75. data/lib/kontena/cli/grids/list_command.rb +59 -0
  76. data/lib/kontena/cli/grids/logs_command.rb +35 -0
  77. data/lib/kontena/cli/grids/remove_command.rb +31 -0
  78. data/lib/kontena/cli/grids/show_command.rb +25 -0
  79. data/lib/kontena/cli/grids/trusted_subnet_command.rb +10 -0
  80. data/lib/kontena/cli/grids/trusted_subnets/add_command.rb +18 -0
  81. data/lib/kontena/cli/grids/trusted_subnets/list_command.rb +18 -0
  82. data/lib/kontena/cli/grids/trusted_subnets/remove_command.rb +26 -0
  83. data/lib/kontena/cli/grids/update_command.rb +35 -0
  84. data/lib/kontena/cli/grids/use_command.rb +26 -0
  85. data/lib/kontena/cli/grids/user_command.rb +9 -0
  86. data/lib/kontena/cli/grids/users/add_command.rb +18 -0
  87. data/lib/kontena/cli/grids/users/list_command.rb +20 -0
  88. data/lib/kontena/cli/grids/users/remove_command.rb +20 -0
  89. data/lib/kontena/cli/helpers/exec_helper.rb +209 -0
  90. data/lib/kontena/cli/helpers/health_helper.rb +65 -0
  91. data/lib/kontena/cli/helpers/log_helper.rb +113 -0
  92. data/lib/kontena/cli/helpers/time_helper.rb +29 -0
  93. data/lib/kontena/cli/localhost_web_server.rb +113 -0
  94. data/lib/kontena/cli/log_formatters/compact.rb +65 -0
  95. data/lib/kontena/cli/log_formatters/strip_color.rb +13 -0
  96. data/lib/kontena/cli/logout_command.rb +10 -0
  97. data/lib/kontena/cli/master/audit_log_command.rb +19 -0
  98. data/lib/kontena/cli/master/config/export_command.rb +46 -0
  99. data/lib/kontena/cli/master/config/get_command.rb +26 -0
  100. data/lib/kontena/cli/master/config/import_command.rb +67 -0
  101. data/lib/kontena/cli/master/config/set_command.rb +19 -0
  102. data/lib/kontena/cli/master/config/unset_command.rb +20 -0
  103. data/lib/kontena/cli/master/config_command.rb +17 -0
  104. data/lib/kontena/cli/master/create_command.rb +74 -0
  105. data/lib/kontena/cli/master/current_command.rb +25 -0
  106. data/lib/kontena/cli/master/init_cloud_command.rb +45 -0
  107. data/lib/kontena/cli/master/join_command.rb +22 -0
  108. data/lib/kontena/cli/master/list_command.rb +24 -0
  109. data/lib/kontena/cli/master/login_command.rb +331 -0
  110. data/lib/kontena/cli/master/logout_command.rb +25 -0
  111. data/lib/kontena/cli/master/remove_command.rb +55 -0
  112. data/lib/kontena/cli/master/ssh_command.rb +72 -0
  113. data/lib/kontena/cli/master/token/common.rb +29 -0
  114. data/lib/kontena/cli/master/token/create_command.rb +50 -0
  115. data/lib/kontena/cli/master/token/current_command.rb +45 -0
  116. data/lib/kontena/cli/master/token/list_command.rb +39 -0
  117. data/lib/kontena/cli/master/token/remove_command.rb +19 -0
  118. data/lib/kontena/cli/master/token/show_command.rb +34 -0
  119. data/lib/kontena/cli/master/token_command.rb +13 -0
  120. data/lib/kontena/cli/master/use_command.rb +31 -0
  121. data/lib/kontena/cli/master/user/invite_command.rb +51 -0
  122. data/lib/kontena/cli/master/user/list_command.rb +29 -0
  123. data/lib/kontena/cli/master/user/remove_command.rb +24 -0
  124. data/lib/kontena/cli/master/user/role/add_command.rb +29 -0
  125. data/lib/kontena/cli/master/user/role/remove_command.rb +27 -0
  126. data/lib/kontena/cli/master/user/role_command.rb +6 -0
  127. data/lib/kontena/cli/master/user_command.rb +9 -0
  128. data/lib/kontena/cli/master_command.rb +21 -0
  129. data/lib/kontena/cli/node_command.rb +17 -0
  130. data/lib/kontena/cli/nodes/create_command.rb +25 -0
  131. data/lib/kontena/cli/nodes/env_command.rb +37 -0
  132. data/lib/kontena/cli/nodes/health_command.rb +47 -0
  133. data/lib/kontena/cli/nodes/label_command.rb +10 -0
  134. data/lib/kontena/cli/nodes/labels/add_command.rb +18 -0
  135. data/lib/kontena/cli/nodes/labels/list_command.rb +19 -0
  136. data/lib/kontena/cli/nodes/labels/remove_command.rb +32 -0
  137. data/lib/kontena/cli/nodes/list_command.rb +97 -0
  138. data/lib/kontena/cli/nodes/remove_command.rb +34 -0
  139. data/lib/kontena/cli/nodes/reset_token_command.rb +34 -0
  140. data/lib/kontena/cli/nodes/show_command.rb +56 -0
  141. data/lib/kontena/cli/nodes/ssh_command.rb +63 -0
  142. data/lib/kontena/cli/nodes/update_command.rb +31 -0
  143. data/lib/kontena/cli/plugin_command.rb +12 -0
  144. data/lib/kontena/cli/plugins/common.rb +8 -0
  145. data/lib/kontena/cli/plugins/install_command.rb +42 -0
  146. data/lib/kontena/cli/plugins/list_command.rb +31 -0
  147. data/lib/kontena/cli/plugins/search_command.rb +25 -0
  148. data/lib/kontena/cli/plugins/show_command.rb +17 -0
  149. data/lib/kontena/cli/plugins/uninstall_command.rb +31 -0
  150. data/lib/kontena/cli/plugins/upgrade_command.rb +60 -0
  151. data/lib/kontena/cli/registry/create_command.rb +151 -0
  152. data/lib/kontena/cli/registry/remove_command.rb +21 -0
  153. data/lib/kontena/cli/registry_command.rb +8 -0
  154. data/lib/kontena/cli/service_command.rb +28 -0
  155. data/lib/kontena/cli/services/container_command.rb +8 -0
  156. data/lib/kontena/cli/services/containers_command.rb +39 -0
  157. data/lib/kontena/cli/services/create_command.rb +105 -0
  158. data/lib/kontena/cli/services/deploy_command.rb +25 -0
  159. data/lib/kontena/cli/services/env_command.rb +9 -0
  160. data/lib/kontena/cli/services/envs/add_command.rb +21 -0
  161. data/lib/kontena/cli/services/envs/list_command.rb +22 -0
  162. data/lib/kontena/cli/services/envs/remove_command.rb +22 -0
  163. data/lib/kontena/cli/services/events_command.rb +36 -0
  164. data/lib/kontena/cli/services/exec_command.rb +107 -0
  165. data/lib/kontena/cli/services/link_command.rb +35 -0
  166. data/lib/kontena/cli/services/list_command.rb +66 -0
  167. data/lib/kontena/cli/services/logs_command.rb +33 -0
  168. data/lib/kontena/cli/services/monitor_command.rb +58 -0
  169. data/lib/kontena/cli/services/remove_command.rb +60 -0
  170. data/lib/kontena/cli/services/restart_command.rb +19 -0
  171. data/lib/kontena/cli/services/scale_command.rb +21 -0
  172. data/lib/kontena/cli/services/secret_command.rb +8 -0
  173. data/lib/kontena/cli/services/secrets/link_command.rb +26 -0
  174. data/lib/kontena/cli/services/secrets/unlink_command.rb +28 -0
  175. data/lib/kontena/cli/services/services_helper.rb +579 -0
  176. data/lib/kontena/cli/services/show_command.rb +26 -0
  177. data/lib/kontena/cli/services/start_command.rb +21 -0
  178. data/lib/kontena/cli/services/stats_command.rb +87 -0
  179. data/lib/kontena/cli/services/stop_command.rb +21 -0
  180. data/lib/kontena/cli/services/unlink_command.rb +30 -0
  181. data/lib/kontena/cli/services/update_command.rb +94 -0
  182. data/lib/kontena/cli/spinner.rb +205 -0
  183. data/lib/kontena/cli/stack_command.rb +21 -0
  184. data/lib/kontena/cli/stacks/build_command.rb +125 -0
  185. data/lib/kontena/cli/stacks/common.rb +209 -0
  186. data/lib/kontena/cli/stacks/deploy_command.rb +37 -0
  187. data/lib/kontena/cli/stacks/events_command.rb +33 -0
  188. data/lib/kontena/cli/stacks/inspect_command.rb +17 -0
  189. data/lib/kontena/cli/stacks/install_command.rb +95 -0
  190. data/lib/kontena/cli/stacks/label_command.rb +10 -0
  191. data/lib/kontena/cli/stacks/labels/add_command.rb +21 -0
  192. data/lib/kontena/cli/stacks/labels/common.rb +19 -0
  193. data/lib/kontena/cli/stacks/labels/list_command.rb +21 -0
  194. data/lib/kontena/cli/stacks/labels/remove_command.rb +21 -0
  195. data/lib/kontena/cli/stacks/list_command.rb +154 -0
  196. data/lib/kontena/cli/stacks/logs_command.rb +35 -0
  197. data/lib/kontena/cli/stacks/monitor_command.rb +93 -0
  198. data/lib/kontena/cli/stacks/registry/create_command.rb +24 -0
  199. data/lib/kontena/cli/stacks/registry/make_private_command.rb +24 -0
  200. data/lib/kontena/cli/stacks/registry/make_public_command.rb +24 -0
  201. data/lib/kontena/cli/stacks/registry/pull_command.rb +28 -0
  202. data/lib/kontena/cli/stacks/registry/push_command.rb +40 -0
  203. data/lib/kontena/cli/stacks/registry/remove_command.rb +30 -0
  204. data/lib/kontena/cli/stacks/registry/search_command.rb +42 -0
  205. data/lib/kontena/cli/stacks/registry/show_command.rb +65 -0
  206. data/lib/kontena/cli/stacks/registry_command.rb +12 -0
  207. data/lib/kontena/cli/stacks/remove_command.rb +80 -0
  208. data/lib/kontena/cli/stacks/restart_command.rb +24 -0
  209. data/lib/kontena/cli/stacks/service_generator.rb +131 -0
  210. data/lib/kontena/cli/stacks/service_generator_v2.rb +27 -0
  211. data/lib/kontena/cli/stacks/show_command.rb +168 -0
  212. data/lib/kontena/cli/stacks/stack_name.rb +71 -0
  213. data/lib/kontena/cli/stacks/stacks_helper.rb +83 -0
  214. data/lib/kontena/cli/stacks/stop_command.rb +24 -0
  215. data/lib/kontena/cli/stacks/upgrade_command.rb +264 -0
  216. data/lib/kontena/cli/stacks/validate_command.rb +75 -0
  217. data/lib/kontena/cli/stacks/yaml/custom_validators/affinities_validator.rb +19 -0
  218. data/lib/kontena/cli/stacks/yaml/custom_validators/build_validator.rb +22 -0
  219. data/lib/kontena/cli/stacks/yaml/custom_validators/certificates_validator.rb +22 -0
  220. data/lib/kontena/cli/stacks/yaml/custom_validators/extends_validator.rb +22 -0
  221. data/lib/kontena/cli/stacks/yaml/custom_validators/hooks_validator.rb +102 -0
  222. data/lib/kontena/cli/stacks/yaml/custom_validators/secrets_validator.rb +22 -0
  223. data/lib/kontena/cli/stacks/yaml/opto/certificates_resolver.rb +37 -0
  224. data/lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb +78 -0
  225. data/lib/kontena/cli/stacks/yaml/opto/service_instances_resolver.rb +25 -0
  226. data/lib/kontena/cli/stacks/yaml/opto/service_link_resolver.rb +80 -0
  227. data/lib/kontena/cli/stacks/yaml/opto/vault_cert_prompt_resolver.rb +39 -0
  228. data/lib/kontena/cli/stacks/yaml/opto/vault_resolver.rb +13 -0
  229. data/lib/kontena/cli/stacks/yaml/opto/vault_setter.rb +12 -0
  230. data/lib/kontena/cli/stacks/yaml/opto.rb +16 -0
  231. data/lib/kontena/cli/stacks/yaml/reader.rb +525 -0
  232. data/lib/kontena/cli/stacks/yaml/service_extender.rb +65 -0
  233. data/lib/kontena/cli/stacks/yaml/stack_file_loader/file_loader.rb +41 -0
  234. data/lib/kontena/cli/stacks/yaml/stack_file_loader/registry_loader.rb +24 -0
  235. data/lib/kontena/cli/stacks/yaml/stack_file_loader/uri_loader.rb +23 -0
  236. data/lib/kontena/cli/stacks/yaml/stack_file_loader.rb +152 -0
  237. data/lib/kontena/cli/stacks/yaml/validations.rb +119 -0
  238. data/lib/kontena/cli/stacks/yaml/validator_v3.rb +164 -0
  239. data/lib/kontena/cli/subcommand_loader.rb +83 -0
  240. data/lib/kontena/cli/table_generator.rb +128 -0
  241. data/lib/kontena/cli/vault/export_command.rb +24 -0
  242. data/lib/kontena/cli/vault/import_command.rb +75 -0
  243. data/lib/kontena/cli/vault/list_command.rb +37 -0
  244. data/lib/kontena/cli/vault/read_command.rb +27 -0
  245. data/lib/kontena/cli/vault/remove_command.rb +23 -0
  246. data/lib/kontena/cli/vault/update_command.rb +24 -0
  247. data/lib/kontena/cli/vault/write_command.rb +23 -0
  248. data/lib/kontena/cli/vault_command.rb +13 -0
  249. data/lib/kontena/cli/version.rb +10 -0
  250. data/lib/kontena/cli/version_command.rb +20 -0
  251. data/lib/kontena/cli/volume_command.rb +9 -0
  252. data/lib/kontena/cli/volumes/create_command.rb +42 -0
  253. data/lib/kontena/cli/volumes/list_command.rb +29 -0
  254. data/lib/kontena/cli/volumes/remove_command.rb +29 -0
  255. data/lib/kontena/cli/volumes/show_command.rb +38 -0
  256. data/lib/kontena/cli/vpn/config_command.rb +27 -0
  257. data/lib/kontena/cli/vpn/create_command.rb +99 -0
  258. data/lib/kontena/cli/vpn/remove_command.rb +22 -0
  259. data/lib/kontena/cli/vpn_command.rb +9 -0
  260. data/lib/kontena/cli/whoami_command.rb +38 -0
  261. data/lib/kontena/client.rb +574 -0
  262. data/lib/kontena/command.rb +251 -0
  263. data/lib/kontena/debug_instrumentor.rb +80 -0
  264. data/lib/kontena/errors.rb +50 -0
  265. data/lib/kontena/light_prompt.rb +103 -0
  266. data/lib/kontena/machine/cert_helper.rb +43 -0
  267. data/lib/kontena/machine/cloud_config/cloudinit.yml +82 -0
  268. data/lib/kontena/machine/cloud_config/node_generator.rb +28 -0
  269. data/lib/kontena/machine/common.rb +17 -0
  270. data/lib/kontena/machine/random_name.rb +42 -0
  271. data/lib/kontena/main_command.rb +66 -0
  272. data/lib/kontena/plugin_manager/cleaner.rb +33 -0
  273. data/lib/kontena/plugin_manager/common.rb +89 -0
  274. data/lib/kontena/plugin_manager/installer.rb +78 -0
  275. data/lib/kontena/plugin_manager/loader.rb +93 -0
  276. data/lib/kontena/plugin_manager/rubygems_client.rb +59 -0
  277. data/lib/kontena/plugin_manager/uninstaller.rb +34 -0
  278. data/lib/kontena/plugin_manager.rb +26 -0
  279. data/lib/kontena/presets/github_auth_provider.yml +11 -0
  280. data/lib/kontena/presets/kontena_auth_provider.yml +11 -0
  281. data/lib/kontena/scripts/completer +9 -0
  282. data/lib/kontena/scripts/completer.rb +334 -0
  283. data/lib/kontena/scripts/init +18 -0
  284. data/lib/kontena/scripts/kontena.zsh +11 -0
  285. data/lib/kontena/scripts/krates.bash +8 -0
  286. data/lib/kontena/stacks/change_resolver.rb +118 -0
  287. data/lib/kontena/stacks/stack_data.rb +58 -0
  288. data/lib/kontena/stacks/stack_data_set.rb +51 -0
  289. data/lib/kontena/stacks_cache.rb +110 -0
  290. data/lib/kontena/stacks_client.rb +177 -0
  291. data/lib/kontena/util.rb +116 -0
  292. data/lib/kontena_cli.rb +190 -0
  293. metadata +518 -0
@@ -0,0 +1,16 @@
1
+ module Kontena::Cli::Containers
2
+ class InspectCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
5
+
6
+ parameter "CONTAINER_ID", "Container id"
7
+
8
+ def execute
9
+ require_api_url
10
+ token = require_token
11
+
12
+ result = client(token).get("containers/#{current_grid}/#{container_id}/inspect")
13
+ puts JSON.pretty_generate(result)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ module Kontena::Cli::Containers
2
+ class ListCommand < Kontena::Command
3
+ include Kontena::Util
4
+ include Kontena::Cli::Common
5
+ include Kontena::Cli::GridOptions
6
+ include Kontena::Cli::TableGenerator::Helper
7
+
8
+ option ['-a', '--all'], :flag, 'Show all containers'
9
+
10
+ requires_current_master
11
+ requires_current_master_token
12
+
13
+ NON_STOP_STATES = ['paused', 'restarting', 'oom_killed', 'dead', 'running']
14
+
15
+ def fields
16
+ return ['id'] if quiet?
17
+ { container_id: 'id', image: 'image', command: 'cmd', created: 'created_at', status: 'state' }
18
+ end
19
+
20
+ def execute
21
+ result = spin_if(!quiet?, "Retrieving container list") do
22
+ Array(client.get("containers/#{current_grid}#{'?all=1' if all?}")['containers'])
23
+ end
24
+
25
+ print_table(result.reverse) do |row|
26
+ row['id'] = container_id(row)
27
+ row['created_at'] = time_ago(row['created_at'])
28
+ row['cmd'] = truncate_cmd(row)
29
+ row['state'] = container_state(row)
30
+ end
31
+ end
32
+
33
+ def container_id(row)
34
+ if row['node']
35
+ "#{row['node']['name']}/#{row['name']}"
36
+ else
37
+ "/#{row['name']}"
38
+ end
39
+ end
40
+
41
+ def truncate_cmd(row)
42
+ cmd = row['cmd'].nil? ? '' : row['cmd'].join(' ')
43
+ cmd = "#{cmd[0..24]}#{pastel.cyan('..')}" if cmd.length > 26
44
+ "\"#{cmd}\""
45
+ end
46
+
47
+ def container_state(row)
48
+ NON_STOP_STATES.find { |state| row.fetch('state', {})[state] == true } || pastel.cyan('stopped')
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ require_relative '../helpers/log_helper'
2
+
3
+ module Kontena::Cli::Containers
4
+ class LogsCommand < Clamp::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
7
+ include Kontena::Cli::Helpers::LogHelper
8
+
9
+ parameter "CONTAINER_ID", "Container id"
10
+
11
+ def execute
12
+ require_api_url
13
+
14
+ show_logs("containers/#{current_grid}/#{container_id}/logs") do |log|
15
+ show_log(log)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ module Kontena::Cli::Etcd
2
+ module Common
3
+
4
+ def validate_key
5
+ abort("Invalid key, did you mean /#{key} ?") unless key[0] == '/'
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Etcd
4
+ class GetCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
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_grid}/#{key}")
17
+ if response['value']
18
+ puts response['value']
19
+ elsif response['children']
20
+ exit_with_error "Cannot get value from a directory"
21
+ elsif response['error']
22
+ exit_with_error response['error']
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'common'
2
+ require 'kontena/cli/helpers/health_helper'
3
+
4
+ module Kontena::Cli::Etcd
5
+ class HealthCommand < Kontena::Command
6
+ include Kontena::Cli::Common
7
+ include Kontena::Cli::GridOptions
8
+ include Kontena::Cli::Helpers::HealthHelper
9
+
10
+ parameter "[NODE]", "Show health for specific node"
11
+
12
+ requires_current_master
13
+ requires_current_grid
14
+
15
+ def execute
16
+ ret = true
17
+
18
+ if self.node
19
+ ret = show_etcd_health("#{current_grid}/#{self.node}")
20
+ else
21
+ nodes = client.get("grids/#{current_grid}/nodes")['nodes']
22
+
23
+ nodes.each do |node|
24
+ if !show_etcd_health(node['id'])
25
+ ret = false
26
+ end
27
+ end
28
+ end
29
+
30
+ return ret
31
+ end
32
+
33
+ # @param id [String] :grid/:node
34
+ # @return [Boolean]
35
+ def show_etcd_health(id)
36
+ node_health = client.get("nodes/#{id}/health")
37
+ etcd_health, status = node_etcd_health(node_health['etcd_health'])
38
+
39
+ puts "#{health_icon etcd_health} Node #{node_health['name']} etcd is #{status}"
40
+
41
+ return etcd_health == :ok
42
+
43
+ rescue Kontena::Errors::StandardErrorHash => exc
44
+ raise unless exc.status == 422
45
+
46
+ exc.errors.each do |what, error|
47
+ puts "#{health_icon :offline} Node #{id} #{what} error: #{error}"
48
+ end
49
+
50
+ return false
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,36 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Etcd
4
+ class ListCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
7
+ include Common
8
+
9
+ parameter "[KEY]", "Etcd key", default: '/'
10
+
11
+ option ['-r', '--recursive'], :flag, "List keys recursively", default: false
12
+
13
+ # the command outputs id info only anyway, this is here strictly for ignoring purposes
14
+ option ['-q', '--quiet'], :flag, "Output the identifying column only", hidden: true
15
+
16
+ requires_current_master
17
+ requires_current_master_token
18
+
19
+ def execute
20
+ validate_key
21
+
22
+ response = spin_if(!quiet?, "Retrieving keys from etcd") do
23
+ client.get("etcd/#{current_grid}/#{key}#{'?recursive=true' if recursive?}")
24
+ end
25
+
26
+ if response['children']
27
+ children = response['children'].map{|c| c['key'] }
28
+ puts children.join("\n")
29
+ elsif response['value']
30
+ exit_with_error "Not a directory"
31
+ elsif response['error']
32
+ exit_with_error response['error']
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Etcd
4
+ class MkdirCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
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_grid}/#{key}", data)
18
+ if response['error']
19
+ exit_with_error response['error']
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Etcd
4
+ class RemoveCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
7
+ include Common
8
+
9
+ parameter "KEY", "Etcd key"
10
+
11
+ option "--recursive", :flag, "Remove keys recursively"
12
+ option "--force", :flag, "Force remove", default: false, attribute_name: :forced
13
+
14
+ def execute
15
+ require_api_url
16
+ token = require_token
17
+ validate_key
18
+ confirm unless forced?
19
+
20
+ data = {}
21
+ data[:recursive] = true if recursive?
22
+ response = client(token).delete("etcd/#{current_grid}/#{key}", data)
23
+
24
+ if response['error']
25
+ exit_with_error response['error']
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Etcd
4
+ class SetCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Kontena::Cli::GridOptions
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_grid}/#{key}", data)
19
+ if response['error']
20
+ exit_with_error response['error']
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ class Kontena::Cli::EtcdCommand < Kontena::Command
2
+
3
+ subcommand "get", "Get the current value for a single key", load_subcommand('etcd/get_command')
4
+ subcommand "set", "Set a value on the specified key", load_subcommand('etcd/set_command')
5
+ subcommand ["mkdir", "mk"], "Create a directory", load_subcommand('etcd/mkdir_command')
6
+ subcommand ["list", "ls"], "List a directory", load_subcommand('etcd/list_command')
7
+ subcommand ["remove", "rm"], "Remove a key or a directory", load_subcommand('etcd/remove_command')
8
+ subcommand "health", "Check etcd health", load_subcommand('etcd/health_command')
9
+
10
+ def execute
11
+ end
12
+ end
@@ -0,0 +1,25 @@
1
+ module Kontena::Cli::ExternalRegistries
2
+ class AddCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
5
+
6
+ parameter '[URL]', 'Docker Registry url', default: 'https://index.docker.io/v2/'
7
+
8
+ option ['-u', '--username'], 'USERNAME', 'Username', required: true
9
+ option ['-p', '--password'], 'PASSWORD', 'Password', required: true
10
+ option ['-e', '--email'], 'EMAIL', 'Email', required: false
11
+
12
+ def execute
13
+ require_api_url
14
+ require_current_grid
15
+ token = require_token
16
+
17
+ self.url = "https://#{self.url}" unless self.url.start_with?('http')
18
+
19
+ data = { username: username, password: password, email: email, url: url }
20
+ spinner "Adding #{pastel.cyan(url)} to external registries " do
21
+ client(token).post("grids/#{current_grid}/external_registries", data)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module Kontena::Cli::ExternalRegistries
2
+ class ListCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+ include Kontena::Cli::GridOptions
5
+ include Kontena::Cli::TableGenerator::Helper
6
+
7
+ requires_current_master
8
+ requires_current_master_token
9
+ requires_current_grid
10
+
11
+ def fields
12
+ quiet? ? %w(name) : %w(name username email)
13
+ end
14
+
15
+ def external_registries
16
+ client.get("grids/#{current_grid}/external_registries")['external_registries']
17
+ end
18
+
19
+ def execute
20
+ print_table(external_registries)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ module Kontena::Cli::ExternalRegistries
2
+ class RemoveCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+
5
+ parameter "NAME", "External registry name to remove"
6
+ option "--force", :flag, "Force remove", default: false, attribute_name: :forced
7
+
8
+ def execute
9
+ require_api_url
10
+ token = require_token
11
+ confirm_command(name) unless forced?
12
+ spinner "Removing #{pastel.cyan(name)} external-registry from #{pastel.cyan(current_grid)} grid " do
13
+ client(token).delete("external_registries/#{current_grid}/#{name}")
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ class Kontena::Cli::ExternalRegistryCommand < Kontena::Command
2
+
3
+ subcommand "add", "Add external Docker image registry", load_subcommand('external_registries/add_command')
4
+ subcommand ["list", "ls"], "List external Docker image registries", load_subcommand('external_registries/list_command')
5
+ subcommand ["remove", "rm"], "Remove external Docker image registry", load_subcommand('external_registries/remove_command')
6
+
7
+ def execute
8
+ end
9
+ end
@@ -0,0 +1,21 @@
1
+ class Kontena::Cli::GridCommand < Kontena::Command
2
+
3
+ subcommand ["list","ls"], "List all grids", load_subcommand('grids/list_command')
4
+ subcommand "create", "Create a new grid", load_subcommand('grids/create_command')
5
+ subcommand "update", "Update grid", load_subcommand('grids/update_command')
6
+ subcommand "use", "Switch to use specific grid", load_subcommand('grids/use_command')
7
+ subcommand "show", "Show grid details", load_subcommand('grids/show_command')
8
+ subcommand "logs", "Show logs from grid containers", load_subcommand('grids/logs_command')
9
+ subcommand "events", "Show events from grid", load_subcommand('grids/events_command')
10
+ subcommand ["remove","rm"], "Remove a grid", load_subcommand('grids/remove_command')
11
+ subcommand "current", "Show current grid details", load_subcommand('grids/current_command')
12
+ subcommand "env", "Show the current grid environment details", load_subcommand('grids/env_command')
13
+ subcommand "audit-log", "Show audit log of the current grid", load_subcommand('grids/audit_log_command')
14
+ subcommand "user", "User specific commands", load_subcommand('grids/user_command')
15
+ subcommand "cloud-config", "Generate cloud-config", load_subcommand('grids/cloud_config_command')
16
+ subcommand "trusted-subnet", "Trusted subnet related commands", load_subcommand('grids/trusted_subnet_command')
17
+ subcommand "health", "Check grid health", load_subcommand('grids/health_command')
18
+
19
+ def execute
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ module Kontena
2
+ module Cli
3
+ module GridOptions
4
+
5
+ def self.included(base)
6
+ if base.respond_to?(:option)
7
+ base.option '--grid', 'GRID', 'Specify grid to use'
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Grids
4
+ class AuditLogCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Common
7
+
8
+ option ["-l", "--lines"], "LINES", "Number of lines"
9
+
10
+ requires_current_master
11
+ requires_current_master_token
12
+ requires_current_grid
13
+
14
+ def execute
15
+ audit_logs = client.get("grids/#{current_grid}/audit_log", {limit: lines})
16
+ puts '%-30.30s %-10s %-15s %-25s %-15s %-25s %-15s %-15s' % ['Time', 'Grid', 'Resource Type', 'Resource Name', 'Event Name', 'User', 'Source IP', 'User-Agent']
17
+ audit_logs['logs'].each do |log|
18
+ puts '%-30.30s %-10s %-15s %-25s %-15s %-25s %-15s %-15s' % [ log['time'], log['grid'], log['resource_type'], log['resource_name'], log['event_name'], log['user_identity']['email'], log['source_ip'], log['user_agent']]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,53 @@
1
+ require_relative 'common'
2
+
3
+ module Kontena::Cli::Grids
4
+ class CloudConfigCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+ include Common
7
+
8
+ parameter "NAME", "Grid name"
9
+ option "--dns", "DNS", "DNS server", multivalued: true
10
+ option "--peer-interface", "IFACE", "Peer (private) network interface", default: "eth1"
11
+ option "--default-interface-match", "IFACE-GLOB", "Match default network interfaces", default: nil
12
+ option "--docker-bip", "BIP", "Docker bridge ip", default: "172.17.43.1/16"
13
+ option "--version", "VERSION", "Agent version", default: "latest"
14
+
15
+ def execute
16
+ require_api_url
17
+ token = require_token
18
+
19
+ grid = find_grid_by_name(name)
20
+ exit_with_error("Grid not found") unless grid
21
+
22
+ default_dns = docker_bip.split('/')[0]
23
+ if dns_list.size > 0
24
+ dns_servers = [default_dns] + dns_list
25
+ else
26
+ dns_servers = [default_dns, '8.8.8.8', '8.8.4.4']
27
+ end
28
+
29
+ if default_interface_match
30
+ # use explicit value
31
+ elsif peer_interface =~ /^([a-z]+)(\d+)$/
32
+ default_interface_match = "#{$1}*"
33
+ warning "Guessing --default-interface-match=#{default_interface_match} from --peer-interface=#{peer_interface}, make sure that this matches the interface names used by the node platform"
34
+ else
35
+ exit_with_error "Unable to determine --default-interface-match from --peer-interface=#{peer_interface}, configure --default-interface-match= explicitly"
36
+ end
37
+
38
+ require 'kontena/machine/cloud_config/node_generator'
39
+ generator = Kontena::Machine::CloudConfig::NodeGenerator.new
40
+ config = generator.generate(
41
+ master_uri: api_url,
42
+ grid_token: grid['token'],
43
+ peer_interface: peer_interface,
44
+ dns_servers: dns_servers,
45
+ docker_bip: docker_bip,
46
+ version: version,
47
+ match_default_network_name: default_interface_match,
48
+ grid_subnet: grid['subnet'],
49
+ )
50
+ puts config
51
+ end
52
+ end
53
+ end