dapp 0.6.1 → 0.6.2
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.
- checksums.yaml +4 -4
- data/bin/dapp +3 -3
- data/config/en/common.yml +19 -4
- data/config/en/net_status.yml +13 -4
- data/lib/dapp.rb +48 -16
- data/lib/dapp/application.rb +75 -40
- data/lib/dapp/application/path.rb +3 -2
- data/lib/dapp/application/stages.rb +59 -0
- data/lib/dapp/artifact.rb +22 -0
- data/lib/dapp/build/stage/after_install_artifact.rb +13 -0
- data/lib/dapp/build/stage/after_setup_artifact.rb +17 -0
- data/lib/dapp/build/stage/artifact_base.rb +80 -0
- data/lib/dapp/build/stage/artifact_default.rb +62 -0
- data/lib/dapp/build/stage/base.rb +47 -12
- data/lib/dapp/build/stage/before_install.rb +6 -5
- data/lib/dapp/build/stage/before_install_artifact.rb +13 -0
- data/lib/dapp/build/stage/before_setup.rb +7 -8
- data/lib/dapp/build/stage/before_setup_artifact.rb +13 -0
- data/lib/dapp/build/stage/build_artifact.rb +32 -0
- data/lib/dapp/build/stage/docker_instructions.rb +4 -22
- data/lib/dapp/build/stage/from.rb +7 -8
- data/lib/dapp/build/stage/ga_archive.rb +1 -1
- data/lib/dapp/build/stage/ga_archive_dependencies.rb +1 -1
- data/lib/dapp/build/stage/ga_artifact_patch.rb +21 -0
- data/lib/dapp/build/stage/ga_base.rb +6 -29
- data/lib/dapp/build/stage/ga_dependencies_base.rb +4 -13
- data/lib/dapp/build/stage/ga_latest_patch.rb +2 -2
- data/lib/dapp/build/stage/import_artifact.rb +69 -0
- data/lib/dapp/build/stage/install/ga_post_install_patch.rb +1 -1
- data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +1 -1
- data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +1 -7
- data/lib/dapp/build/stage/install/install.rb +12 -7
- data/lib/dapp/build/stage/mod/logging.rb +10 -7
- data/lib/dapp/build/stage/setup/chef_cookbooks.rb +3 -4
- data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +1 -1
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +2 -2
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +2 -8
- data/lib/dapp/build/stage/setup/setup.rb +12 -7
- data/lib/dapp/builder/base.rb +13 -1
- data/lib/dapp/builder/chef.rb +125 -79
- data/lib/dapp/builder/chef/cookbook_metadata.rb +1 -1
- data/lib/dapp/builder/shell.rb +2 -3
- data/lib/dapp/cli.rb +3 -3
- data/lib/dapp/cli/base.rb +0 -2
- data/lib/dapp/cli/bp.rb +0 -4
- data/lib/dapp/cli/build.rb +3 -7
- data/lib/dapp/cli/cleanup.rb +0 -2
- data/lib/dapp/cli/list.rb +0 -2
- data/lib/dapp/cli/mrproper.rb +22 -0
- data/lib/dapp/cli/push.rb +4 -3
- data/lib/dapp/cli/run.rb +0 -2
- data/lib/dapp/cli/spush.rb +0 -2
- data/lib/dapp/cli/stage_image.rb +24 -0
- data/lib/dapp/cli/stages.rb +7 -5
- data/lib/dapp/cli/stages/cleanup_local.rb +28 -0
- data/lib/dapp/cli/stages/cleanup_repo.rb +24 -0
- data/lib/dapp/cli/stages/{flush.rb → flush_local.rb} +4 -6
- data/lib/dapp/cli/stages/{cleanup.rb → flush_repo.rb} +4 -6
- data/lib/dapp/cli/stages/pull.rb +28 -0
- data/lib/dapp/cli/stages/push.rb +24 -0
- data/lib/dapp/config/application.rb +185 -44
- data/lib/dapp/config/artifact.rb +10 -50
- data/lib/dapp/config/directive/artifact.rb +77 -0
- data/lib/dapp/config/directive/build_dir.rb +9 -0
- data/lib/dapp/config/directive/chef.rb +95 -0
- data/lib/dapp/config/directive/docker/artifact.rb +26 -0
- data/lib/dapp/config/directive/docker/base.rb +91 -0
- data/lib/dapp/config/directive/git_artifact.rb +59 -0
- data/lib/dapp/config/directive/shell/artifact.rb +38 -0
- data/lib/dapp/config/directive/shell/base.rb +85 -0
- data/lib/dapp/config/directive/tmp_dir.rb +36 -0
- data/lib/dapp/config/main.rb +1 -7
- data/lib/dapp/core_ext/hash.rb +21 -0
- data/lib/dapp/docker_registry/base.rb +60 -5
- data/lib/dapp/docker_registry/mod/request.rb +2 -14
- data/lib/dapp/git_artifact.rb +32 -23
- data/lib/dapp/git_repo/base.rb +1 -1
- data/lib/dapp/image/argument.rb +3 -3
- data/lib/dapp/image/docker.rb +13 -16
- data/lib/dapp/image/scratch.rb +29 -0
- data/lib/dapp/image/stage.rb +33 -23
- data/lib/dapp/lock/base.rb +18 -11
- data/lib/dapp/lock/file.rb +18 -16
- data/lib/dapp/prctl.rb +1 -0
- data/lib/dapp/project.rb +22 -9
- data/lib/dapp/project/command/bp.rb +2 -5
- data/lib/dapp/project/command/build.rb +1 -2
- data/lib/dapp/project/command/cleanup.rb +9 -7
- data/lib/dapp/project/command/common.rb +37 -12
- data/lib/dapp/project/command/mrproper.rb +57 -0
- data/lib/dapp/project/command/push.rb +8 -2
- data/lib/dapp/project/command/run.rb +1 -1
- data/lib/dapp/project/command/stage_image.rb +15 -0
- data/lib/dapp/project/command/stages/cleanup_local.rb +100 -0
- data/lib/dapp/project/command/stages/cleanup_repo.rb +65 -0
- data/lib/dapp/project/command/stages/common.rb +48 -0
- data/lib/dapp/project/command/stages/flush_local.rb +24 -0
- data/lib/dapp/project/command/stages/flush_repo.rb +22 -0
- data/lib/dapp/project/command/stages/pull.rb +26 -0
- data/lib/dapp/project/command/stages/push.rb +22 -0
- data/lib/dapp/project/dappfile.rb +3 -1
- data/lib/dapp/project/deps/base.rb +52 -0
- data/lib/dapp/project/deps/gitartifact.rb +36 -0
- data/lib/dapp/project/lock.rb +20 -13
- data/lib/dapp/project/logging/base.rb +20 -3
- data/lib/dapp/project/logging/i18n.rb +25 -0
- data/lib/dapp/project/logging/paint.rb +47 -0
- data/lib/dapp/project/logging/process.rb +17 -10
- data/lib/dapp/project/shellout/base.rb +74 -0
- data/lib/dapp/project/shellout/streaming.rb +49 -0
- data/lib/dapp/project/shellout/system.rb +72 -0
- data/lib/dapp/project/ssh_agent.rb +8 -9
- data/lib/dapp/version.rb +1 -1
- metadata +48 -17
- data/lib/dapp/build/stage/artifact.rb +0 -40
- data/lib/dapp/build/stage/mod/artifact.rb +0 -79
- data/lib/dapp/config/chef.rb +0 -51
- data/lib/dapp/config/docker.rb +0 -82
- data/lib/dapp/config/git_artifact.rb +0 -51
- data/lib/dapp/config/shell.rb +0 -64
- data/lib/dapp/helper/i18n.rb +0 -20
- data/lib/dapp/helper/paint.rb +0 -27
- data/lib/dapp/helper/shellout.rb +0 -63
- data/lib/dapp/helper/streaming.rb +0 -47
- data/lib/dapp/project/command/stages_cleanup.rb +0 -72
- data/lib/dapp/project/command/stages_flush.rb +0 -20
- data/lib/dapp/project/paint.rb +0 -16
@@ -12,11 +12,11 @@ module Dapp
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def prev_g_a_stage
|
15
|
-
super.prev_stage # GAPostInstallPatch
|
15
|
+
super.prev_stage.prev_stage # GAPostInstallPatch
|
16
16
|
end
|
17
17
|
|
18
18
|
def next_g_a_stage
|
19
|
-
super.next_stage # GAPostSetupPatch
|
19
|
+
super.next_stage # GAPostSetupPatch || GAArtifactPatch
|
20
20
|
end
|
21
21
|
end # GAPrePatch
|
22
22
|
end
|
@@ -7,18 +7,12 @@ module Dapp
|
|
7
7
|
include Mod::Group
|
8
8
|
|
9
9
|
def initialize(application, next_stage)
|
10
|
-
@prev_stage =
|
10
|
+
@prev_stage = BeforeSetupArtifact.new(application, self)
|
11
11
|
super
|
12
12
|
end
|
13
13
|
|
14
14
|
def dependencies
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def setup_dependencies_files_checksum
|
21
|
-
@setup_files_checksum ||= dependencies_files_checksum(application.config._setup_dependencies)
|
15
|
+
next_stage.next_stage.context # Setup
|
22
16
|
end
|
23
17
|
end # GAPreSetupPatchDependencies
|
24
18
|
end
|
@@ -12,17 +12,22 @@ module Dapp
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def empty?
|
15
|
-
|
15
|
+
!application.builder.setup?
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
19
|
-
|
18
|
+
def context
|
19
|
+
[setup_dependencies_files_checksum, application.builder.setup_checksum]
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
super
|
24
|
-
|
25
|
-
|
22
|
+
def prepare_image
|
23
|
+
super
|
24
|
+
application.builder.setup(image)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def setup_dependencies_files_checksum
|
30
|
+
@setup_files_checksum ||= dependencies_files_checksum(application.config._setup_dependencies)
|
26
31
|
end
|
27
32
|
end # Setup
|
28
33
|
end
|
data/lib/dapp/builder/base.rb
CHANGED
@@ -8,7 +8,7 @@ module Dapp
|
|
8
8
|
@application = application
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def before_application_should_be_built_check
|
12
12
|
end
|
13
13
|
|
14
14
|
def before_install?
|
@@ -59,6 +59,18 @@ module Dapp
|
|
59
59
|
raise
|
60
60
|
end
|
61
61
|
|
62
|
+
def build_artifact?
|
63
|
+
false
|
64
|
+
end
|
65
|
+
|
66
|
+
def build_artifact(_image)
|
67
|
+
raise
|
68
|
+
end
|
69
|
+
|
70
|
+
def build_artifact_checksum
|
71
|
+
raise
|
72
|
+
end
|
73
|
+
|
62
74
|
def chef_cookbooks(_image)
|
63
75
|
end
|
64
76
|
|
data/lib/dapp/builder/chef.rb
CHANGED
@@ -11,31 +11,24 @@ module Dapp
|
|
11
11
|
|
12
12
|
DEFAULT_CHEFDK_IMAGE = 'dappdeps/chefdk:0.17.3-1'.freeze # TODO: config, DSL, DEFAULT_CHEFDK_IMAGE
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
data: { stage: stage } unless stage_cookbooks_checksum_path(stage).exist?
|
14
|
+
%i(before_install install before_setup setup build_artifact).each do |stage|
|
15
|
+
define_method("#{stage}_checksum") do
|
16
|
+
application.hashsum [stage_cookbooks_checksum(stage),
|
17
|
+
stage_attributes_raw(stage),
|
18
|
+
*stage_cookbooks_runlist(stage)]
|
20
19
|
end
|
21
|
-
end
|
22
|
-
|
23
|
-
%i(before_install install before_setup setup).each do |stage|
|
24
|
-
define_method("#{stage}_checksum") { stage_cookbooks_checksum(stage) }
|
25
20
|
|
26
21
|
define_method("#{stage}?") { !stage_empty?(stage) }
|
27
22
|
|
28
23
|
define_method(stage.to_s) do |image|
|
29
24
|
unless stage_empty?(stage)
|
30
25
|
image.add_volumes_from(chefdk_container)
|
31
|
-
image.add_command 'export PATH=/.dapp/deps/chefdk/bin:$PATH',
|
32
|
-
"export DAPP_BUILD_STAGE=#{stage}"
|
33
|
-
|
34
26
|
image.add_volume "#{stage_build_path(stage)}:#{container_stage_build_path(stage)}:ro"
|
35
|
-
image.add_command ['chef-solo',
|
27
|
+
image.add_command ['/.dapp/deps/chefdk/bin/chef-solo',
|
36
28
|
'--legacy-mode',
|
37
|
-
"
|
38
|
-
"-
|
29
|
+
"--config #{container_stage_config_path(stage)}",
|
30
|
+
"--json-attributes #{container_stage_json_attributes_path(stage)}",
|
31
|
+
"--override-runlist #{stage_cookbooks_runlist(stage).join(',')}"].join(' ')
|
39
32
|
end
|
40
33
|
end
|
41
34
|
end
|
@@ -45,14 +38,23 @@ module Dapp
|
|
45
38
|
end
|
46
39
|
|
47
40
|
def chef_cookbooks(image)
|
48
|
-
image.add_volume "#{cookbooks_vendor_path}:#{application.container_dapp_path('chef_cookbooks')}"
|
41
|
+
image.add_volume "#{cookbooks_vendor_path(chef_cookbooks_stage: true)}:#{application.container_dapp_path('chef_cookbooks')}"
|
49
42
|
image.add_command(
|
50
|
-
|
51
|
-
["
|
43
|
+
"#{application.project.mkdir_path} -p /usr/share/dapp/chef_repo",
|
44
|
+
["#{application.project.cp_path} -a #{application.container_dapp_path('chef_cookbooks')} ",
|
52
45
|
'/usr/share/dapp/chef_repo/cookbooks'].join
|
53
46
|
)
|
54
47
|
end
|
55
48
|
|
49
|
+
def before_application_should_be_built_check
|
50
|
+
super
|
51
|
+
|
52
|
+
%i(before_install install before_setup setup build_artifact chef_cookbooks).each do |stage|
|
53
|
+
raise ::Dapp::Error::Application, code: :cookbooks_stage_checksum_not_calculated,
|
54
|
+
data: { stage: stage } unless stage_cookbooks_checksum_path(stage).exist?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
56
58
|
private
|
57
59
|
|
58
60
|
def enabled_modules
|
@@ -63,6 +65,14 @@ module Dapp
|
|
63
65
|
application.config._chef._recipes
|
64
66
|
end
|
65
67
|
|
68
|
+
def stage_attributes(stage)
|
69
|
+
application.config._chef.send("_#{stage}_attributes")
|
70
|
+
end
|
71
|
+
|
72
|
+
def stage_attributes_raw(stage)
|
73
|
+
JSON.dump stage_attributes(stage)
|
74
|
+
end
|
75
|
+
|
66
76
|
def project_name
|
67
77
|
cookbook_metadata.name
|
68
78
|
end
|
@@ -84,7 +94,12 @@ module Dapp
|
|
84
94
|
end
|
85
95
|
|
86
96
|
def cookbook_metadata
|
87
|
-
@cookbook_metadata ||= CookbookMetadata.new(cookbook_metadata_path)
|
97
|
+
@cookbook_metadata ||= CookbookMetadata.new(cookbook_metadata_path).tap do |metadata|
|
98
|
+
metadata.depends.each do |dependency|
|
99
|
+
raise Error, code: :mdapp_dependency_in_metadata_forbidden,
|
100
|
+
data: { dependency: dependency } if dependency.start_with? 'mdapp-'
|
101
|
+
end
|
102
|
+
end
|
88
103
|
end
|
89
104
|
|
90
105
|
def berksfile_lock_checksum
|
@@ -100,11 +115,11 @@ module Dapp
|
|
100
115
|
stage_cookbooks_checksum_path(stage).read.strip
|
101
116
|
else
|
102
117
|
checksum = if stage == :chef_cookbooks
|
103
|
-
paths = Dir[cookbooks_vendor_path('**/*')].map(&Pathname.method(:new))
|
118
|
+
paths = Dir[cookbooks_vendor_path('**/*', chef_cookbooks_stage: true)].map(&Pathname.method(:new))
|
104
119
|
|
105
120
|
application.hashsum [
|
106
121
|
application.paths_content_hashsum(paths),
|
107
|
-
*paths.map { |p| p.relative_path_from(cookbooks_vendor_path).to_s }.sort
|
122
|
+
*paths.map { |p| p.relative_path_from(cookbooks_vendor_path(chef_cookbooks_stage: true)).to_s }.sort
|
108
123
|
]
|
109
124
|
else
|
110
125
|
paths = Dir[stage_cookbooks_path(stage, '**/*')].map(&Pathname.method(:new))
|
@@ -112,7 +127,6 @@ module Dapp
|
|
112
127
|
application.hashsum [
|
113
128
|
application.paths_content_hashsum(paths),
|
114
129
|
*paths.map { |p| p.relative_path_from(stage_cookbooks_path(stage)).to_s }.sort,
|
115
|
-
*enabled_modules,
|
116
130
|
stage == :before_install ? chefdk_image : nil
|
117
131
|
].compact
|
118
132
|
end
|
@@ -158,8 +172,8 @@ module Dapp
|
|
158
172
|
def chefdk_container
|
159
173
|
@chefdk_container ||= begin
|
160
174
|
if application.project.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
|
161
|
-
application.project.log_secondary_process(application.project.t(code: 'process.
|
162
|
-
application.project.shellout(
|
175
|
+
application.project.log_secondary_process(application.project.t(code: 'process.chefdk_container_loading'), short: true) do
|
176
|
+
application.project.shellout!(
|
163
177
|
['docker create',
|
164
178
|
"--name #{chefdk_container_name}",
|
165
179
|
"--volume /.dapp/deps/chefdk #{chefdk_image}"].join(' ')
|
@@ -172,14 +186,19 @@ module Dapp
|
|
172
186
|
end
|
173
187
|
|
174
188
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
175
|
-
def install_cookbooks
|
176
|
-
volumes_from = chefdk_container
|
177
|
-
|
189
|
+
def install_cookbooks(dest_path, chef_cookbooks_stage: false)
|
190
|
+
volumes_from = [application.project.base_container, chefdk_container]
|
191
|
+
process_code = [
|
192
|
+
'process',
|
193
|
+
chef_cookbooks_stage ? 'chef_cookbooks_stage_berks_vendor' : 'berks_vendor'
|
194
|
+
].compact.join('.')
|
195
|
+
|
196
|
+
application.project.log_secondary_process(application.project.t(code: process_code)) do
|
178
197
|
before_vendor_commands = [].tap do |commands|
|
179
|
-
unless application.project.cli_options[:dev]
|
198
|
+
unless application.project.cli_options[:dev] || chef_cookbooks_stage
|
180
199
|
commands.push(
|
181
200
|
['if [ ! -f Berksfile.lock ] ; then ',
|
182
|
-
|
201
|
+
"#{application.project.echo_path} \"Berksfile.lock not found\" 1>&2 ; ",
|
183
202
|
'exit 1 ; ',
|
184
203
|
'fi'].join
|
185
204
|
)
|
@@ -189,14 +208,15 @@ module Dapp
|
|
189
208
|
after_vendor_commands = [].tap do |commands|
|
190
209
|
if application.project.cli_options[:dev]
|
191
210
|
commands.push(
|
192
|
-
["
|
211
|
+
["#{application.project.install_path} -o #{Process.uid} -g #{Process.gid} ",
|
212
|
+
"--mode $(#{application.project.stat_path} -c %a Berksfile.lock) ",
|
193
213
|
"Berksfile.lock #{berksfile_lock_path}"].join
|
194
214
|
)
|
195
|
-
|
215
|
+
elsif !chef_cookbooks_stage
|
196
216
|
commands.push(
|
197
|
-
"export LOCKDIFF=$(
|
217
|
+
"export LOCKDIFF=$(#{application.project.diff_path} -u1 Berksfile.lock #{berksfile_lock_path})",
|
198
218
|
['if [ "$LOCKDIFF" != "" ] ; then ',
|
199
|
-
|
219
|
+
"#{application.project.echo_path} -e \"Bad Berksfile.lock\n$LOCKDIFF\" 1>&2 ; ",
|
200
220
|
'exit 1 ; ',
|
201
221
|
'fi'].join
|
202
222
|
)
|
@@ -204,50 +224,62 @@ module Dapp
|
|
204
224
|
end
|
205
225
|
|
206
226
|
vendor_commands = [
|
207
|
-
|
208
|
-
|
209
|
-
|
227
|
+
"#{application.project.mkdir_path} -p ~/.ssh",
|
228
|
+
"#{application.project.echo_path} \"Host *\" >> ~/.ssh/config",
|
229
|
+
"#{application.project.echo_path} \" StrictHostKeyChecking no\" >> ~/.ssh/config",
|
210
230
|
*berksfile.local_cookbooks
|
211
231
|
.values
|
212
|
-
.map { |cookbook| "
|
232
|
+
.map { |cookbook| "#{application.project.rsync_path} --archive --relative #{cookbook[:path]} /tmp/local_cookbooks" },
|
213
233
|
"cd /tmp/local_cookbooks/#{berksfile_path.parent}",
|
214
234
|
*before_vendor_commands,
|
215
235
|
'/.dapp/deps/chefdk/bin/berks vendor /tmp/cookbooks',
|
216
236
|
*after_vendor_commands,
|
217
|
-
["
|
218
|
-
"
|
219
|
-
"#{
|
220
|
-
["
|
221
|
-
"
|
222
|
-
"#{
|
223
|
-
"
|
237
|
+
["#{application.project.find_path} /tmp/cookbooks -type d -exec #{application.project.bash_path} -ec '",
|
238
|
+
"#{application.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode $(#{application.project.stat_path} -c %a {}) -d ",
|
239
|
+
"#{dest_path}/$(#{application.project.echo_path} {} | #{application.project.sed_path} -e \"s/^\\/tmp\\/cookbooks//\")' \\;"].join,
|
240
|
+
["#{application.project.find_path} /tmp/cookbooks -type f -exec #{application.project.bash_path} -ec '",
|
241
|
+
"#{application.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode $(#{application.project.stat_path} -c %a {}) {} ",
|
242
|
+
"#{dest_path}/$(#{application.project.echo_path} {} | #{application.project.sed_path} -e \"s/\\/tmp\\/cookbooks//\")' \\;"].join,
|
243
|
+
"#{application.project.install_path} -o #{Process.uid} -g #{Process.gid} --mode 0644 <(#{application.project.date_path} +%s.%N) #{dest_path.join('.created_at')}"
|
224
244
|
]
|
225
245
|
|
226
246
|
application.project.shellout!(
|
227
247
|
['docker run --rm',
|
228
|
-
"--volumes-from #{
|
248
|
+
volumes_from.map { |container| "--volumes-from #{container}" }.join(' '),
|
229
249
|
*berksfile.local_cookbooks
|
230
250
|
.values
|
231
251
|
.map { |cookbook| "--volume #{cookbook[:path]}:#{cookbook[:path]}" },
|
232
252
|
("--volume #{application.project.ssh_auth_sock}:#{application.project.ssh_auth_sock}" if application.project.ssh_auth_sock),
|
233
|
-
"--volume #{
|
253
|
+
"--volume #{dest_path.tap(&:mkpath)}:#{dest_path}",
|
234
254
|
("--env SSH_AUTH_SOCK=#{application.project.ssh_auth_sock}" if application.project.ssh_auth_sock),
|
235
|
-
|
236
|
-
|
255
|
+
('--env DAPP_CHEF_COOKBOOKS_VENDORING=1' if chef_cookbooks_stage),
|
256
|
+
"dappdeps/berksdeps:0.1.0 #{application.project.bash_path} -ec '#{application.project.shellout_pack(vendor_commands.join(' && '))}'"].compact.join(' '),
|
257
|
+
log_verbose: application.project.log_verbose?
|
237
258
|
)
|
238
259
|
end
|
239
260
|
end
|
240
261
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
241
262
|
|
242
|
-
def _cookbooks_vendor_path
|
243
|
-
application.build_path.join(
|
263
|
+
def _cookbooks_vendor_path(chef_cookbooks_stage: false)
|
264
|
+
application.build_path.join(
|
265
|
+
['cookbooks', chef_cookbooks_stage ? 'chef_cookbooks_stage' : nil].compact.join('.'),
|
266
|
+
cookbooks_checksum
|
267
|
+
)
|
244
268
|
end
|
245
269
|
|
246
|
-
def cookbooks_vendor_path(*path)
|
247
|
-
_cookbooks_vendor_path.tap do |
|
248
|
-
|
249
|
-
|
250
|
-
|
270
|
+
def cookbooks_vendor_path(*path, chef_cookbooks_stage: false)
|
271
|
+
_cookbooks_vendor_path(chef_cookbooks_stage: chef_cookbooks_stage).tap do |_cookbooks_path|
|
272
|
+
lock_name = [
|
273
|
+
application.config._basename,
|
274
|
+
'cookbooks',
|
275
|
+
chef_cookbooks_stage ? 'chef_cookbooks_stage' : nil,
|
276
|
+
cookbooks_checksum
|
277
|
+
].compact.join('.')
|
278
|
+
|
279
|
+
application.project.lock(lock_name, default_timeout: 120) do
|
280
|
+
@install_cookbooks ||= {}
|
281
|
+
@install_cookbooks[chef_cookbooks_stage] ||= begin
|
282
|
+
install_cookbooks(_cookbooks_path, chef_cookbooks_stage: chef_cookbooks_stage) unless _cookbooks_path.join('.created_at').exist? && !application.project.cli_options[:dev]
|
251
283
|
true
|
252
284
|
end
|
253
285
|
end
|
@@ -256,13 +288,11 @@ module Dapp
|
|
256
288
|
|
257
289
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
258
290
|
def install_stage_cookbooks(stage)
|
259
|
-
select_existing_paths =
|
291
|
+
select_existing_paths = proc do |cookbook_path, paths|
|
260
292
|
paths.select { |from, _| cookbook_path.join(from).exist? }
|
261
293
|
end
|
262
294
|
|
263
|
-
common_paths = [['metadata.json', 'metadata.json']
|
264
|
-
["files/#{stage}", 'files/default'],
|
265
|
-
["templates/#{stage}", 'templates/default']]
|
295
|
+
common_paths = [['metadata.json', 'metadata.json']]
|
266
296
|
|
267
297
|
install_paths = Dir[cookbooks_vendor_path('*')]
|
268
298
|
.map(&Pathname.method(:new))
|
@@ -274,35 +304,39 @@ module Dapp
|
|
274
304
|
mdapp_enabled = is_mdapp && enabled_modules.include?(mdapp_name)
|
275
305
|
|
276
306
|
paths = if is_project
|
307
|
+
common_dapp_paths = select_existing_paths.call(cookbook_path, [
|
308
|
+
*common_paths,
|
309
|
+
["files/#{stage}/common", 'files/default'],
|
310
|
+
["templates/#{stage}/common", 'templates/default'],
|
311
|
+
*enabled_recipes.flat_map do |recipe|
|
312
|
+
[["files/#{stage}/#{recipe}", 'files/default'],
|
313
|
+
["templates/#{stage}/#{recipe}", 'templates/default']]
|
314
|
+
end
|
315
|
+
])
|
316
|
+
|
277
317
|
recipe_paths = enabled_recipes.map { |recipe| ["recipes/#{stage}/#{recipe}.rb", "recipes/#{recipe}.rb"] }
|
278
318
|
.select { |from, _| cookbook_path.join(from).exist? }
|
279
|
-
|
280
|
-
common_project_paths = select_existing_paths.call(
|
281
|
-
cookbook_path, [*common_paths,
|
282
|
-
['attributes/common', 'attributes'],
|
283
|
-
["attributes/#{stage}", 'attributes']]
|
284
|
-
)
|
285
|
-
|
286
319
|
if recipe_paths.any?
|
287
|
-
[*recipe_paths, *
|
320
|
+
[*recipe_paths, *common_dapp_paths]
|
288
321
|
else
|
289
|
-
[nil, *
|
322
|
+
[nil, *common_dapp_paths]
|
290
323
|
end
|
291
324
|
elsif is_mdapp && mdapp_enabled
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
325
|
+
common_mdapp_paths = select_existing_paths.call(cookbook_path, [
|
326
|
+
*common_paths,
|
327
|
+
["files/#{stage}", 'files/default'],
|
328
|
+
['files/common', 'files/default'],
|
329
|
+
["templates/#{stage}", 'templates/default'],
|
330
|
+
['templates/common', 'templates/default']
|
331
|
+
])
|
299
332
|
|
333
|
+
recipe_path = "recipes/#{stage}.rb"
|
300
334
|
if cookbook_path.join(recipe_path).exist?
|
301
335
|
[[recipe_path, recipe_path], *common_mdapp_paths]
|
302
336
|
else
|
303
337
|
[nil, *common_mdapp_paths]
|
304
338
|
end
|
305
|
-
|
339
|
+
elsif !is_mdapp
|
306
340
|
[['.', '.']]
|
307
341
|
end
|
308
342
|
|
@@ -351,11 +385,11 @@ module Dapp
|
|
351
385
|
@stage_cookbooks_runlist[stage] ||= begin
|
352
386
|
res = []
|
353
387
|
|
354
|
-
does_entry_exist =
|
388
|
+
does_entry_exist = proc do |cookbook, entrypoint|
|
355
389
|
stage_cookbooks_path(stage, cookbook, 'recipes', "#{entrypoint}.rb").exist?
|
356
390
|
end
|
357
391
|
|
358
|
-
format_entry =
|
392
|
+
format_entry = proc do |cookbook, entrypoint|
|
359
393
|
entrypoint = 'void' if entrypoint.nil?
|
360
394
|
"#{cookbook}::#{entrypoint}"
|
361
395
|
end
|
@@ -418,6 +452,18 @@ module Dapp
|
|
418
452
|
container_stage_build_path(stage, 'config.rb', *path)
|
419
453
|
end
|
420
454
|
|
455
|
+
def install_json_attributes(stage)
|
456
|
+
@install_json_attributes ||= {}
|
457
|
+
@install_json_attributes[stage] ||= true.tap do
|
458
|
+
stage_build_path(stage, 'attributes.json').write "#{stage_attributes_raw(stage)}\n"
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
462
|
+
def container_stage_json_attributes_path(stage, *path)
|
463
|
+
install_json_attributes(stage)
|
464
|
+
container_stage_build_path(stage, 'attributes.json', *path)
|
465
|
+
end
|
466
|
+
|
421
467
|
def stage_build_path(stage, *path)
|
422
468
|
application.tmp_path(application.config._name, stage).join(*path)
|
423
469
|
end
|