dapp 0.10.2 → 0.36.24

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 (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -0,0 +1,379 @@
1
+ module Dapp
2
+ module Kube
3
+ module Dapp
4
+ module Command
5
+ module Common
6
+ def lock_helm_release(&blk)
7
+ lock("helm_release.#{kube_release_name}", &blk)
8
+ end
9
+
10
+ def helm_release
11
+ kube_check_helm!
12
+ kube_check_helm_template_plugin!
13
+ kube_check_helm_chart!
14
+
15
+ repo = option_repo
16
+ tag = begin
17
+ raise ::Dapp::Error::Command, code: :expected_only_one_tag, data: { tags: option_tags.join(', ') } if option_tags.count > 1
18
+ option_tags.first
19
+ end
20
+ validate_repo_name!(repo)
21
+ validate_tag_name!(tag)
22
+
23
+ with_kube_tmp_chart_dir do
24
+ kube_copy_chart
25
+ kube_helm_decode_secrets
26
+ kube_generate_helm_chart_tpl
27
+
28
+ release = Helm::Release.new(
29
+ self,
30
+ name: kube_release_name,
31
+ repo: repo,
32
+ docker_tag: tag,
33
+ namespace: kube_namespace,
34
+ kube_context: custom_kube_context,
35
+ chart_path: kube_chart_path_for_helm,
36
+ set: self.options[:helm_set_options],
37
+ values: [*kube_values_paths, *kube_tmp_chart_secret_values_paths],
38
+ deploy_timeout: self.options[:timeout] || 300,
39
+ without_registry: self.options[:without_registry],
40
+ )
41
+
42
+ yield release
43
+ end
44
+ end
45
+
46
+ def kube_check_helm_chart!
47
+ raise ::Dapp::Error::Command, code: :helm_directory_not_exist, data: { path: kube_chart_path } unless kube_chart_path.exist?
48
+ end
49
+
50
+ def kube_check_helm_template_plugin!
51
+ unless shellout!("helm plugin list | awk '{print $1}'").stdout.lines.map(&:strip).any? { |plugin| plugin == 'template' }
52
+ raise ::Dapp::Error::Command, code: :helm_template_plugin_not_installed, data: { path: kube_chart_path }
53
+ end
54
+ end
55
+
56
+ def kube_copy_chart
57
+ FileUtils.cp_r("#{kube_chart_path}/.", kube_chart_path_for_helm)
58
+ end
59
+
60
+ def kube_helm_decode_secrets
61
+ if secret.nil?
62
+ log_warning(desc: {
63
+ code: :dapp_secret_key_not_found,
64
+ data: {not_found_in: secret_key_not_found_in.join(', ')}
65
+ }) if !kube_secret_values_paths.empty? || kube_chart_secret_path.directory?
66
+ end
67
+
68
+ kube_helm_decode_secret_files
69
+ kube_helm_decode_secret_values
70
+ end
71
+
72
+ def kube_helm_decode_secret_values
73
+ kube_secret_values_paths.each_with_index do |secret_values_file, index|
74
+ decoded_data = kube_helm_decode_json(secret, yaml_load_file(secret_values_file))
75
+ kube_tmp_chart_secret_values_paths[index].write(decoded_data.to_yaml)
76
+ end
77
+ end
78
+
79
+ def kube_helm_decode_secret_files
80
+ return unless kube_chart_secret_path.directory?
81
+ Dir.glob(kube_chart_secret_path.join('**/*')).each do |entry|
82
+ next if File.directory?(entry)
83
+
84
+ secret_relative_path = Pathname(entry).subpath_of(kube_chart_secret_path)
85
+
86
+ if secret.nil?
87
+ File.open(kube_tmp_chart_secret_path(secret_relative_path), 'wb:ASCII-8BIT', 0600) {|f| f.write ""}
88
+ else
89
+ kube_secret_file_validate!(entry)
90
+ secret_data = secret.extract(IO.binread(entry).chomp("\n"))
91
+ File.open(kube_tmp_chart_secret_path(secret_relative_path), 'wb:ASCII-8BIT', 0600) {|f| f.write secret_data}
92
+ end
93
+ end
94
+ end
95
+
96
+ def kube_generate_helm_chart_tpl
97
+ cont = <<-EOF
98
+ {{- define "dapp_secret_file" -}}
99
+ {{- $relative_file_path := index . 0 -}}
100
+ {{- $context := index . 1 -}}
101
+ {{- $context.Files.Get (print "#{kube_tmp_chart_secret_path.subpath_of(kube_chart_path_for_helm)}/" $relative_file_path) -}}
102
+ {{- end -}}
103
+
104
+ {{- define "_dimg" -}}
105
+ {{- $context := index . 0 -}}
106
+ {{- if not $context.Values.global.dapp.is_nameless_dimg -}}
107
+ {{- required "No dimg specified for template" nil -}}
108
+ {{- end -}}
109
+ {{ $context.Values.global.dapp.dimg.docker_image }}
110
+ {{- end -}}
111
+
112
+ {{- define "_dimg2" -}}
113
+ {{- $name := index . 0 -}}
114
+ {{- $context := index . 1 -}}
115
+ {{- if $context.Values.global.dapp.is_nameless_dimg -}}
116
+ {{- required (printf "No dimg should be specified for template, got `%s`" $name) nil -}}
117
+ {{- end -}}
118
+ {{ index (required (printf "Unknown dimg `%s` specified for template" $name) (pluck $name $context.Values.global.dapp.dimg | first)) "docker_image" }}
119
+ {{- end -}}
120
+
121
+ {{- define "dimg" -}}
122
+ {{- if eq (typeOf .) "chartutil.Values" -}}
123
+ {{- $context := . -}}
124
+ {{ tuple $context | include "_dimg" }}
125
+ {{- else if (ge (len .) 2) -}}
126
+ {{- $name := index . 0 -}}
127
+ {{- $context := index . 1 -}}
128
+ {{ tuple $name $context | include "_dimg2" }}
129
+ {{- else -}}
130
+ {{- $context := index . 0 -}}
131
+ {{ tuple $context | include "_dimg" }}
132
+ {{- end -}}
133
+ {{- end -}}
134
+
135
+ {{- define "_dapp_container__imagePullPolicy" -}}
136
+ {{- $context := index . 0 -}}
137
+ {{- if $context.Values.global.dapp.ci.is_branch -}}
138
+ imagePullPolicy: Always
139
+ {{- end -}}
140
+ {{- end -}}
141
+
142
+ {{- define "_dapp_container__image" -}}
143
+ {{- $context := index . 0 -}}
144
+ image: {{ tuple $context | include "_dimg" }}
145
+ {{- end -}}
146
+
147
+ {{- define "_dapp_container__image2" -}}
148
+ {{- $name := index . 0 -}}
149
+ {{- $context := index . 1 -}}
150
+ image: {{ tuple $name $context | include "_dimg2" }}
151
+ {{- end -}}
152
+
153
+ {{- define "dapp_container_image" -}}
154
+ {{- if eq (typeOf .) "chartutil.Values" -}}
155
+ {{- $context := . -}}
156
+ {{ tuple $context | include "_dapp_container__image" }}
157
+ {{ tuple $context | include "_dapp_container__imagePullPolicy" }}
158
+ {{- else if (ge (len .) 2) -}}
159
+ {{- $name := index . 0 -}}
160
+ {{- $context := index . 1 -}}
161
+ {{ tuple $name $context | include "_dapp_container__image2" }}
162
+ {{ tuple $context | include "_dapp_container__imagePullPolicy" }}
163
+ {{- else -}}
164
+ {{- $context := index . 0 -}}
165
+ {{ tuple $context | include "_dapp_container__image" }}
166
+ {{ tuple $context | include "_dapp_container__imagePullPolicy" }}
167
+ {{- end -}}
168
+ {{- end -}}
169
+
170
+ {{- define "_dimg_id" -}}
171
+ {{- $context := index . 0 -}}
172
+ {{- if not $context.Values.global.dapp.is_nameless_dimg -}}
173
+ {{- required "No dimg specified for template" nil -}}
174
+ {{- end -}}
175
+ {{ $context.Values.global.dapp.dimg.docker_image_id }}
176
+ {{- end -}}
177
+
178
+ {{- define "_dimg_id2" -}}
179
+ {{- $name := index . 0 -}}
180
+ {{- $context := index . 1 -}}
181
+ {{- if $context.Values.global.dapp.is_nameless_dimg -}}
182
+ {{- required (printf "No dimg should be specified for template, got `%s`" $name) nil -}}
183
+ {{- end -}}
184
+ {{ index (required (printf "Unknown dimg `%s` specified for template" $name) (pluck $name $context.Values.global.dapp.dimg | first)) "docker_image_id" }}
185
+ {{- end -}}
186
+
187
+ {{- define "dimg_id" -}}
188
+ {{- if eq (typeOf .) "chartutil.Values" -}}
189
+ {{- $context := . -}}
190
+ {{ tuple $context | include "_dimg_id" }}
191
+ {{- else if (ge (len .) 2) -}}
192
+ {{- $name := index . 0 -}}
193
+ {{- $context := index . 1 -}}
194
+ {{ tuple $name $context | include "_dimg_id2" }}
195
+ {{- else -}}
196
+ {{- $context := index . 0 -}}
197
+ {{ tuple $context | include "_dimg_id" }}
198
+ {{- end -}}
199
+ {{- end -}}
200
+
201
+ {{- define "_dapp_container_env" -}}
202
+ {{- $context := index . 0 -}}
203
+ {{- if $context.Values.global.dapp.ci.is_branch -}}
204
+ - name: DOCKER_IMAGE_ID
205
+ value: {{ tuple $context | include "_dimg_id" }}
206
+ {{- end -}}
207
+ {{- end -}}
208
+
209
+ {{- define "_dapp_container_env2" -}}
210
+ {{- $name := index . 0 -}}
211
+ {{- $context := index . 1 -}}
212
+ {{- if $context.Values.global.dapp.ci.is_branch -}}
213
+ - name: DOCKER_IMAGE_ID
214
+ value: {{ tuple $name $context | include "_dimg_id2" }}
215
+ {{- end -}}
216
+ {{- end -}}
217
+
218
+ {{- define "dapp_container_env" -}}
219
+ {{- if eq (typeOf .) "chartutil.Values" -}}
220
+ {{- $context := . -}}
221
+ {{ tuple $context | include "_dapp_container_env" }}
222
+ {{- else if (ge (len .) 2) -}}
223
+ {{- $name := index . 0 -}}
224
+ {{- $context := index . 1 -}}
225
+ {{ tuple $name $context | include "_dapp_container_env2" }}
226
+ {{- else -}}
227
+ {{- $context := index . 0 -}}
228
+ {{ tuple $context | include "_dapp_container_env" }}
229
+ {{- end -}}
230
+ {{- end -}}
231
+ EOF
232
+ kube_chart_path_for_helm('templates/_dapp_helpers.tpl').write(cont)
233
+ end
234
+
235
+ def kube_tmp_chart_secret_path(*path)
236
+ kube_chart_path_for_helm('decoded-secret', *path).tap { |p| p.parent.mkpath }
237
+ end
238
+
239
+ def kube_values_paths
240
+ self.options[:helm_values_options].map { |p| Pathname(p).expand_path }.each do |f|
241
+ raise ::Dapp::Error::Command, code: :values_file_not_found, data: { path: f } unless f.file?
242
+ end
243
+ end
244
+
245
+ def kube_tmp_chart_secret_values_paths
246
+ @kube_tmp_chart_secret_values_paths ||= kube_secret_values_paths.each_with_index.map { |f, i| kube_chart_path_for_helm( "decoded-secret-values-#{i}.yaml") }
247
+ end
248
+
249
+ def kube_secret_values_paths
250
+ @kube_chart_secret_values_files ||= [].tap do |files|
251
+ files << kube_chart_secret_values_path if kube_chart_secret_values_path.file?
252
+ files.concat(options[:helm_secret_values_options].map { |p| Pathname(p).expand_path }.each do |f|
253
+ kube_secret_file_validate!(f)
254
+ end)
255
+ end
256
+ end
257
+
258
+ def kube_chart_secret_values_path
259
+ kube_chart_path('secret-values.yaml').expand_path
260
+ end
261
+
262
+ def kube_check_helm!
263
+ raise ::Dapp::Error::Command, code: :helm_not_found if shellout('which helm').exitstatus == 1
264
+ end
265
+
266
+ def kube_release_name
267
+ ENV["DAPP_HELM_RELEASE_NAME"] || "#{name}-#{kube_namespace}"
268
+ end
269
+
270
+ { encode: :generate, decode: :extract }.each do |type, secret_method|
271
+ define_method "kube_helm_#{type}_json" do |secret, json|
272
+ change_json_value = proc do |value|
273
+ case value
274
+ when Array then value.map { |v| change_json_value.call(v) }
275
+ when Hash then send(:"kube_helm_#{type}_json", secret, value)
276
+ when '', nil then ''
277
+ else
278
+ secret.nil? ? '' : secret.public_send(secret_method, value)
279
+ end
280
+ end
281
+
282
+ json.each { |k, v| json[k] = change_json_value.call(v) }
283
+ end
284
+ end
285
+
286
+ def kube_secret_file_validate!(file_path)
287
+ raise ::Dapp::Error::Command, code: :secret_file_not_found, data: { path: File.expand_path(file_path) } unless File.exist?(file_path)
288
+ raise ::Dapp::Error::Command, code: :secret_file_empty, data: { path: File.expand_path(file_path) } if File.read(file_path).strip.empty?
289
+ end
290
+
291
+ def secret_key_should_exist!
292
+ raise ::Dapp::Error::Command, code: :secret_key_not_found, data: { not_found_in: secret_key_not_found_in.join(', ') } if secret.nil?
293
+ end
294
+
295
+ def kube_chart_secret_path(*path)
296
+ kube_chart_path(kube_chart_secret_dir_name, *path).expand_path
297
+ end
298
+
299
+ def kube_chart_secret_dir_name
300
+ 'secret'
301
+ end
302
+
303
+ def kube_chart_path(*path)
304
+ self.path('.helm', *path).expand_path
305
+ end
306
+
307
+ def with_kube_tmp_chart_dir
308
+ yield if block_given?
309
+ ensure
310
+ FileUtils.rm_rf(@kube_tmp_helm_chart_dir) if @kube_tmp_helm_chart_dir
311
+ end
312
+
313
+ def kube_chart_path_for_helm(*path)
314
+ chart_dir = ENV['DAPP_HELM_CHART_DIR'] || begin
315
+ @kube_tmp_helm_chart_dir ||= Dir.mktmpdir('dapp-helm-chart-', tmp_base_dir)
316
+ end
317
+ make_path(chart_dir, *path).expand_path.tap { |p| p.parent.mkpath }
318
+ end
319
+
320
+ def secret
321
+ @secret ||= begin
322
+ unless (secret_key = ENV['DAPP_SECRET_KEY'])
323
+ secret_key_not_found_in << '`DAPP_SECRET_KEY`'
324
+
325
+ file_path = path('.dapp_secret_key')
326
+ if file_path.file?
327
+ secret_key = path('.dapp_secret_key').read.chomp
328
+ else
329
+ secret_key_not_found_in << "`#{file_path}`"
330
+ end
331
+ end
332
+
333
+ Secret.new(secret_key) if secret_key
334
+ end
335
+ end
336
+
337
+ def secret_key_not_found_in
338
+ @secret_key_not_found_in ||= []
339
+ end
340
+
341
+ def namespace_option
342
+ options[:namespace].nil? ? nil : consistent_uniq_slugify(options[:namespace])
343
+ end
344
+
345
+ def context_option
346
+ options[:context]
347
+ end
348
+
349
+ def custom_kube_context
350
+ ENV["KUBECONTEXT"] || context_option
351
+ end
352
+
353
+ def kube_context
354
+ custom_kube_context || kubernetes_config.current_context_name
355
+ end
356
+
357
+ def kube_namespace
358
+ namespace_option ||
359
+ kubernetes_config.namespace(kube_context) ||
360
+ "default"
361
+ end
362
+
363
+ def kubernetes_config
364
+ @kubernetes_config ||= Kubernetes::Config.new_auto
365
+ end
366
+
367
+ def kubernetes
368
+ @kubernetes ||= Kubernetes::Client.new(
369
+ kubernetes_config,
370
+ kube_context,
371
+ kube_namespace,
372
+ timeout: options[:kubernetes_timeout],
373
+ )
374
+ end
375
+ end
376
+ end
377
+ end
378
+ end
379
+ end