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,117 @@
1
+ module Dapp
2
+ module Downloader
3
+ module Error
4
+ class DownloadFailed < ::Exception
5
+ end
6
+ end
7
+
8
+ class BytesCount
9
+ attr_reader :bytes, :total_bytes_count
10
+
11
+ def initialize(bytes, total_bytes_count: nil)
12
+ @bytes = bytes.to_f
13
+ @total_bytes_count = total_bytes_count
14
+ end
15
+
16
+ def to_s(*a)
17
+ max_bytes = @total_bytes_count || self
18
+ width = sprintf("%.2f", max_bytes.bytes/1024/1024).bytesize
19
+ sprintf("%#{width}.2f", @bytes/1024/1024)
20
+ end
21
+
22
+ [:+, :-, :*, :/].each do |method|
23
+ define_method(method) do |arg|
24
+ res = case arg
25
+ when BytesCount
26
+ @bytes.send(method, arg.bytes)
27
+ else
28
+ @bytes.send(method, arg)
29
+ end
30
+ self.class.new(res, total_bytes_count: total_bytes_count)
31
+ end
32
+ end
33
+
34
+ [:>, :<, :==].each do |method|
35
+ define_method(method) do |arg|
36
+ case arg
37
+ when BytesCount
38
+ @bytes.send(method, arg.bytes)
39
+ else
40
+ @bytes.send(method, arg)
41
+ end
42
+ end
43
+ end
44
+
45
+ def method_missing(method, *args, &blk)
46
+ case method
47
+ when :to_f, :to_i
48
+ @bytes.send(method, *args, &blk)
49
+ else
50
+ raise
51
+ end
52
+ end
53
+ end # BytesCount
54
+
55
+ class << self
56
+ def download(url, destination, show_progress: false, progress_titile: nil)
57
+ resp = nil
58
+ location = URI(url)
59
+ done = false
60
+ state = {}
61
+
62
+ loop do
63
+ Net::HTTP.start(location.host, location.port, use_ssl: true) do |http|
64
+ req = Net::HTTP::Get.new location
65
+ http.request req do |resp|
66
+ case resp
67
+ when Net::HTTPRedirection
68
+ location = URI(resp["location"])
69
+ next
70
+ when Net::HTTPSuccess
71
+ File.open(destination, "wb") do |file|
72
+ file_size_bytes = nil
73
+ file_size_bytes = BytesCount.new(resp.to_hash["content-length"].first.to_f) if show_progress
74
+
75
+ if show_progress
76
+ old_DEFAULT_BEGINNING_POSITION = ProgressBar::Progress.send(:remove_const, :DEFAULT_BEGINNING_POSITION)
77
+ ProgressBar::Progress.send(:const_set, :DEFAULT_BEGINNING_POSITION, BytesCount.new(0, total_bytes_count: file_size_bytes))
78
+ end
79
+
80
+ begin
81
+ progressbar = nil
82
+ progressbar = ProgressBar.create(
83
+ format: " %cMB / %CMB %B %t",
84
+ starting_at: BytesCount.new(0, total_bytes_count: file_size_bytes),
85
+ total: file_size_bytes,
86
+ progress_mark: "#",
87
+ remainder_mark: ".",
88
+ title: progress_titile,
89
+ length: 100,
90
+ autofinish: true
91
+ ) if show_progress
92
+
93
+ resp.read_body do |segment|
94
+ progressbar.progress = progressbar.progress + segment.bytesize if show_progress
95
+ file.write segment
96
+ end
97
+ ensure
98
+ if show_progress
99
+ ProgressBar::Progress.send(:remove_const, :DEFAULT_BEGINNING_POSITION)
100
+ ProgressBar::Progress.send(:const_set, :DEFAULT_BEGINNING_POSITION, old_DEFAULT_BEGINNING_POSITION)
101
+ end
102
+ end
103
+ end # File.open
104
+
105
+ done = true
106
+ else
107
+ raise Error::DownloadFailed, "Failed to download #{url}: #{resp.code} #{resp.message}"
108
+ end # when
109
+ end # http.request
110
+ end # Net::HTTP.start
111
+
112
+ break if done
113
+ end # loop
114
+ end
115
+ end
116
+ end # Downloader
117
+ end # Dapp
@@ -1,9 +1,5 @@
1
1
  module Dapp
