dapp 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +5 -5
  3. data/config/en/common.yml +6 -4
  4. data/config/en/net_status.yml +8 -7
  5. data/lib/dapp.rb +157 -139
  6. data/lib/dapp/cli.rb +6 -16
  7. data/lib/dapp/cli/base.rb +3 -5
  8. data/lib/dapp/config/base.rb +19 -7
  9. data/lib/dapp/config/directive/base.rb +0 -1
  10. data/lib/dapp/config/error/config.rb +7 -0
  11. data/lib/dapp/core_ext/hash.rb +0 -2
  12. data/lib/dapp/core_ext/pathname.rb +1 -3
  13. data/lib/dapp/{project.rb → dapp.rb} +2 -21
  14. data/lib/dapp/{project → dapp}/chef.rb +2 -4
  15. data/lib/dapp/{project → dapp}/dappfile.rb +5 -7
  16. data/lib/dapp/{project → dapp}/deps/base.rb +3 -6
  17. data/lib/dapp/{project → dapp}/deps/gitartifact.rb +2 -5
  18. data/lib/dapp/{project → dapp}/git_artifact.rb +2 -4
  19. data/lib/dapp/{project → dapp}/lock.rb +3 -5
  20. data/lib/dapp/{project → dapp}/logging/base.rb +2 -5
  21. data/lib/dapp/{project → dapp}/logging/i18n.rb +2 -3
  22. data/lib/dapp/{project → dapp}/logging/paint.rb +2 -4
  23. data/lib/dapp/{project → dapp}/logging/process.rb +2 -5
  24. data/lib/dapp/{project → dapp}/shellout/base.rb +2 -4
  25. data/lib/dapp/{project → dapp}/shellout/streaming.rb +3 -8
  26. data/lib/dapp/{project → dapp}/ssh_agent.rb +6 -9
  27. data/lib/dapp/dimg.rb +1 -192
  28. data/lib/dapp/dimg/artifact.rb +24 -0
  29. data/lib/dapp/dimg/build/stage/after_install_artifact.rb +14 -0
  30. data/lib/dapp/dimg/build/stage/after_setup_artifact.rb +18 -0
  31. data/lib/dapp/dimg/build/stage/artifact_base.rb +80 -0
  32. data/lib/dapp/dimg/build/stage/artifact_default.rb +63 -0
  33. data/lib/dapp/dimg/build/stage/base.rb +210 -0
  34. data/lib/dapp/dimg/build/stage/before_install.rb +33 -0
  35. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +14 -0
  36. data/lib/dapp/dimg/build/stage/before_setup.rb +31 -0
  37. data/lib/dapp/dimg/build/stage/before_setup_artifact.rb +14 -0
  38. data/lib/dapp/dimg/build/stage/build_artifact.rb +31 -0
  39. data/lib/dapp/dimg/build/stage/docker_instructions.rb +25 -0
  40. data/lib/dapp/dimg/build/stage/from.rb +50 -0
  41. data/lib/dapp/dimg/build/stage/ga_archive.rb +28 -0
  42. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +27 -0
  43. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +22 -0
  44. data/lib/dapp/dimg/build/stage/ga_base.rb +80 -0
  45. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +20 -0
  46. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +54 -0
  47. data/lib/dapp/dimg/build/stage/import_artifact.rb +64 -0
  48. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +22 -0
  49. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +22 -0
  50. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +22 -0
  51. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +22 -0
  52. data/lib/dapp/dimg/build/stage/install/install.rb +35 -0
  53. data/lib/dapp/dimg/build/stage/mod/group.rb +42 -0
  54. data/lib/dapp/dimg/build/stage/mod/logging.rb +101 -0
  55. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +22 -0
  56. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +32 -0
  57. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +22 -0
  58. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +22 -0
  59. data/lib/dapp/dimg/build/stage/setup/setup.rb +35 -0
  60. data/lib/dapp/dimg/builder.rb +6 -0
  61. data/lib/dapp/{builder → dimg/builder}/base.rb +4 -5
  62. data/lib/dapp/{builder → dimg/builder}/chef.rb +41 -33
  63. data/lib/dapp/dimg/builder/chef/berksfile.rb +121 -0
  64. data/lib/dapp/dimg/builder/chef/cookbook.rb +285 -0
  65. data/lib/dapp/dimg/builder/chef/cookbook_metadata.rb +106 -0
  66. data/lib/dapp/{builder → dimg/builder}/none.rb +4 -5
  67. data/lib/dapp/{builder → dimg/builder}/shell.rb +5 -6
  68. data/lib/dapp/dimg/cli/base.rb +16 -0
  69. data/lib/dapp/dimg/cli/bp.rb +37 -0
  70. data/lib/dapp/dimg/cli/build.rb +64 -0
  71. data/lib/dapp/dimg/cli/build_context.rb +18 -0
  72. data/lib/dapp/dimg/cli/build_context/export.rb +26 -0
  73. data/lib/dapp/dimg/cli/build_context/import.rb +17 -0
  74. data/lib/dapp/dimg/cli/cleanup.rb +22 -0
  75. data/lib/dapp/dimg/cli/cli.rb +1 -0
  76. data/lib/dapp/dimg/cli/dimg.rb +30 -0
  77. data/lib/dapp/dimg/cli/list.rb +17 -0
  78. data/lib/dapp/dimg/cli/mrproper.rb +26 -0
  79. data/lib/dapp/dimg/cli/push.rb +61 -0
  80. data/lib/dapp/dimg/cli/run.rb +59 -0
  81. data/lib/dapp/{cli → dimg/cli}/spush.rb +7 -7
  82. data/lib/dapp/dimg/cli/stage_image.rb +24 -0
  83. data/lib/dapp/dimg/cli/stages.rb +22 -0
  84. data/lib/dapp/dimg/cli/stages/cleanup_local.rb +44 -0
  85. data/lib/dapp/dimg/cli/stages/cleanup_repo.rb +26 -0
  86. data/lib/dapp/dimg/cli/stages/flush_local.rb +23 -0
  87. data/lib/dapp/dimg/cli/stages/flush_repo.rb +24 -0
  88. data/lib/dapp/dimg/cli/stages/pull.rb +28 -0
  89. data/lib/dapp/dimg/cli/stages/push.rb +24 -0
  90. data/lib/dapp/dimg/cli/tag.rb +24 -0
  91. data/lib/dapp/dimg/config/artifact_dimg.rb +17 -0
  92. data/lib/dapp/dimg/config/artifact_group.rb +47 -0
  93. data/lib/dapp/dimg/config/base.rb +7 -0
  94. data/lib/dapp/dimg/config/dimg.rb +24 -0
  95. data/lib/dapp/dimg/config/dimg/instance_methods.rb +177 -0
  96. data/lib/dapp/dimg/config/dimg/validation.rb +126 -0
  97. data/lib/dapp/dimg/config/dimg_group.rb +61 -0
  98. data/lib/dapp/dimg/config/dimg_group_base.rb +54 -0
  99. data/lib/dapp/dimg/config/dimg_group_main.rb +22 -0
  100. data/lib/dapp/dimg/config/directive/artifact.rb +70 -0
  101. data/lib/dapp/dimg/config/directive/artifact_base.rb +97 -0
  102. data/lib/dapp/dimg/config/directive/base.rb +9 -0
  103. data/lib/dapp/dimg/config/directive/chef.rb +68 -0
  104. data/lib/dapp/dimg/config/directive/docker/artifact.rb +15 -0
  105. data/lib/dapp/dimg/config/directive/docker/base.rb +22 -0
  106. data/lib/dapp/dimg/config/directive/docker/dimg.rb +82 -0
  107. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +47 -0
  108. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +58 -0
  109. data/lib/dapp/dimg/config/directive/mount.rb +27 -0
  110. data/lib/dapp/dimg/config/directive/shell/artifact.rb +18 -0
  111. data/lib/dapp/dimg/config/directive/shell/dimg.rb +65 -0
  112. data/lib/dapp/dimg/dapp/command.rb +21 -0
  113. data/lib/dapp/dimg/dapp/command/bp.rb +20 -0
  114. data/lib/dapp/dimg/dapp/command/build.rb +22 -0
  115. data/lib/dapp/dimg/dapp/command/build_context/common.rb +27 -0
  116. data/lib/dapp/dimg/dapp/command/build_context/export.rb +55 -0
  117. data/lib/dapp/dimg/dapp/command/build_context/import.rb +71 -0
  118. data/lib/dapp/dimg/dapp/command/cleanup.rb +23 -0
  119. data/lib/dapp/dimg/dapp/command/common.rb +96 -0
  120. data/lib/dapp/dimg/dapp/command/list.rb +19 -0
  121. data/lib/dapp/dimg/dapp/command/mrproper.rb +75 -0
  122. data/lib/dapp/dimg/dapp/command/push.rb +27 -0
  123. data/lib/dapp/dimg/dapp/command/run.rb +15 -0
  124. data/lib/dapp/dimg/dapp/command/spush.rb +17 -0
  125. data/lib/dapp/dimg/dapp/command/stage_image.rb +14 -0
  126. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +137 -0
  127. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +124 -0
  128. data/lib/dapp/dimg/dapp/command/stages/common.rb +85 -0
  129. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +21 -0
  130. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +21 -0
  131. data/lib/dapp/dimg/dapp/command/stages/pull.rb +26 -0
  132. data/lib/dapp/dimg/dapp/command/stages/push.rb +22 -0
  133. data/lib/dapp/dimg/dapp/command/tag.rb +17 -0
  134. data/lib/dapp/dimg/dimg.rb +192 -0
  135. data/lib/dapp/dimg/dimg/git_artifact.rb +26 -0
  136. data/lib/dapp/dimg/dimg/path.rb +37 -0
  137. data/lib/dapp/dimg/dimg/stages.rb +60 -0
  138. data/lib/dapp/dimg/dimg/tags.rb +65 -0
  139. data/lib/dapp/dimg/docker_registry.rb +37 -0
  140. data/lib/dapp/dimg/docker_registry/base.rb +109 -0
  141. data/lib/dapp/dimg/docker_registry/base/authorization.rb +63 -0
  142. data/lib/dapp/dimg/docker_registry/base/request.rb +34 -0
  143. data/lib/dapp/dimg/docker_registry/default.rb +18 -0
  144. data/lib/dapp/dimg/error/base.rb +7 -0
  145. data/lib/dapp/dimg/error/build.rb +7 -0
  146. data/lib/dapp/dimg/error/chef.rb +11 -0
  147. data/lib/dapp/dimg/error/command.rb +7 -0
  148. data/lib/dapp/dimg/error/config.rb +7 -0
  149. data/lib/dapp/dimg/error/dimg.rb +7 -0
  150. data/lib/dapp/dimg/error/lock.rb +7 -0
  151. data/lib/dapp/dimg/error/registry.rb +7 -0
  152. data/lib/dapp/dimg/error/rugged.rb +7 -0
  153. data/lib/dapp/dimg/error/shellout.rb +7 -0
  154. data/lib/dapp/dimg/error/tar_writer.rb +7 -0
  155. data/lib/dapp/dimg/exception/base.rb +7 -0
  156. data/lib/dapp/dimg/exception/introspect_image.rb +7 -0
  157. data/lib/dapp/dimg/exception/registry.rb +7 -0
  158. data/lib/dapp/dimg/filelock.rb +43 -0
  159. data/lib/dapp/dimg/git_artifact.rb +241 -18
  160. data/lib/dapp/dimg/git_repo/base.rb +90 -0
  161. data/lib/dapp/dimg/git_repo/own.rb +39 -0
  162. data/lib/dapp/dimg/git_repo/remote.rb +50 -0
  163. data/lib/dapp/dimg/image/argument.rb +143 -0
  164. data/lib/dapp/dimg/image/docker.rb +127 -0
  165. data/lib/dapp/dimg/image/scratch.rb +32 -0
  166. data/lib/dapp/dimg/image/stage.rb +95 -0
  167. data/lib/dapp/dimg/lock/base.rb +51 -0
  168. data/lib/dapp/dimg/lock/file.rb +48 -0
  169. data/lib/dapp/error/base.rb +0 -1
  170. data/lib/dapp/error/dapp.rb +5 -0
  171. data/lib/dapp/error/dappfile.rb +0 -1
  172. data/lib/dapp/error/shellout.rb +0 -1
  173. data/lib/dapp/exception/base.rb +0 -1
  174. data/lib/dapp/helper/cli.rb +5 -6
  175. data/lib/dapp/helper/net_status.rb +0 -1
  176. data/lib/dapp/helper/sha256.rb +0 -1
  177. data/lib/dapp/helper/trivia.rb +0 -1
  178. data/lib/dapp/prctl.rb +0 -1
  179. data/lib/dapp/version.rb +1 -2
  180. metadata +172 -140
  181. data/lib/dapp/artifact.rb +0 -23
  182. data/lib/dapp/build/stage/after_install_artifact.rb +0 -13
  183. data/lib/dapp/build/stage/after_setup_artifact.rb +0 -17
  184. data/lib/dapp/build/stage/artifact_base.rb +0 -80
  185. data/lib/dapp/build/stage/artifact_default.rb +0 -63
  186. data/lib/dapp/build/stage/base.rb +0 -203
  187. data/lib/dapp/build/stage/before_install.rb +0 -32
  188. data/lib/dapp/build/stage/before_install_artifact.rb +0 -13
  189. data/lib/dapp/build/stage/before_setup.rb +0 -30
  190. data/lib/dapp/build/stage/before_setup_artifact.rb +0 -13
  191. data/lib/dapp/build/stage/build_artifact.rb +0 -36
  192. data/lib/dapp/build/stage/docker_instructions.rb +0 -24
  193. data/lib/dapp/build/stage/from.rb +0 -34
  194. data/lib/dapp/build/stage/ga_archive.rb +0 -27
  195. data/lib/dapp/build/stage/ga_archive_dependencies.rb +0 -26
  196. data/lib/dapp/build/stage/ga_artifact_patch.rb +0 -21
  197. data/lib/dapp/build/stage/ga_base.rb +0 -79
  198. data/lib/dapp/build/stage/ga_dependencies_base.rb +0 -19
  199. data/lib/dapp/build/stage/ga_latest_patch.rb +0 -53
  200. data/lib/dapp/build/stage/import_artifact.rb +0 -65
  201. data/lib/dapp/build/stage/install/ga_post_install_patch.rb +0 -21
  202. data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +0 -21
  203. data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +0 -21
  204. data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -21
  205. data/lib/dapp/build/stage/install/install.rb +0 -40
  206. data/lib/dapp/build/stage/mod/group.rb +0 -42
  207. data/lib/dapp/build/stage/mod/logging.rb +0 -104
  208. data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +0 -21
  209. data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -31
  210. data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +0 -21
  211. data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -21
  212. data/lib/dapp/build/stage/setup/setup.rb +0 -40
  213. data/lib/dapp/builder/chef/berksfile.rb +0 -78
  214. data/lib/dapp/builder/chef/cookbook.rb +0 -257
  215. data/lib/dapp/builder/chef/cookbook_metadata.rb +0 -54
  216. data/lib/dapp/builder/chef/error.rb +0 -12
  217. data/lib/dapp/cli/bp.rb +0 -37
  218. data/lib/dapp/cli/build.rb +0 -60
  219. data/lib/dapp/cli/cleanup.rb +0 -22
  220. data/lib/dapp/cli/list.rb +0 -17
  221. data/lib/dapp/cli/mrproper.rb +0 -26
  222. data/lib/dapp/cli/push.rb +0 -61
  223. data/lib/dapp/cli/run.rb +0 -53
  224. data/lib/dapp/cli/stage_image.rb +0 -24
  225. data/lib/dapp/cli/stages.rb +0 -23
  226. data/lib/dapp/cli/stages/cleanup_local.rb +0 -44
  227. data/lib/dapp/cli/stages/cleanup_repo.rb +0 -26
  228. data/lib/dapp/cli/stages/flush_local.rb +0 -23
  229. data/lib/dapp/cli/stages/flush_repo.rb +0 -24
  230. data/lib/dapp/cli/stages/pull.rb +0 -28
  231. data/lib/dapp/cli/stages/push.rb +0 -24
  232. data/lib/dapp/cli/tag.rb +0 -24
  233. data/lib/dapp/config/artifact_dimg.rb +0 -20
  234. data/lib/dapp/config/artifact_group.rb +0 -56
  235. data/lib/dapp/config/dimg.rb +0 -23
  236. data/lib/dapp/config/dimg/instance_methods.rb +0 -194
  237. data/lib/dapp/config/dimg/validation.rb +0 -125
  238. data/lib/dapp/config/dimg_group.rb +0 -60
  239. data/lib/dapp/config/dimg_group_base.rb +0 -53
  240. data/lib/dapp/config/dimg_group_main.rb +0 -21
  241. data/lib/dapp/config/directive/artifact.rb +0 -69
  242. data/lib/dapp/config/directive/artifact_base.rb +0 -93
  243. data/lib/dapp/config/directive/chef.rb +0 -57
  244. data/lib/dapp/config/directive/docker/artifact.rb +0 -15
  245. data/lib/dapp/config/directive/docker/base.rb +0 -20
  246. data/lib/dapp/config/directive/docker/dimg.rb +0 -81
  247. data/lib/dapp/config/directive/git_artifact_local.rb +0 -13
  248. data/lib/dapp/config/directive/git_artifact_remote.rb +0 -57
  249. data/lib/dapp/config/directive/mount.rb +0 -26
  250. data/lib/dapp/config/directive/shell/artifact.rb +0 -17
  251. data/lib/dapp/config/directive/shell/dimg.rb +0 -65
  252. data/lib/dapp/dimg/path.rb +0 -37
  253. data/lib/dapp/dimg/stages.rb +0 -59
  254. data/lib/dapp/dimg/tags.rb +0 -65
  255. data/lib/dapp/docker_registry.rb +0 -36
  256. data/lib/dapp/docker_registry/base.rb +0 -109
  257. data/lib/dapp/docker_registry/default.rb +0 -18
  258. data/lib/dapp/docker_registry/mod/authorization.rb +0 -63
  259. data/lib/dapp/docker_registry/mod/request.rb +0 -32
  260. data/lib/dapp/error/build.rb +0 -6
  261. data/lib/dapp/error/config.rb +0 -6
  262. data/lib/dapp/error/dimg.rb +0 -6
  263. data/lib/dapp/error/image.rb +0 -6
  264. data/lib/dapp/error/project.rb +0 -6
  265. data/lib/dapp/error/registry.rb +0 -6
  266. data/lib/dapp/error/rugged.rb +0 -6
  267. data/lib/dapp/error/tar_writer.rb +0 -6
  268. data/lib/dapp/exception/introspect_image.rb +0 -6
  269. data/lib/dapp/exception/registry.rb +0 -6
  270. data/lib/dapp/filelock.rb +0 -43
  271. data/lib/dapp/git_artifact.rb +0 -241
  272. data/lib/dapp/git_repo/base.rb +0 -88
  273. data/lib/dapp/git_repo/own.rb +0 -38
  274. data/lib/dapp/git_repo/remote.rb +0 -49
  275. data/lib/dapp/image/argument.rb +0 -134
  276. data/lib/dapp/image/docker.rb +0 -115
  277. data/lib/dapp/image/scratch.rb +0 -32
  278. data/lib/dapp/image/stage.rb +0 -94
  279. data/lib/dapp/lock/base.rb +0 -51
  280. data/lib/dapp/lock/error.rb +0 -14
  281. data/lib/dapp/lock/file.rb +0 -45
  282. data/lib/dapp/project/command/bp.rb +0 -21
  283. data/lib/dapp/project/command/build.rb +0 -20
  284. data/lib/dapp/project/command/cleanup.rb +0 -24
  285. data/lib/dapp/project/command/common.rb +0 -96
  286. data/lib/dapp/project/command/list.rb +0 -20
  287. data/lib/dapp/project/command/mrproper.rb +0 -69
  288. data/lib/dapp/project/command/push.rb +0 -28
  289. data/lib/dapp/project/command/run.rb +0 -15
  290. data/lib/dapp/project/command/spush.rb +0 -18
  291. data/lib/dapp/project/command/stage_image.rb +0 -15
  292. data/lib/dapp/project/command/stages/cleanup_local.rb +0 -138
  293. data/lib/dapp/project/command/stages/cleanup_repo.rb +0 -125
  294. data/lib/dapp/project/command/stages/common.rb +0 -86
  295. data/lib/dapp/project/command/stages/flush_local.rb +0 -22
  296. data/lib/dapp/project/command/stages/flush_repo.rb +0 -22
  297. data/lib/dapp/project/command/stages/pull.rb +0 -27
  298. data/lib/dapp/project/command/stages/push.rb +0 -23
  299. data/lib/dapp/project/command/tag.rb +0 -18
