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,13 @@
1
+ require 'logger'
2
+
3
+ module Kontena
4
+ module Cli
5
+ module LogFormatter
6
+ class StripColor < Logger::Formatter
7
+ def msg2str(msg)
8
+ super(msg.kind_of?(String) ? msg.gsub(/\e+\[{1,2}[0-9;:?]+m/m, '') : msg)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ class Kontena::Cli::LogoutCommand < Kontena::Command
2
+ include Kontena::Cli::Common
3
+
4
+ banner "Command removed, use 'kontena master logout' to log out of the Kontena Master"
5
+ banner "or 'kontena cloud logout' to log out of the Kontena Cloud", false
6
+
7
+ def execute
8
+ exit_with_error("Command removed. Use #{pastel.yellow("kontena master logout")} to log out of the Kontena Master")
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ module Kontena::Cli::Master
2
+ class AuditLogCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+
5
+ option ["-l", "--lines"], "LINES", "Number of lines"
6
+
7
+ requires_current_master
8
+ requires_current_master_token
9
+
10
+ def execute
11
+ audit_logs = client.get("audit_logs", {limit: lines})
12
+ puts '%-30.30s %-10s %-15s %-25s %-15s %-25s %-15s %-15s' % ['Time', 'Grid', 'Resource Type', 'Resource Name', 'Event Name', 'User', 'Source IP', 'User-Agent']
13
+ audit_logs['logs'].each do |log|
14
+ 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']]
15
+ end
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,46 @@
1
+ module Kontena::Cli::Master::Config
2
+ class ExportCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ requires_current_master
7
+ requires_current_master_token
8
+
9
+ banner "Reads configuration from master"
10
+
11
+ parameter '[PATH]', "Output to file in PATH, default: STDOUT", required: false
12
+ option ['-f', '--format'], '[FORMAT]', "Specify output format (json, yaml) (default: guess from PATH or json)"
13
+
14
+ option ['--filter'], "[FILTER]", "Filter keys, example: oauth2.*"
15
+
16
+ def decorate(data)
17
+ case self.format.downcase
18
+ when 'json'
19
+ require 'json'
20
+ JSON.pretty_generate(data)
21
+ when 'yaml', 'yml'
22
+ require 'yaml'
23
+ YAML.dump(data)
24
+ else
25
+ exit_with_error "Unknown output format '#{self.format}'"
26
+ end
27
+ end
28
+
29
+ def output(content)
30
+ self.path ? File.write(self.path, content) : puts(content)
31
+ end
32
+
33
+ def data
34
+ client.get("config", self.filter ? { filter: self.filter } : nil)
35
+ end
36
+
37
+ def set_default_format
38
+ self.format ||= self.path.to_s.end_with?('.yml') ? 'yaml' : 'json'
39
+ end
40
+
41
+ def execute
42
+ set_default_format
43
+ output(decorate(data))
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,26 @@
1
+ module Kontena::Cli::Master::Config
2
+ class GetCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ requires_current_master
7
+ requires_current_master_token
8
+
9
+ banner "Reads a configuration value from master"
10
+
11
+ parameter "KEY", "Configuration key to read from master", required: true
12
+
13
+ option ['-p', '--pair'], :flag, "Print key=value instead of only value"
14
+
15
+ def response
16
+ client.get("config/#{key}")
17
+ end
18
+
19
+ def execute
20
+ value = response[key]
21
+ print(key + '=') if pair?
22
+ puts value
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,67 @@
1
+ module Kontena::Cli::Master::Config
2
+ class ImportCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ requires_current_master
7
+ requires_current_master_token
8
+
9
+ banner "Updates configuration from a file into Master"
10
+
11
+ parameter '[PATH]', "Input from file in PATH (default: STDIN)", required: false
12
+
13
+ option ['--preset'], '[NAME]', 'Load preset', hidden: true
14
+
15
+ option ['--format'], '[FORMAT]', "Specify input format (json, yaml) (default: guess from PATH or json)"
16
+ option ['--full'], :flag, "Perform full update, keys that are not present in the input are cleared"
17
+ option ['-f', '--force'], :flag, "Don't ask for confirmation"
18
+
19
+
20
+ def input_as_hash
21
+ if self.path && self.preset
22
+ exit_with_error "Options --preset and PATH can not be used together"
23
+ elsif self.path
24
+ unless File.exist?(self.path) && File.readable?(self.path)
25
+ exit_with_error "Can not read '#{self.path}'"
26
+ end
27
+ File.read(self.path)
28
+ elsif self.preset
29
+ self.format = 'yaml'
30
+ path = File.join(Kontena.root, 'lib/kontena/presets', "#{self.preset}.yml")
31
+ File.read(path)
32
+ else
33
+ stdin_input("Enter master configuration as #{format.upcase}", :multiline)
34
+ end
35
+ end
36
+
37
+ def convert(data)
38
+ case self.format.downcase
39
+ when 'json'
40
+ require 'json'
41
+ JSON.parse(data)
42
+ when 'yaml', 'yml'
43
+ ::YAML.safe_load(data, [], [], true)
44
+ else
45
+ exit_with_error "Unknown input format '#{self.format}'"
46
+ end
47
+ end
48
+
49
+ def http_method
50
+ self.full? ? :patch : :put
51
+ end
52
+
53
+ def upload(data)
54
+ confirm unless self.force?
55
+ client.send(http_method, "config", data)
56
+ end
57
+
58
+ def set_default_format
59
+ self.format ||= self.path.to_s.end_with?('.yml') ? 'yaml' : 'json'
60
+ end
61
+
62
+ def execute
63
+ set_default_format
64
+ upload(convert(input_as_hash))
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,19 @@
1
+ module Kontena::Cli::Master::Config
2
+ class SetCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ requires_current_master
7
+ requires_current_master_token
8
+
9
+ banner "Sets a configuration value to Master"
10
+
11
+ parameter "KEY_VALUE_PAIR ...", "Key/value pair, for example server.root_url=http://example.com", required: true
12
+
13
+ def execute
14
+ data = self.key_value_pair_list.map{ |p| p.split('=') }.to_h
15
+ client.patch('config', data)
16
+ end
17
+ end
18
+ end
19
+
@@ -0,0 +1,20 @@
1
+ module Kontena::Cli::Master::Config
2
+ class UnsetCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ requires_current_master
7
+ requires_current_master_token
8
+
9
+ parameter "KEY ...", "Key(s) to unset", required: true
10
+
11
+ banner "Clears a configuration value from Master"
12
+
13
+ def execute
14
+ self.key_list.each do |key|
15
+ client.delete("config/#{key}")
16
+ end
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,17 @@
1
+
2
+ module Kontena
3
+ module Cli
4
+ module Master
5
+ class ConfigCommand < Kontena::Command
6
+ subcommand "set", "Set a config value", load_subcommand('master/config/set_command')
7
+ subcommand "get", "Get a config value", load_subcommand('master/config/get_command')
8
+ subcommand "unset", "Clear a config value", load_subcommand('master/config/unset_command')
9
+ subcommand ["load", "import"], "Upload config to Master", load_subcommand('master/config/import_command')
10
+ subcommand ["dump", "export"], "Download config from Master", load_subcommand('master/config/export_command')
11
+
12
+ def execute
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,74 @@
1
+ module Kontena::Cli::Master
2
+ class CreateCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+
5
+ callback_matcher :master, :create_with_plugin_select
6
+
7
+ def subcommand_tree(command = nil)
8
+ command ||= Kontena::MainCommand
9
+
10
+ real_command = command.respond_to?(:subcommand_class) ? command.subcommand_class : command
11
+
12
+ tree = {}
13
+ real_command.recognised_subcommands.each do |sub_command|
14
+ sub_command.names.each do |command_name|
15
+ if sub_command.subcommand_class.has_subcommands?
16
+ tree[command_name] = subcommand_tree(sub_command)
17
+ else
18
+ tree[command_name] = sub_command.subcommand_class
19
+ end
20
+ end
21
+ end
22
+ tree
23
+ end
24
+
25
+ def master_create_subcommands(tree)
26
+ creators = []
27
+ tree.each do |k,cmd|
28
+ if cmd.kind_of?(Hash)
29
+ creators += master_create_subcommands(cmd)
30
+ elsif cmd.respond_to?(:callback_matcher) && cmd.callback_matcher == [:master, :create]
31
+ creators << cmd
32
+ end
33
+ end
34
+ creators
35
+ end
36
+
37
+ def execute
38
+
39
+ require 'shellwords'
40
+
41
+ tree = master_create_subcommands(subcommand_tree)
42
+
43
+ if tree.empty?
44
+ exit_with_error "Install platform plugins first, use: kontena plugin"
45
+ end
46
+ cmd_class = prompt.select("Choose target platform") do |menu|
47
+ tree.each do |cmd_class|
48
+ plugin_name = cmd_class.to_s[/Plugin::(.+?)::/, 1]
49
+ next unless plugin_name
50
+ menu.choice plugin_name, cmd_class
51
+ end
52
+ end
53
+ skip_options = ['--no-prompt', '--silent', '--help', '--version']
54
+ options = []
55
+ cmd_class.recognised_options.each do |option|
56
+ next if option.switches.any?{ |sw| skip_options.include?(sw) }
57
+ if option.type == :flag
58
+ answer = prompt.yes?(option.description)
59
+ if answer
60
+ options << option.switches.first
61
+ end
62
+ else
63
+ answer = prompt.ask("#{option.description}: ", required: option.required?, default: option.default_value)
64
+ if answer
65
+ options << "#{option.switches.first} #{answer.shellescape}"
66
+ end
67
+ end
68
+ end
69
+ cmd = [cmd_class.to_s[/Plugin::(.+?)::/, 1].downcase, 'master', 'create'] + options
70
+ Kontena.run!(cmd)
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,25 @@
1
+ require 'uri'
2
+
3
+ module Kontena::Cli::Master
4
+ class CurrentCommand < Kontena::Command
5
+ include Kontena::Cli::Common
6
+
7
+ option ["--name"], :flag, "Show name only", default: false
8
+ option ["--address"], :flag, "Show IP address or FQDN only", default: false
9
+ option ["--url"], :flag, "Show URL only", default: false
10
+
11
+ def execute
12
+ master = require_current_master
13
+
14
+ if name?
15
+ puts master['name']
16
+ elsif address?
17
+ puts URI.parse(master['url']).host
18
+ elsif url?
19
+ puts master['url']
20
+ else
21
+ puts "#{master['name']} #{master['url']}"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ module Kontena::Cli::Master
2
+ class InitCloudCommand < Kontena::Command
3
+
4
+ include Kontena::Cli::Common
5
+
6
+ banner "Configures the current Kontena Master to use Kontena Cloud services and authentication"
7
+
8
+ option '--force', :flag, "Don't ask questions"
9
+ option '--cloud-master-id', '[ID]', "Use existing cloud master ID"
10
+ option '--provider', '[NAME]', "Set master provider name"
11
+ option '--version', '[VERSION]', "Set master version"
12
+
13
+ requires_current_master
14
+ requires_current_master_token
15
+ requires_current_account_token
16
+
17
+ def master_config
18
+ @master_config ||= client.get('config')
19
+ end
20
+
21
+ def current_master_cloud_config
22
+ return @cloud_config if @cloud_config
23
+ master_client_id = master_config['oauth2.client_id']
24
+ @cloud_config = cloud_client.get('user/masters')['data'].find { |cm| cm['attributes']['client-id'] == master_client_id }
25
+ end
26
+
27
+ def current_master_cloud_name
28
+ @cloud_name ||= current_master_cloud_config.nil? ? nil : current_master_cloud_config['attributes']['name']
29
+ end
30
+
31
+ def already_cloud_enabled?
32
+ !current_master_cloud_config.nil?
33
+ end
34
+
35
+ def execute
36
+ exit_with_error "Current master is already registered to use Kontena Cloud as #{pastel.cyan(current_master_cloud_name)}" if already_cloud_enabled?
37
+ args = ["--current"]
38
+ args << "--force" if self.force?
39
+ args += ["--cloud-master-id", self.cloud_master_id.shellescape] if self.cloud_master_id
40
+ args += ["--provider", self.provider.shellescape] if self.provider
41
+ args += ["--version", self.version.shellescape] if self.version
42
+ Kontena.run!(['cloud', 'master', 'add'] + args)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ module Kontena::Cli::Master
2
+ class JoinCommand < Kontena::Command
3
+ parameter "URL", "Kontena Master URL or name"
4
+ parameter "INVITE_CODE", "Invitation code"
5
+
6
+ option ['-n', '--name'], '[NAME]', 'Set server name'
7
+ option ['-r', '--remote'], :flag, 'Do not try to open a browser'
8
+ option ['-v', '--verbose'], :flag, 'Increase output verbosity'
9
+
10
+ def execute
11
+ params = []
12
+ params += ["--join", self.invite_code]
13
+ params << "--remote" if self.remote?
14
+ params += ["--name", self.name] if self.name
15
+ params << "--verbose" if self.verbose?
16
+
17
+ cmd = ['master', 'login'] + params
18
+ cmd << url
19
+ Kontena.run!(cmd)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module Kontena::Cli::Master
2
+ class ListCommand < Kontena::Command
3
+ include Kontena::Cli::Common
4
+ include Kontena::Cli::TableGenerator::Helper
5
+
6
+ def fields
7
+ @fields ||= quiet? ? %w(name) : %w(name url)
8
+ end
9
+
10
+ def current_master_name
11
+ @current_master_name ||= current_master.nil? ? nil : current_master.name
12
+ end
13
+
14
+ def mark_if_current(row)
15
+ unless quiet?
16
+ row.name.to_s.insert(0, pastel.yellow('* ')) if row.name == current_master_name
17
+ end
18
+ end
19
+
20
+ def execute
21
+ print_table(config.servers, fields, &method(:mark_if_current))
22
+ end
23
+ end
24
+ end