2
2
  module Error
3
- class Base < NetStatus::Exception
4
- def initialize(net_status = {})
5
- super({ context: self.class.to_s.split('::').last.downcase }.merge(net_status))
6
- end
7
- end
3
+ class Base < NetStatus::Exception; end
8
4
  end
9
5
  end
@@ -0,0 +1,5 @@
1
+ module Dapp
2
+ module Error
3
+ class Command < Default; end
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Dapp
2
+ module Error
3
+ class Config < Default; end
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module Dapp
2
2
  module Error
3
- class Dapp < Base; end
3
+ class Dapp < Default; end
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module Dapp
2
2
  module Error
3
- class Dappfile < Base; end
3
+ class Dappfile < Default; end
4
4
  end
5
5
  end
@@ -0,0 +1,11 @@
1
+ module Dapp
2
+ module Error
3
+ class Default < Base
4
+ include Mod::User
5
+
6
+ def initialize(net_status = {})
7
+ super({ context: self.class.to_s.split('::').last.downcase }.merge(net_status))
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Dapp
2
+ module Error
3
+ module Mod
4
+ module User
5
+ def user?
6
+ true
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  module Dapp
2
2
  module Error
3
- class Shellout < Base; end
3
+ class Shellout < Default; end
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  module Dapp
2
2
  module Exception
3
- class Base < Error::Base; end
3
+ class Base < Error::Default; end
4
4
  end
5
5
  end
@@ -0,0 +1,17 @@
1
+ module Dapp
2
+ module Helper
3
+ module CaseConversion
4
+ class << self
5
+ def snake_case_to_camel_case(value)
6
+ value.to_s.split('_').collect(&:capitalize).join
7
+ end
8
+
9
+ def snake_case_to_lower_camel_case(value)
10
+ res = snake_case_to_camel_case(value)
11
+ res[0] = res[0].downcase
12
+ res
13
+ end
14
+ end # << self
15
+ end # CaseConversion
16
+ end # Helper
17
+ end # Dapp
@@ -10,20 +10,23 @@ module Dapp
10
10
  def cli_wrapper(cli)
11
11
  yield
12
12
  rescue OptionParser::MissingArgument, OptionParser::InvalidOption, OptionParser::InvalidArgument, OptionParser::AmbiguousOption => e
13
- STDERR.puts "Error: #{e.message}"
14
- puts
15
- puts cli.opt_parser
16
- exit 1
13
+ print_error_with_help_and_die!(cli, e.message)
17
14
  end
18
15
 
19
- def required_argument(cli)
16
+ def required_argument(cli, argument)
20
17
  unless (arg = cli.cli_arguments.pop)
21
- puts cli.opt_parser
22
- exit 1
18
+ print_error_with_help_and_die!(cli, "required argument `#{argument.upcase}`")
23
19
  end
24
20
  arg
25
21
  end
26
22
 
23
+ def print_error_with_help_and_die!(cli, error_message)
24
+ STDERR.puts "Error: #{error_message}"
25
+ puts
26
+ puts cli.opt_parser
27
+ exit 1
28
+ end
29
+
27
30
  def parse_subcommand(cli, args)
28
31
  argv = args
29
32
  divided_subcommand = []
@@ -67,6 +70,14 @@ module Dapp
67
70
  @composite_options ||= {}
68
71
  @composite_options[opt] ||= []
69
72
  end
73
+
74
+ def in_validate!(v, list)
75
+ raise OptionParser::InvalidArgument, "`#{v}` is not included in the list [#{list_msg_format(list)}]" unless list.include?(v)
76
+ end
77
+
78
+ def list_msg_format(list)
79
+ list.map { |s| "'#{s}'"}.join(', ')
80
+ end
70
81
  end
71
82
  end # Helper
72
83
  end # Dapp
@@ -8,7 +8,11 @@ module Dapp
8
8
 