@@ -0,0 +1,6 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Builder
4
+ end # Builder
5
+ end # Dimg
6
+ end # Dapp
@@ -1,7 +1,6 @@
1
1
  module Dapp
2
- module Builder
3
- # Base
4
- class Base
2
+ module Dimg
3
+ class Builder::Base
5
4
  attr_reader :dimg
6
5
 
7
6
  def initialize(dimg)
@@ -73,6 +72,6 @@ module Dapp
73
72
  def build_artifact_checksum
74
73
  raise
75
74
  end
76
- end # Base
77
- end # Builder
75
+ end # Builder::Base
76
+ end # Dimg
78
77
  end # Dapp
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
- module Builder
3
- class Chef < Base
2
+ module Dimg
3
+ class Builder::Chef < Builder::Base
4
4
  DEFAULT_CHEFDK_IMAGE = 'dappdeps/chefdk:0.17.3-1'.freeze # TODO: config, DSL, DEFAULT_CHEFDK_IMAGE
5
5
 
6
6
  %i(before_install install before_setup setup build_artifact).each do |stage|
@@ -30,16 +30,16 @@ module Dapp
30
30
 
31
31
  %i(before_install install before_setup setup).each do |stage|
32
32
  unless stage_empty?(stage) || stage_cookbooks_checksum_path(stage).exist?
