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,189 @@
1
+ module Dapp
2
+ module Kube
3
+ class Helm::Release
4
+ include Helper::YAML
5
+
6
+ attr_reader :dapp
7
+
8
+ attr_reader :name
9
+ attr_reader :repo
10
+ attr_reader :docker_tag
11
+ attr_reader :namespace
12
+ attr_reader :chart_path
13
+ attr_reader :set
14
+ attr_reader :values
15
+ attr_reader :deploy_timeout
16
+ attr_reader :without_registry
17
+ attr_reader :kube_context
18
+
19
+ def initialize(dapp,
20
+ name:, repo:, docker_tag:, namespace:, chart_path:,
21
+ set: [], values: [], deploy_timeout: nil, without_registry: nil, kube_context: nil)
22
+ @dapp = dapp
23
+
24
+ @name = name
25
+ @repo = repo
26
+ @docker_tag = docker_tag
27
+ @namespace = namespace
28
+ @chart_path = chart_path
29
+ @set = set
30
+ @values = values
31
+ @deploy_timeout = deploy_timeout
32
+ @without_registry = (without_registry.nil? ? false : without_registry)
33
+ @kube_context = kube_context
34
+ end
35
+
36
+ def jobs
37
+ (resources_specs['Job'] || {}).map do |name, spec|
38
+ [name, Kubernetes::Client::Resource::Job.new(spec)]
39
+ end.to_h
40
+ end
41
+
42
+ def hooks
43
+ jobs.select do |_, spec|
44
+ spec.annotations.key? "helm.sh/hook"
45
+ end
46
+ end
47
+
48
+ def deployments
49
+ (resources_specs['Deployment'] || {}).map do |name, spec|
50
+ [name, Kubernetes::Client::Resource::Deployment.new(spec)]
51
+ end.to_h
52
+ end
53
+
54
+ def install_helm_release
55
+ unless dapp.dry_run?
56
+ dapp.kubernetes.create_namespace!(namespace) unless dapp.kubernetes.namespace?(namespace)
57
+ end
58
+
59
+ cmd = dapp.shellout([
60
+ "helm install #{chart_path}",
61
+ "--name #{name}",
62
+ *helm_additional_values_options,
63
+ *helm_set_options,
64
+ *helm_install_options,
65
+ ("--kube-context #{kube_context}" if kube_context),
66
+ ].join(" "))
67
+
68
+ return cmd
69
+ end
70
+
71
+ def upgrade_helm_release
72
+ cmd = dapp.shellout([
73
+ "helm upgrade #{name} #{chart_path}",
74
+ *helm_additional_values_options,
75
+ *helm_set_options,
76
+ *helm_install_options,
77
+ ("--kube-context #{kube_context}" if kube_context),
78
+ ].join(" "))
79
+
80
+ return cmd
81
+ end
82
+
83
+ def templates
84
+ @templates ||= {}.tap do |t|
85
+ current_template = nil
86
+ spec = 0
87
+ evaluation_output.lines.each do |l|
88
+ if (match = l[/# Source: (.*)/, 1])
89
+ spec = 0
90
+ t[current_template = match] ||= []
91
+ end
92
+
93
+ if l[/^---$/]
94
+ spec += 1
95
+ elsif current_template
96
+ (t[current_template][spec] ||= []) << l
97
+ end
98
+ end
99
+
100
+ t.each do |template, specs|
101
+ t[template] = "---\n#{specs.reject(&:nil?).map(&:join).join("---\n").strip}"
102
+ end
103
+ end
104
+ end
105
+
106
+ def lint!
107
+ dapp.shellout! [
108
+ 'helm',
109
+ 'lint',
110
+ '--strict',
111
+ *helm_additional_values_options,
112
+ *helm_set_options(fake: true),
113
+ *helm_common_options,
114
+ ("--kube-context #{kube_context}" if kube_context),
115
+ chart_path
116
+ ].compact.join(' ')
117
+ end
118
+
119
+ protected
120
+
121
+ def evaluation_output
122
+ @evaluation_output ||= begin
123
+ cmd = dapp.shellout! [
124
+ "helm",
125
+ "template",
126
+ chart_path,
127
+ helm_additional_values_options,
128
+ helm_set_options(without_registry: true),
129
+ ("--namespace #{namespace}" if namespace),
130
+ "--name #{name}",
131
+ ("--kube-context #{kube_context}" if kube_context),
132
+ ].compact.join(" ")
133
+
134
+ cmd.stdout
135
+ end
136
+ end
137
+
138
+ def resources_specs
139
+ @resources_specs ||= {}.tap do |specs|
140
+ evaluation_output.split(/^---$/)
141
+ .reject {|chunk| chunk.lines.all? {|line| line.strip.empty? or line.strip.start_with? "#"}}
142
+ .map {|chunk| yaml_load(chunk)}.each do |spec|
143
+ specs[spec['kind']] ||= {}
144
+ specs[spec['kind']][(spec['metadata'] || {})['name']] = spec
145
+ end
146
+ end
147
+ end
148
+
149
+ def helm_additional_values_options
150
+ [].tap do |options|
151
+ options.concat(values.map { |p| "--values #{p}" })
152
+ end
153
+ end
154
+
155
+ def dimg_registry
156
+ @dimg_registry ||= dapp.dimg_registry(repo)
157
+ end
158
+
159
+ def helm_set_options(without_registry: false, fake: false)
160
+ [].tap do |options|
161
+ options.concat set.map {|opt| "--set '#{opt}'"}
162
+
163
+ service_values = Helm::Values.service_values(dapp, repo, namespace, docker_tag,
164
+ without_registry: self.without_registry || without_registry,
165
+ fake: fake)
166
+ options.concat service_values.to_set_options
167
+ end
168
+ end
169
+
170
+ def helm_install_options(dry_run: nil)
171
+ dry_run = dapp.dry_run? if dry_run.nil?
172
+
173
+ helm_common_options(dry_run: dry_run).tap do |options|
174
+ options << '--dry-run' if dry_run
175
+ options << "--timeout #{deploy_timeout}" if deploy_timeout
176
+ end
177
+ end
178
+
179
+ def helm_common_options(dry_run: nil)
180
+ dry_run = dapp.dry_run? if dry_run.nil?
181
+
182
+ [].tap do |options|
183
+ options << "--namespace #{namespace}" if namespace
184
+ options << '--debug' if dry_run
185
+ end
186
+ end
187
+ end # Helm::Release
188
+ end # Kube
189
+ end # Dapp
@@ -0,0 +1,148 @@
1
+ module Dapp
2
+ module Kube
3
+ class Helm::Values
4
+ TEMPLATE_EMPTY_VALUE = '"-"'.freeze
5
+
6
+ class << self
7
+ def service_values(*a, &b)
8
+ self.new(service_values_hash(*a, &b))
9
+ end
10
+
11
+ def service_values_hash(dapp, repo, namespace, docker_tag, fake: false, without_registry: false, disable_warnings: false)
12
+ res = {
13
+ "global" => {
14
+ "namespace" => namespace,
15
+ "dapp" => {
16
+ "name" => dapp.name,
17
+ "repo" => repo,
18
+ "docker_tag" => docker_tag,
19
+ },
20
+ # TODO: enable again with chars escape
21
+ # "ci" => ENV.select { |k, _| k.start_with?('CI_') && k != "CI_ENVIRONMENT_URL" },
22
+ }
23
+ }
24
+
25
+ ci_info = {
26
+ "is_tag" => false,
27
+ "is_branch" => false,
28
+ "branch" => TEMPLATE_EMPTY_VALUE,
29
+ "tag" => TEMPLATE_EMPTY_VALUE,
30
+ "ref" => TEMPLATE_EMPTY_VALUE
31
+ }
32
+ res["global"]["dapp"]["ci"] = ci_info
33
+
34
+ if fake
35
+ elsif commit_tag = (ENV["CI_BUILD_TAG"] || ENV["CI_COMMIT_TAG"])
36
+ ci_info["tag"] = ci_info["ref"] = commit_tag
37
+ ci_info["is_tag"] = true
38
+ elsif commit_ref_name = (ENV["CI_BUILD_REF_NAME"] || ENV["CI_COMMIT_REF_NAME"])
39
+ ci_info["branch"] = ci_info["ref"] = commit_ref_name
40
+ ci_info["is_branch"] = true
41
+ elsif dapp.git_own_repo_exist? and dapp.git_own_repo.head_branch_name != "HEAD"
42
+ ci_info["branch"] = ci_info["ref"] = dapp.git_own_repo.head_branch_name
43
+ ci_info["is_branch"] = true
44
+ elsif dapp.git_own_repo_exist?
45
+ git = dapp.git_own_repo.send(:git)
46
+
47
+ tagref = git.references.find do |r|
48
+ if r.name.start_with?("refs/tags/")
49
+ if r.target.is_a? Rugged::Tag::Annotation
50
+ r.target.target_id == git.head.target_id
51
+ else
52
+ r.target_id == git.head.target_id
53
+ end
54
+ end
55
+ end
56
+
57
+ if tagref
58
+ tag = tagref.name.partition("refs/tags/").last
59
+ else
60
+ tag = git.head.target_id
61
+ end
62
+
63
+ ci_info["tag"] = ci_info["ref"] = tag
64
+ ci_info["is_tag"] = true
65
+ end
66
+
67
+ dimgs = dapp.build_configs.map do |config|
68
+ dapp.dimg(config: config, ignore_signature_auto_calculation: true)
69
+ end.uniq do |dimg|
70
+ dimg.name
71
+ end
72
+
73
+ dimgs.each do |dimg|
74
+ dimg_data = {}
75
+ if dimg.name
76
+ res["global"]["dapp"]["is_nameless_dimg"] = false
77
+ res["global"]["dapp"]["dimg"] ||= {}
78
+ res["global"]["dapp"]["dimg"][dimg.name] = dimg_data
79
+ else
80
+ res["global"]["dapp"]["is_nameless_dimg"] = true
81
+ res["global"]["dapp"]["dimg"] = dimg_data
82
+ end
83
+
84
+ dimg_labels = {}
85
+ docker_image_id = TEMPLATE_EMPTY_VALUE
86
+ unless fake || without_registry
87
+ begin
88
+ dimg_labels = dapp.dimg_registry(repo).image_config(docker_tag, dimg.name)["config"]["Labels"]
89
+ docker_image_id = dapp.dimg_registry(repo).image_id(docker_tag, dimg.name)
90
+ rescue ::Dapp::Dimg::Error::Registry => e
91
+ unless disable_warnings
92
+ dapp.log_warning "Cannot determine <dimg>.docker_image_id and <dimg>.git.<ga>.commit_id helm values of dimg#{dimg.name ? " `#{dimg.name}`" : nil}: #{e.net_status[:data][:message]}"
93
+ end
94
+ end
95
+ end
96
+
97
+ dimg_data["docker_image"] = [[repo, dimg.name].compact.join("/"), docker_tag].join(":")
98
+ dimg_data["docker_image_id"] = docker_image_id
99
+
100
+ dimg.git_artifacts(omit_empty: false).each do |ga|
101
+ if ga.as
102
+ commit_id = dimg_labels[dapp.dimgstage_g_a_commit_label(ga.paramshash)] || TEMPLATE_EMPTY_VALUE
103
+
104
+ dimg_data["git"] ||= {}
105
+ dimg_data["git"][ga.as] ||= {}
106
+ dimg_data["git"][ga.as]["commit_id"] = commit_id
107
+ end
108
+ end
109
+ end
110
+
111
+ res
112
+ end
113
+ end
114
+
115
+ attr_reader :data
116
+
117
+ def initialize(data={})
118
+ @data = data
119
+ end
120
+
121
+ def as_set_options
122
+ options = {}
123
+
124
+ queue = [[nil, data]]
125
+
126
+ loop do
127
+ option_key, hash = queue.shift
128
+ break unless hash
129
+
130
+ hash.each do |k, v|
131
+ new_option_key = [option_key, k].compact.join(".")
132
+ if v.is_a? Hash
133
+ queue << [new_option_key, v]
134
+ else
135
+ options[new_option_key] = v
136
+ end
137
+ end
138
+ end
139
+
140
+ options
141
+ end
142
+
143
+ def to_set_options
144
+ as_set_options.map {|k, v| "--set '#{k}=#{v}'"}
145
+ end
146
+ end # Helm::ServiceValues
147
+ end # Kube
148
+ end # Dapp
@@ -0,0 +1,5 @@
1
+ module Dapp
2
+ module Kube
3
+ module Helm ; end
4
+ end # Kube
5
+ end # Dapp
@@ -0,0 +1,43 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Error
4
+ class Base < Kubernetes::Error::Base
5
+ end
6
+
7
+ class Default < Base
8
+ include ::Dapp::Error::Mod::User
9
+ end
10
+
11
+ class Timeout < Default
12
+ end
13
+
14
+ class ConnectionRefused < Default
15
+ end
16
+
17
+ class BadConfig < Default
18
+ end
19
+
20
+ class NotFound < Base
21
+ def initialize(**net_status)
22
+ super({code: :not_found}.merge(net_status))
23
+ end
24
+ end
25
+
26
+ module Pod
27
+ class NotFound < Kubernetes::Client::Error::NotFound ; end
28
+
29
+ class ContainerCreating < Kubernetes::Client::Error::Base
30
+ def initialize(**net_status)
31
+ super({code: :container_creating}.merge(net_status))
32
+ end
33
+ end
34
+
35
+ class PodInitializing < Kubernetes::Client::Error::Base
36
+ def initialize(**net_status)
37
+ super({code: :pod_initializing}.merge(net_status))
38
+ end
39
+ end
40
+ end # Pod
41
+ end # Kubernetes::Client::Error
42
+ end # Kube
43
+ end # Dapp
@@ -0,0 +1,33 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Base
5
+ attr_reader :spec
6
+
7
+ def initialize(spec)
8
+ @spec = spec
9
+ end
10
+
11
+ def metadata
12
+ spec.fetch('metadata', {})
13
+ end
14
+
15
+ def name
16
+ metadata['name']
17
+ end
18
+
19
+ def uid
20
+ metadata['uid']
21
+ end
22
+
23
+ def annotations
24
+ metadata.fetch('annotations', {})
25
+ end
26
+
27
+ def status
28
+ spec.fetch('status', {})
29
+ end
30
+ end # Base
31
+ end # Kubernetes::Client::Resource
32
+ end # Kube
33
+ end # Dapp
@@ -0,0 +1,11 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Deployment < Base
5
+ def replicas
6
+ spec.fetch('spec', {}).fetch('replicas', nil)
7
+ end
8
+ end # Deployment
9
+ end # Kubernetes::Client::Resource
10
+ end # Kube
11
+ end # Dapp
@@ -0,0 +1,8 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Event < Base
5
+ end # Event
6
+ end # Kubernetes::Client::Resource
7
+ end # Kube
8
+ end # Dapp
@@ -0,0 +1,27 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Job < Base
5
+ def uid
6
+ spec.fetch('metadata', {})['uid']
7
+ end
8
+
9
+ def terminated?
10
+ failed? || succeeded?
11
+ end
12
+
13
+ def failed?
14
+ !!spec.fetch('status', {}).fetch('conditions', []).find do |cond|
15
+ cond['type'] == 'Failed'
16
+ end
17
+ end
18
+
19
+ def succeeded?
20
+ !!spec.fetch('status', {}).fetch('conditions', []).find do |cond|
21
+ cond['type'] == 'Complete'
22
+ end
23
+ end
24
+ end # Job
25
+ end # Kubernetes::Client::Resource
26
+ end # Kube
27
+ end # Dapp
@@ -0,0 +1,62 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Pod < Base
5
+ # Returns:
6
+ # nil: no such condition yet
7
+ # "True" string: ready
8
+ # "False" string: not ready
9
+ def ready_condition_status
10
+ rd = self.ready_condition
11
+ return nil unless rd
12
+ return rd['status']
13
+ end
14
+
15
+ def ready_condition
16
+ status.fetch('conditions', {}).find {|condition| condition['type'] == 'Ready'}
17
+ end
18
+
19
+ def container_id(container_name)
20
+ container_status = spec.fetch('status', {})
21
+ .fetch('containerStatuses')
22
+ .find {|cs| cs['name'] == container_name}
23
+
24
+ if container_status
25
+ container_status['containerID']
26
+ else
27
+ nil
28
+ end
29
+ end
30
+
31
+ def container_state(container_name)
32
+ container_status = status
33
+ .fetch('containerStatuses', [])
34
+ .find {|cs| cs['name'] == container_name}
35
+
36
+ if container_status
37
+ container_state, container_state_data = container_status.fetch('state', {}).first
38
+ [container_state, container_state_data]
39
+ else
40
+ [nil, {}]
41
+ end
42
+ end
43
+
44
+ def phase
45
+ status.fetch('phase', nil)
46
+ end
47
+
48
+ def containers_names
49
+ spec.fetch('spec', {})
50
+ .fetch('containers', [])
51
+ .map {|container_spec| container_spec['name']}
52
+ end
53
+
54
+ def restart_policy
55
+ spec
56
+ .fetch('spec', {})
57
+ .fetch('restartPolicy', nil)
58
+ end
59
+ end # Pod
60
+ end # Kubernetes::Client::Resource
61
+ end # Kube
62
+ end # Dapp
@@ -0,0 +1,8 @@
1
+ module Dapp
2
+ module Kube
3
+ module Kubernetes::Client::Resource
4
+ class Replicaset < Base
5
+ end # Replicaset
6
+ end # Kubernetes::Client::Resource
7
+ end # Kube
8
+ end # Dapp