9
9
  def message(exception)
10
10
  net_status = net_status(exception)
11
- net_status[:message] || [net_status[:error], net_status[:code]].compact.join(': ')
11
+ net_status[:message] || begin
12
+ data = net_status[:data].reject {|k, _| k == :backtrace}
13
+ data = nil if data.empty?
14
+ [net_status[:error], [net_status[:context], net_status[:code]].compact.join('.'), data].compact.join(': ')
15
+ end
12
16
  end
13
17
 
14
18
  def before_error_message(exception)
@@ -13,7 +13,7 @@ module Dapp
13
13
  end
14
14
 
15
15
  def sha256(arg)
16
- Digest::SHA256.hexdigest Array(arg).compact.map(&:to_s).join(':::')
16
+ Digest::SHA256.hexdigest Array(arg).flatten.compact.map(&:to_s).join(':::')
17
17
  end
18
18
  end
19
19
  end # Helper
@@ -0,0 +1,31 @@
1
+ module Dapp
2
+ module Helper
3
+ module Tar
4
+ def tar_write(path)
5
+ File.open(path, File::RDWR | File::CREAT) do |f|
6
+ Gem::Package::TarWriter.new(f) do |tar|
7
+ yield tar if block_given?
8
+ end
9
+ end
10
+ end
11
+
12
+ def tar_read(path)
13
+ File.open(path, File::RDONLY) do |f|
14
+ Gem::Package::TarReader.new(f) do |tar|
15
+ yield tar if block_given?
16
+ end
17
+ end
18
+ end
19
+
20
+ def tar_gz_read(path)
21
+ File.open(path, File::RDONLY) do |f_gz|
22
+ Zlib::GzipReader.wrap(f_gz) do |f|
23
+ Gem::Package::TarReader.new(f) do |tar|
24
+ yield tar if block_given?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end # Tar
30
+ end # Helper
31
+ end # Dapp
@@ -24,7 +24,46 @@ module Dapp
24
24
  end
25
25
  end
26
26
 
27
- def self.class_to_lowercase(class_name = self.class)
27
+ def make_path(base, *path)
28
+ Pathname.new(File.join(base.to_s, *path.compact.map(&:to_s)))
29
+ end
30
+
31
+ def ignore_path?(path, paths: [], exclude_paths: [])
32
+ ignore_path_base(path, exclude_paths: exclude_paths) do
33
+ paths.empty? ||
34
+ paths.any? do |p|
35
+ File.fnmatch?(p, path, File::FNM_PATHNAME|File::FNM_DOTMATCH) ||
36
+ File.fnmatch?(File.join(p, '**', '*'), path, File::FNM_PATHNAME|File::FNM_DOTMATCH)
37
+ end
38
+ end
39
+ end
40
+
41
+ def ignore_path_base(path, exclude_paths: [])
42
+ is_exclude_path = exclude_paths.any? { |p| check_path?(path, p) }
43
+ is_include_path = yield
44
+ is_exclude_path || !is_include_path
45
+ end
46
+
47
+ def check_path?(path, format)
48
+ path_checker(path) { |checking_path| File.fnmatch(format, checking_path, File::FNM_PATHNAME|File::FNM_DOTMATCH) }
49
+ end
50
+
51
+ def check_subpath?(path, format)
52
+ path_checker(format) { |checking_path| File.fnmatch(checking_path, path, File::FNM_PATHNAME|File::FNM_DOTMATCH) }
53
+ end
54
+
55
+ def path_checker(path)
56
+ path_parts = path.split('/')
57
+ checking_path = nil
58
+
59
+ until path_parts.empty?
60
+ checking_path = [checking_path, path_parts.shift].compact.join('/')
61
+ return true if yield checking_path
62
+ end
63
+ false
64
+ end
65
+
66
+ def self.class_to_lowercase(class_name = self)
28
67
  class_name.to_s.split('::').last.split(/(?=[[:upper:]]|[0-9])/).join('_').downcase.to_s
29
68
  end
30
69
  end # Trivia