33
- raise ::Dapp::Error::Dimg, code: :chef_stage_checksum_not_calculated,
34
- data: {stage: stage}
33
+ raise Error::Chef, code: :chef_stage_checksum_not_calculated, data: {stage: stage}
35
34
  end
36
35
  end
37
36
  end
38
37
 
39
38
  def before_build_check
40
39
  %i(before_install install before_setup setup build_artifact).tap do |stages|
41
- (builder_cookbook.enabled_recipes - stages.map {|stage| builder_cookbook.stage_enabled_recipes(stage)}.flatten.uniq).each do |recipe|
42
- dimg.project.log_warning(desc: {code: :recipe_does_not_used, data: {recipe: recipe}})
40
+ (builder_cookbook.enabled_recipes -
41
+ stages.map {|stage| builder_cookbook.stage_enabled_recipes(stage)}.flatten.uniq).each do |recipe|
42
+ dimg.dapp.log_warning(desc: {code: :recipe_does_not_used, data: {recipe: recipe}})
43
43
  end
44
44
  end
45
45
  end
@@ -54,9 +54,9 @@ module Dapp
54
54
 
55
55
  def chefdk_container
56
56
  @chefdk_container ||= begin
57
- if dimg.project.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
58
- dimg.project.log_secondary_process(dimg.project.t(code: 'process.chefdk_container_creating'), short: true) do
59
- dimg.project.shellout!(
57
+ if dimg.dapp.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
58
+ dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.chefdk_container_creating'), short: true) do
59
+ dimg.dapp.shellout!(
60
60
  ['docker create',
61
61
  "--name #{chefdk_container_name}",
62
62
  "--volume /.dapp/deps/chefdk #{chefdk_image}"].join(' ')
@@ -70,31 +70,39 @@ module Dapp
70
70
 
71
71
  def builder_cookbook
72
72
  @builder_cookbook ||= begin
73
- unless dimg.project.builder_cookbook_path.exist?
74
- raise Error, code: :builder_cookbook_not_found,
75
- data: {path: dimg.project.builder_cookbook_path.to_s}
73
+ unless dimg.dapp.builder_cookbook_path.exist?
74
+ raise Error,
75
+ code: :builder_cookbook_not_found,
76
+ data: {path: dimg.dapp.builder_cookbook_path.to_s}
76
77
  end
77
78
 
78
- unless dimg.project.builder_cookbook_path.join('Berksfile').exist?
79
- raise Error, code: :builder_cookbook_berksfile_not_found,
80
- data: {path: dimg.project.builder_cookbook_path.join('Berksfile').to_s}
81
- end
79
+ cookbooks = Marshal.load Marshal.dump(dimg.config._chef._cookbook)
82
80
 
83
- unless dimg.project.builder_cookbook_path.join('metadata.rb').exist?
84
- raise Error, code: :builder_cookbook_metadata_not_found,
85
- data: {path: dimg.project.builder_cookbook_path.join('metadata.rb').to_s}
81
+ cookbooks.each do |_name, desc|
82
+ # Получение относительного пути из директории .dapp_chef до указанной зависимости.
83
+ # В Dappfile указываются пути относительно самого Dappfile либо абсолютные пути.
84
+ # В объекте конфига должны лежать абсолютные пути по ключу :path.
85
+ if desc[:path]
86
+ relative_from_cookbook_path = Pathname.new(desc[:path]).relative_path_from(dimg.dapp.builder_cookbook_path).to_s
87
+ desc[:path] = relative_from_cookbook_path
88
+ end
86
89
  end
87
90
 
88
- berksfile = Berksfile.from_file(dimg.project.builder_cookbook_path, dimg.project.builder_cookbook_path.join('Berksfile'))
89
- metadata = CookbookMetadata.from_file(dimg.project.builder_cookbook_path.join('metadata.rb'))
91
+ # Добавление самого cookbook'а builder'а.
92
+ cookbooks[dimg.dapp.name] = {
93
+ name: dimg.dapp.name,
94
+ path: '.'
95
+ }
96
+
97
+ berksfile = Berksfile.from_conf(cookbook_path: dimg.dapp.builder_cookbook_path.to_s, cookbooks: cookbooks)
98
+ metadata = CookbookMetadata.from_conf(name: dimg.dapp.name, version: '1.0.0', cookbooks: cookbooks)
90
99
 
91
100
  Cookbook.new(self,
92
- path: dimg.project.builder_cookbook_path,
93
- berksfile: berksfile,
94
- metadata: metadata,
95
- enabled_recipes: dimg.config._chef._recipe,
96
- enabled_modules: dimg.config._chef._dimod,
97
- )
101
+ path: dimg.dapp.builder_cookbook_path,
102
+ berksfile: berksfile,
103
+ metadata: metadata,
104
+ enabled_recipes: dimg.config._chef._recipe,
105
+ enabled_modules: dimg.config._chef._dimod)
98
106
  end
99
107
  end
100
108
 
@@ -125,7 +133,7 @@ module Dapp
125
133
  end
126
134
  end
127
135
 
128
- # rubocop:disable Metrics/AbcSize
136
+ # rubocop:disable Metrics/PerceivedComplexity
129
137
  def stage_cookbooks_runlist(stage)
130
138
  @stage_cookbooks_runlist ||= {}
131
139
  @stage_cookbooks_runlist[stage] ||= begin
@@ -145,8 +153,8 @@ module Dapp
145
153
  end.tap {|entries| res.concat entries}
146
154
 
147
155
  builder_cookbook.stage_enabled_recipes(stage)
148
- .map {|recipe| [builder_cookbook.name, recipe]}
149
- .tap do |entries|
156
+ .map {|recipe| [builder_cookbook.name, recipe]}
157
+ .tap do |entries|
150
158
  if entries.any?
151
159
  res.concat entries
152
160
  else
@@ -161,7 +169,7 @@ module Dapp
161
169
  end
162
170
  end
163
171
  end
164
- # rubocop:enable Metrics/AbcSize
172
+ # rubocop:enable Metrics/PerceivedComplexity
165
173
 
166
174
  def stage_empty?(stage)
167
175
  stage_cookbooks_runlist(stage).empty?
@@ -201,6 +209,6 @@ module Dapp
201
209
  def container_stage_build_path(_stage)
202
210
  Pathname.new('/.dapp/chef/build')
203
211
  end
204
- end # Chef
205
- end # Builder
212
+ end # Builder::Chef
213
+ end # Dimg
206
214
  end # Dapp
@@ -0,0 +1,121 @@
1
+ module Dapp
2
+ module Dimg
3
+ class Builder::Chef::Berksfile
4
+ attr_accessor :builder
5
+ attr_reader :cookbook_path
6
+ attr_reader :local_cookbooks
7
+
8
+ def initialize(cookbook_path)
9
+ @cookbook_path = Pathname.new(cookbook_path)
10
+ @local_cookbooks = {}
11
+ end
12
+
13
+ def dump
14
+ builder.send(:dump) # "friend class"
15
+ end
16
+
17
+ def add_local_cookbook_path(name, path)
18
+ raise(Error::Chef, code: :berksfile_absolute_path_forbidden, data: {cookbook: name, path: path}) if path.start_with? '/'
19
+
20
+ desc = {
21
+ name: name,
22
+ path: cookbook_path.join(path),
23
+ chefignore: []
24
+ }
25
+
26
+ if desc[:path].join('chefignore').exist?
27
+ chefignore_patterns = desc[:path].join('chefignore').read.split("\n").map(&:strip)
28
+ desc[:chefignore] = Dir[*chefignore_patterns.map {|pattern| desc[:path].join(pattern)}]
29
+ .map(&Pathname.method(:new))
30
+ end
31
+
32
+ @local_cookbooks[name] = desc
33
+ end
34
+
35
+ def local_cookbook?(name)
36
+ local_cookbooks.key? name
37
+ end
38
+
39
+ def local_cookbook(name)
40
+ local_cookbooks[name]
41
+ end
42
+
43
+ class << self
44
+ def from_file(cookbook_path:, berksfile_file_path:)
45
+ new(cookbook_path).tap do |berksfile|
46
+ berksfile.builder = FromFileBuilder.new(berksfile, berksfile_file_path)
47
+ end
48
+ end
49
+
50
+ def from_conf(cookbook_path:, cookbooks:)
51
+ new(cookbook_path).tap do |berksfile|
52
+ berksfile.builder = FromConfBuilder.new(berksfile, cookbooks)
53
+ end
54
+ end
55
+
56
+ protected
57
+
58
+ def new(*args, &blk)
59
+ super(*args, &blk)
60
+ end
61
+ end # << self
62
+
63
+ class Builder
64
+ def initialize(berksfile)
65
+ @berksfile = berksfile
66
+ end
67
+
68
+ def cookbook(name, *_args, path: nil, **_kwargs)
69
+ @berksfile.add_local_cookbook_path(name, path) if path
70
+ end
71
+
72
+ # rubocop:disable Style/MethodMissing
73
+ def method_missing(*_a, &_blk)
74
+ end
75
+ # rubocop:enable Style/MethodMissing
76
+
77
+ protected
78
+
79
+ def dump
80
+ raise
81
+ end
82
+ end # Builder
83
+
84
+ class FromConfBuilder < Builder
85
+ def initialize(berksfile, cookbooks)
86
+ super(berksfile)
87
+
88
+ @cookbooks = cookbooks
89
+
90
+ @cookbooks.each do |name, desc|
91
+ cookbook(name, desc[:version_constraint], **desc)
92
+ end
93
+ end
94
+
95
+ def dump
96
+ [].tap do |lines|
97
+ lines << "source 'https://supermarket.chef.io'\n\n "
98
+ @cookbooks.each do |name, desc|
99
+ params = desc.reject {|key, _value| [:name, :version_constraint].include? key}
100
+ lines << "cookbook #{name.inspect}, #{desc[:version_constraint].inspect}, #{params.inspect}\n"
101
+ end
102
+ end.join
103
+ end
104
+ end # FromConfBuilder
105
+
106
+ class FromFileBuilder < Builder
107
+ def initialize(berksfile, berksfile_file_path)
108
+ super(berksfile)
109
+
110
+ @berksfile_file_path = berksfile_file_path
111
+
112
+ instance_eval(@berksfile_file_path.read, @berksfile_file_path.to_s)
113
+ end
114
+
115
+ def dump
116
+ @berksfile_file_path.read
117
+ end
118
+ end # FileParser
119
+ end # Builder::Chef::Berksfile
120
+ end # Dimg
121
+ end # Dapp
@@ -0,0 +1,285 @@
1
+ module Dapp
2
+ module Dimg
3
+ # Локальный cookbook сборщик с правилами
4
+ # сборки dimg образов для chef сборщика.
5
+ class Builder::Chef::Cookbook
6
+ CACHE_VERSION = 1
7
+
8
+ CHECKSUM_PATTERNS = %w(
9
+ attributes/**/*
10
+ recipes/**/*
11
+ files/**/*
12
+ templates/**/*
13
+ ).freeze
14
+
15
+ attr_reader :builder
16
+
17
+ attr_reader :path
18
+ attr_reader :vendor_path
19
+ attr_reader :berksfile
20
+ attr_reader :metadata
21
+ attr_reader :enabled_recipes
22
+ attr_reader :enabled_modules
23
+
24
+ # rubocop:disable Metrics/ParameterLists
25
+ def initialize(builder, path:, berksfile:, metadata:, enabled_recipes:, enabled_modules:)
26
+ @builder = builder
27
+ @path = Pathname.new(path)
28
+ @berksfile = berksfile
29
+ @metadata = metadata
30
+ @enabled_recipes = enabled_recipes
31
+ @enabled_modules = enabled_modules
32
+ end
33
+ # rubocop:enable Metrics/ParameterLists
34
+
35
+ def name
36
+ metadata.name
37
+ end
38
+
39
+ def local_paths
40
+ @local_paths ||= [].tap do |paths|
41
+ paths << path
42
+ paths.push(*berksfile.local_cookbooks.values.map {|cookbook| cookbook[:path]})
43
+ paths.uniq!
44
+ end
45
+ end
46
+
47
+ # TODO: Сookbook'и зависимости на локальной файловой системе
48
+ # TODO: должны обрабатываться рекурсивно. Чтобы контрольная сумма
49
+ # TODO: учитывала все зависимости всех зависимых локальных cookbook'ов.
50
+ def checksum
51
+ @checksum ||= begin
52
+ all_local_paths = local_paths
53
+ .product(CHECKSUM_PATTERNS)
54
+ .map {|cb, dir| Dir[cb.join(dir)]}
55
+ .flatten
56
+ .map(&Pathname.method(:new))
57
+
58
+ builder.dimg.hashsum [
59
+ CACHE_VERSION,
60
+ builder.dimg.paths_content_hashsum(all_local_paths),
61
+ *all_local_paths.map {|p| p.relative_path_from(path).to_s}.sort,
62
+ berksfile.dump,
63
+ metadata.dump
64
+ ].compact
65
+ end
66
+ end
67
+
68
+ def vendor_path
69
+ builder.dimg.dapp.lock(_vendor_lock_name, default_timeout: 120) do
70
+ vendor! unless _vendor_path.join('.created_at').exist?
71
+ end
72
+ _vendor_path
73
+ end
74
+
75
+ # rubocop:disable Metrics/AbcSize
76
+ def vendor!
77
+ volumes_from = [builder.dimg.dapp.base_container, builder.chefdk_container]
78
+
79
+ builder.dimg.dapp.log_secondary_process(builder.dimg.dapp.t(code: _vendor_process_name)) do
80
+ volumes_from = [builder.dimg.dapp.base_container, builder.chefdk_container]
81
+
82
+ tmp_berksfile_path = builder.dimg.tmp_path.join("Berksfile.#{SecureRandom.uuid}")
83
+ File.open(tmp_berksfile_path, 'w') {|file| file.write berksfile.dump}
84
+
85
+ tmp_metadata_path = builder.dimg.tmp_path.join("metadata.rb.#{SecureRandom.uuid}")
86
+ File.open(tmp_metadata_path, 'w') {|file| file.write metadata.dump}
87
+
88
+ vendor_commands = [
89
+ "#{builder.dimg.dapp.mkdir_bin} -p ~/.ssh",
90
+ 'echo "Host *" >> ~/.ssh/config',
91
+ 'echo " StrictHostKeyChecking no" >> ~/.ssh/config',
92
+ *local_paths.map {|path| "#{builder.dimg.dapp.rsync_bin} --archive --relative #{path} /tmp/local_cookbooks"},
93
+ "cd /tmp/local_cookbooks/#{path}",
94
+ "cp #{tmp_berksfile_path} Berksfile",
95
+ "cp #{tmp_metadata_path} metadata.rb",
96
+ '/.dapp/deps/chefdk/bin/berks vendor /tmp/cookbooks',
97
+ ["#{builder.dimg.dapp.find_bin} /tmp/cookbooks -type d -exec #{builder.dimg.dapp.bash_bin} -ec '",
98
+ "#{builder.dimg.dapp.install_bin} -o #{Process.uid} -g #{Process.gid} ",
99
+ "--mode $(#{builder.dimg.dapp.stat_bin} -c %a {}) -d ",
100
+ "#{_vendor_path}/$(echo {} | #{builder.dimg.dapp.sed_bin} -e \"s/^\\/tmp\\/cookbooks//\")' \\;"].join,
101
+ ["#{builder.dimg.dapp.find_bin} /tmp/cookbooks -type f -exec #{builder.dimg.dapp.bash_bin} -ec '",
102
+ "#{builder.dimg.dapp.install_bin} -o #{Process.uid} -g #{Process.gid} ",
103
+ "--mode $(#{builder.dimg.dapp.stat_bin} -c %a {}) {} ",
104
+ "#{_vendor_path}/$(echo {} | #{builder.dimg.dapp.sed_bin} -e \"s/\\/tmp\\/cookbooks//\")' \\;"].join,
105
+ ["#{builder.dimg.dapp.install_bin} -o #{Process.uid} -g #{Process.gid} ",
106
+ "--mode 0644 <(#{builder.dimg.dapp.date_bin} +%s.%N) #{_vendor_path.join('.created_at')}"].join
107
+ ]
108
+
109
+ builder.dimg.dapp.shellout!(
110
+ [ 'docker run --rm',
111
+ volumes_from.map {|container| "--volumes-from #{container}"}.join(' '),
112
+ *local_paths.map {|path| "--volume #{path}:#{path}"},
113
+ "--volume #{builder.dimg.tmp_path}:#{builder.dimg.tmp_path}",
114
+ ("--volume #{builder.dimg.dapp.ssh_auth_sock}:/tmp/dapp-ssh-agent" if builder.dimg.dapp.ssh_auth_sock),
115
+ "--volume #{_vendor_path.tap(&:mkpath)}:#{_vendor_path}",
116
+ ('--env SSH_AUTH_SOCK=/tmp/dapp-ssh-agent' if builder.dimg.dapp.ssh_auth_sock),
117
+ ''.tap do |cmd|
118
+ cmd << "dappdeps/berksdeps:0.1.0 #{builder.dimg.dapp.bash_bin}"
119
+ cmd << " -ec '#{builder.dimg.dapp.shellout_pack(vendor_commands.join(' && '))}'"
120
+ end ].compact.join(' '),
121
+ log_verbose: builder.dimg.dapp.log_verbose?
122
+ )
123
+ end
124
+ end
125
+ # rubocop:enable Metrics/AbcSize
126
+
127
+ def stage_cookbooks_path(stage)
128
+ _stage_cookbooks_path(stage).tap do |_cookbooks_path|
129
+ @stage_cookbooks_installed ||= {}
130
+ @stage_cookbooks_installed[stage] ||= true.tap {install_stage_cookbooks(stage)}
131
+ end
132
+ end
133
+
134
+ def stage_enabled_modules(stage)
135
+ @stage_enabled_modules ||= {}
136
+ @stage_enabled_modules[stage] ||= enabled_modules.select {|cookbook| stage_entry_exist?(stage, cookbook, stage)}
137
+ end
138
+
139
+ def stage_enabled_recipes(stage)
140
+ @stage_enabled_recipes ||= {}
141
+ @stage_enabled_recipes[stage] ||= enabled_recipes.select {|recipe| stage_entry_exist?(stage, name, recipe)}
142
+ end
143
+
144
+ def stage_checksum(stage)
145
+ paths = Dir[stage_cookbooks_path(stage).join('**/*')].map(&Pathname.method(:new))
146
+
147
+ builder.dimg.hashsum [
148
+ builder.dimg.paths_content_hashsum(paths),
149
+ *paths.map {|p| p.relative_path_from(stage_cookbooks_path(stage)).to_s}.sort,
150
+ stage == :before_install ? builder.chefdk_image : nil
151
+ ].compact
152
+ end
153
+
154
+ protected
155
+
156
+ def _vendor_path
157
+ builder.dimg.build_path.join('cookbooks', checksum)
158
+ end
159
+
160
+ def _vendor_process_name
161
+ 'process.vendoring_builder_cookbooks'
162
+ end
163
+
164
+ def _vendor_lock_name
165
+ "#{builder.dimg.dapp.name}.cookbooks.#{checksum}"
166
+ end
167
+
168
+ def stage_entry_exist?(stage, cookbook, entrypoint)
169
+ stage_cookbooks_path(stage).join(cookbook, 'recipes', "#{entrypoint}.rb").exist?
170
+ end
171
+
172
+ def install_stage_cookbooks(stage)
173
+ _stage_cookbooks_path(stage).mkpath
174
+
175
+ stage_install_paths(stage).each do |cookbook_path, paths|
176
+ cookbook = cookbook_path.basename.to_s
177
+
178
+ paths.each do |from, to|
179
+ if from.nil?
180
+ to_path = _stage_cookbooks_path(stage).join(cookbook, 'recipes/void.rb')
181
+ to_path.parent.mkpath
182
+ FileUtils.touch to_path
183
+ else
184
+ from_path = cookbook_path.join(from)
185
+ to_path = _stage_cookbooks_path(stage).join(cookbook, to)
186
+ if from_path.directory? && to_path.exist?
187
+ Dir[from_path.join('**/*')]
188
+ .map(&Pathname.method(:new))
189
+ .each do |from_subpath|
190
+ to_subpath = to_path.join(from_subpath.relative_path_from(from_path))
191
+ if to_subpath.exist?
192
+ raise(Error::Chef,
193
+ code: :stage_path_overlap,
194
+ data: { stage: stage,
195
+ cookbook: cookbook,
196
+ from: from_subpath.relative_path_from(cookbook_path),
197
+ to: to_subpath.relative_path_from(_stage_cookbooks_path(stage).join(cookbook)) })
198
+ end
199
+
200
+ to_subpath.parent.mkpath
201
+ FileUtils.cp_r from_subpath, to_subpath
202
+ end
203
+ else
204
+ to_path.parent.mkpath
205
+ FileUtils.cp_r from_path, to_path
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
211
+
212
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength
213
+ def stage_install_paths(stage)
214
+ select_existing_paths = proc do |cookbook_path, paths|
215
+ paths.select {|from, _| cookbook_path.join(from).exist?}
216
+ end
217
+
218
+ common_paths = [['metadata.json', 'metadata.json']]
219
+
220
+ Dir[vendor_path.join('*')]
221
+ .map(&Pathname.method(:new))
222
+ .map do |cookbook_path|
223
+ cookbook_name = File.basename cookbook_path
224
+ is_builder = (cookbook_name == name)
225
+ is_dimod = cookbook_name.start_with? 'dimod-'
226
+ dimod_enabled = is_dimod && enabled_modules.include?(cookbook_name)
227
+
228
+ paths = if is_builder
229
+ common_dapp_paths = select_existing_paths.call(
230
+ cookbook_path,
231
+ [
232
+ *common_paths,
233
+ ["files/#{stage}/common", 'files/default'],
234
+ ["templates/#{stage}/common", 'templates/default'],
235
+ *enabled_recipes.flat_map do |recipe|
236
+ [["files/#{stage}/#{recipe}", 'files/default'],
237
+ ["templates/#{stage}/#{recipe}", 'templates/default']]
238
+ end
239
+ ]
240
+ )
241
+
242
+ recipe_paths = enabled_recipes
243
+ .map {|recipe| ["recipes/#{stage}/#{recipe}.rb", "recipes/#{recipe}.rb"]}
244
+ .select {|from, _| cookbook_path.join(from).exist?}
245
+
246
+ if recipe_paths.any?
247
+ [*recipe_paths, *common_dapp_paths]
248
+ else
249
+ [nil, *common_dapp_paths]
250
+ end
251
+ elsif is_dimod && dimod_enabled
252
+ common_dimod_paths = select_existing_paths.call(
253
+ cookbook_path,
254
+ [
255
+ *common_paths,
256
+ ["files/#{stage}", 'files/default'],
257
+ ['files/common', 'files/default'],
258
+ ["templates/#{stage}", 'templates/default'],
259
+ ['templates/common', 'templates/default'],
260
+ ["attributes/#{stage}.rb", "attributes/#{stage}.rb"],
261
+ ['attributes/common.rb', 'attributes/common.rb']
262
+ ]
263
+ )
264
+
265
+ recipe_path = "recipes/#{stage}.rb"
266
+ if cookbook_path.join(recipe_path).exist?
267
+ [[recipe_path, recipe_path], *common_dimod_paths]
268
+ else
269
+ [nil, *common_dimod_paths]
270
+ end
271
+ elsif !is_dimod
272
+ [['.', '.']]
273
+ end
274
+
275
+ [cookbook_path, paths] if paths && paths.any?
276
+ end.compact
277
+ end
278
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength
279
+
280
+ def _stage_cookbooks_path(stage)
281
+ builder.stage_build_path(stage).join('cookbooks')
282
+ end
283
+ end # Builder::Chef::Cookbook
284
+ end # Dimg
285
+ end # Dapp