@@ -0,0 +1,23 @@
1
+ module Dapp
2
+ module Helper
3
+ module Url
4
+ def git_url_to_name(url)
5
+ url_without_scheme = url.split("://", 2).last
6
+ # This may be broken, because "@" should delimit creds, not a ":"
7
+ url_without_creds = url_without_scheme.split(":", 2).last
8
+ url_without_creds.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
9
+ end
10
+
11
+ def get_host_from_git_url(url)
12
+ url_without_scheme = url.split("://", 2).last
13
+ url_without_creds = url_without_scheme.split("@", 2).last
14
+
15
+ # Split out part after ":" in this kind of url: github.com:flant/dapp.git
16
+ url_part = url_without_creds.split(":", 2).first
17
+
18
+ # Split out part after first "/": github.com/flant/dapp.git
19
+ url_part.split("/", 2).first
20
+ end
21
+ end # Url
22
+ end # Helper
23
+ end # Dapp
@@ -0,0 +1,24 @@
1
+ module Dapp
2
+ module Helper
3
+ module YAML
4
+ def yaml_load_file(file_path, hash: true, default: {})
5
+ return default if (context = File.read(file_path).strip).empty?
6
+ yaml_load(context, hash: hash)
7
+ rescue ::Dapp::Error::Dapp => e
8
+ raise ::Dapp::Error::Dapp, code: :yaml_file_incorrect, data: { file: file_path, message: e.net_status[:data][:message] }
9
+ end
10
+
11
+ def yaml_load(string, hash: true)
12
+ ::YAML::load(string).tap do |res|
13
+ if hash && !res.is_a?(Hash)
14
+ raise ::Dapp::Error::Dapp,
15
+ code: :yaml_incorrect,
16
+ data: { message: "unexpected yaml data \n>>> START YAML\n#{string.strip}\n>>> END YAML\n" }
17
+ end
18
+ end
19
+ rescue Psych::SyntaxError => e
20
+ raise ::Dapp::Error::Dapp, code: :yaml_incorrect, data: { message: e.message }
21
+ end
22
+ end
23
+ end # Helper
24
+ end # Dapp
@@ -0,0 +1 @@
1
+ ::Dapp::CLI.send(:include, ::Dapp::Kube::CLI::Command)
@@ -0,0 +1,14 @@
1
+ module Dapp::Kube::CLI
2
+ module Command
3
+ class Base < ::Dapp::CLI::Command::Base
4
+ def run(argv = ARGV)
5
+ self.class.parse_options(self, argv)
6
+ run_dapp_command(run_method, options: cli_options)
7
+ end
8
+
9
+ def run_method
10
+ :"kube_#{class_to_lowercase}"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class ChartCreate < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp kube chart create [options]
8
+
9
+ Options:
10
+ BANNER
11
+
12
+ option :force,
13
+ long: '--force',
14
+ short: '-f',
15
+ description: 'Delete existing chart',
16
+ default: false
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,80 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class Deploy < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp deployment deploy [options] REPO
8
+
9
+ Options:
10
+ BANNER
11
+ extend ::Dapp::CLI::Options::Tag
12
+ extend ::Dapp::CLI::Options::Ssh
13
+
14
+ option :namespace,
15
+ long: '--namespace NAME',
16
+ default: nil
17
+
18
+ option :context,
19
+ long: '--context NAME',
20
+ default: nil
21
+
22
+ option :image_version,
23
+ long: '--image-version TAG',
24
+ description: "Custom tag (alias for --tag)",
25
+ default: [],
26
+ proc: proc { |v| composite_options(:image_versions) << v }
27
+
28
+ option :tmp_dir_prefix,
29
+ long: '--tmp-dir-prefix PREFIX',
30
+ description: 'Tmp directory prefix (/tmp by default). Used for build process service directories.'
31
+
32
+ option :helm_set_options,
33
+ long: '--set STRING_ARRAY',
34
+ default: [],
35
+ proc: proc { |v| composite_options(:helm_set) << v }
36
+
37
+ option :helm_values_options,
38
+ long: '--values FILE_PATH',
39
+ default: [],
40
+ proc: proc { |v| composite_options(:helm_values) << v }
41
+
42
+ option :helm_secret_values_options,
43
+ long: '--secret-values FILE_PATH',
44
+ default: [],
45
+ proc: proc { |v| composite_options(:helm_secret_values) << v }
46
+
47
+ option :timeout,
48
+ long: '--timeout INTEGER_SECONDS',
49
+ default: nil,
50
+ description: 'Default timeout to wait for resources to become ready, 300 seconds by default.',
51
+ proc: proc {|v| Integer(v)}
52
+
53
+ option :kubernetes_timeout,
54
+ long: '--kubernetes-timeout TIMEOUT',
55
+ description: 'Kubernetes api-server tcp connection, read and write timeout (in seconds)',
56
+ proc: ->(v) { v.to_i }
57
+
58
+ option :registry_username,
59
+ long: '--registry-username USERNAME'
60
+
61
+ option :registry_password,
62
+ long: '--registry-password PASSWORD'
63
+
64
+ option :without_registry,
65
+ long: "--without-registry",
66
+ default: false,
67
+ boolean: true,
68
+ description: "Do not connect to docker registry to obtain docker image ids of dimgs being deployed."
69
+
70
+ def run(argv = ARGV)
71
+ self.class.parse_options(self, argv)
72
+
73
+ options = cli_options
74
+ options[:tag] = [*options.delete(:tag), *options.delete(:image_version)]
75
+ options[:repo] = self.class.required_argument(self, 'repo')
76
+ run_dapp_command(run_method, options: options)
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,31 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class Dismiss < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp kube dismiss [options]
8
+
9
+ Options:
10
+ BANNER
11
+
12
+ option :namespace,
13
+ long: '--namespace NAME',
14
+ default: nil
15
+
16
+ option :context,
17
+ long: '--context NAME',
18
+ default: nil
19
+
20
+ option :with_namespace,
21
+ long: '--with-namespace',
22
+ default: false
23
+
24
+ option :kubernetes_timeout,
25
+ long: '--kubernetes-timeout TIMEOUT',
26
+ description: 'Kubernetes api-server tcp connection, read and write timeout (in seconds)',
27
+ proc: ->(v) { v.to_i }
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,53 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class Lint < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp kube lint [options] REPO
8
+
9
+ Options:
10
+ BANNER
11
+ extend ::Dapp::CLI::Options::Tag
12
+
13
+ option :namespace,
14
+ long: '--namespace NAME',
15
+ default: nil
16
+
17
+ option :context,
18
+ long: '--context NAME',
19
+ default: nil
20
+
21
+ option :helm_set_options,
22
+ long: '--set STRING_ARRAY',
23
+ default: [],
24
+ proc: proc { |v| composite_options(:helm_set) << v }
25
+
26
+ option :helm_values_options,
27
+ long: '--values FILE_PATH',
28
+ default: [],
29
+ proc: proc { |v| composite_options(:helm_values) << v }
30
+
31
+ option :helm_secret_values_options,
32
+ long: '--secret-values FILE_PATH',
33
+ default: [],
34
+ proc: proc { |v| composite_options(:helm_secret_values) << v }
35
+
36
+ option :registry_username,
37
+ long: '--registry-username USERNAME'
38
+
39
+ option :registry_password,
40
+ long: '--registry-password PASSWORD'
41
+
42
+ def run(argv = ARGV)
43
+ self.class.parse_options(self, argv)
44
+ repo = self.class.required_argument(self, 'repo')
45
+ run_dapp_command(run_method, options: cli_options(repo: repo))
46
+ end
47
+
48
+ def log_running_time
49
+ false
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,19 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class MinikubeSetup < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp kube minikube setup
8
+
9
+ Options:
10
+ BANNER
11
+
12
+ option :kubernetes_timeout,
13
+ long: '--kubernetes-timeout TIMEOUT',
14
+ description: 'Kubernetes api-server tcp connection, read and write timeout (in seconds)',
15
+ proc: ->(v) { v.to_i }
16
+
17
+ end
18
+ end
19
+ end