dapp 0.5.13 → 0.6.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.
- checksums.yaml +4 -4
- data/bin/dapp +3 -0
- data/config/en/common.yml +35 -6
- data/config/en/net_status.yml +20 -6
- data/lib/dapp.rb +53 -27
- data/lib/dapp/application.rb +48 -27
- data/lib/dapp/application/git_artifact.rb +1 -1
- data/lib/dapp/application/path.rb +2 -18
- data/lib/dapp/application/tags.rb +5 -5
- data/lib/dapp/build/stage/artifact.rb +8 -3
- data/lib/dapp/build/stage/base.rb +43 -30
- data/lib/dapp/build/stage/{infra_install.rb → before_install.rb} +6 -6
- data/lib/dapp/build/stage/before_setup.rb +27 -0
- data/lib/dapp/build/stage/docker_instructions.rb +12 -1
- data/lib/dapp/build/stage/from.rb +4 -3
- data/lib/dapp/build/stage/{source_1_archive.rb → ga_archive.rb} +7 -7
- data/lib/dapp/build/stage/{source_1_archive_dependencies.rb → ga_archive_dependencies.rb} +4 -4
- data/lib/dapp/build/stage/{source_base.rb → ga_base.rb} +31 -7
- data/lib/dapp/build/stage/{source_dependencies_base.rb → ga_dependencies_base.rb} +5 -6
- data/lib/dapp/build/stage/{source_5.rb → ga_latest_patch.rb} +6 -6
- data/lib/dapp/build/stage/install/ga_post_install_patch.rb +21 -0
- data/lib/dapp/build/stage/install/ga_post_install_patch_dependencies.rb +21 -0
- data/lib/dapp/build/stage/install/ga_pre_install_patch.rb +21 -0
- data/lib/dapp/build/stage/install/ga_pre_install_patch_dependencies.rb +31 -0
- data/lib/dapp/build/stage/install/install.rb +31 -0
- data/lib/dapp/build/stage/mod/artifact.rb +9 -19
- data/lib/dapp/build/stage/mod/group.rb +42 -0
- data/lib/dapp/build/stage/mod/logging.rb +62 -26
- data/lib/dapp/build/stage/setup/chef_cookbooks.rb +37 -0
- data/lib/dapp/build/stage/setup/ga_post_setup_patch.rb +25 -0
- data/lib/dapp/build/stage/setup/ga_post_setup_patch_dependencies.rb +31 -0
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch.rb +25 -0
- data/lib/dapp/build/stage/setup/ga_pre_setup_patch_dependencies.rb +27 -0
- data/lib/dapp/build/stage/setup/setup.rb +31 -0
- data/lib/dapp/builder/base.rb +9 -6
- data/lib/dapp/builder/chef.rb +128 -107
- data/lib/dapp/builder/chef/berksfile.rb +3 -0
- data/lib/dapp/builder/shell.rb +4 -3
- data/lib/dapp/cli.rb +8 -6
- data/lib/dapp/cli/base.rb +6 -1
- data/lib/dapp/cli/bp.rb +41 -0
- data/lib/dapp/cli/build.rb +17 -4
- data/lib/dapp/cli/cleanup.rb +24 -0
- data/lib/dapp/cli/list.rb +2 -2
- data/lib/dapp/cli/push.rb +8 -9
- data/lib/dapp/cli/run.rb +3 -4
- data/lib/dapp/cli/spush.rb +20 -0
- data/lib/dapp/cli/stages.rb +2 -0
- data/lib/dapp/cli/stages/cleanup.rb +7 -3
- data/lib/dapp/cli/stages/flush.rb +6 -3
- data/lib/dapp/config/application.rb +17 -11
- data/lib/dapp/config/chef.rb +4 -0
- data/lib/dapp/config/docker.rb +3 -2
- data/lib/dapp/config/git_artifact.rb +1 -2
- data/lib/dapp/config/main.rb +5 -2
- data/lib/dapp/config/shell.rb +20 -16
- data/lib/dapp/docker_registry.rb +32 -0
- data/lib/dapp/docker_registry/base.rb +47 -0
- data/lib/dapp/docker_registry/default.rb +18 -0
- data/lib/dapp/docker_registry/mod/authorization.rb +62 -0
- data/lib/dapp/docker_registry/mod/request.rb +44 -0
- data/lib/dapp/error/image.rb +6 -0
- data/lib/dapp/error/project.rb +6 -0
- data/lib/dapp/error/registry.rb +6 -0
- data/lib/dapp/exception/registry.rb +6 -0
- data/lib/dapp/git_artifact.rb +6 -7
- data/lib/dapp/git_repo/base.rb +1 -1
- data/lib/dapp/git_repo/remote.rb +6 -38
- data/lib/dapp/helper/sha256.rb +3 -3
- data/lib/dapp/helper/shellout.rb +25 -7
- data/lib/dapp/helper/streaming.rb +1 -3
- data/lib/dapp/image/argument.rb +31 -18
- data/lib/dapp/image/docker.rb +15 -8
- data/lib/dapp/image/stage.rb +10 -12
- data/lib/dapp/lock/base.rb +44 -0
- data/lib/dapp/lock/error.rb +14 -0
- data/lib/dapp/lock/file.rb +33 -0
- data/lib/dapp/prctl.rb +22 -0
- data/lib/dapp/project.rb +75 -0
- data/lib/dapp/project/command/bp.rb +24 -0
- data/lib/dapp/project/command/build.rb +21 -0
- data/lib/dapp/project/command/cleanup.rb +24 -0
- data/lib/dapp/project/command/common.rb +51 -0
- data/lib/dapp/project/command/list.rb +14 -0
- data/lib/dapp/project/command/push.rb +21 -0
- data/lib/dapp/project/command/run.rb +15 -0
- data/lib/dapp/project/command/spush.rb +17 -0
- data/lib/dapp/project/command/stages_cleanup.rb +70 -0
- data/lib/dapp/project/command/stages_flush.rb +18 -0
- data/lib/dapp/project/dappfile.rb +70 -0
- data/lib/dapp/project/lock.rb +27 -0
- data/lib/dapp/project/logging/base.rb +107 -0
- data/lib/dapp/project/logging/process.rb +104 -0
- data/lib/dapp/project/paint.rb +16 -0
- data/lib/dapp/project/ssh_agent.rb +77 -0
- data/lib/dapp/version.rb +1 -1
- metadata +74 -27
- data/lib/dapp/application/deps/gitartifact.rb +0 -39
- data/lib/dapp/application/logging.rb +0 -120
- data/lib/dapp/application/system_shellout.rb +0 -63
- data/lib/dapp/build/stage/chef_cookbooks.rb +0 -33
- data/lib/dapp/build/stage/infra_setup.rb +0 -27
- data/lib/dapp/build/stage/install.rb +0 -27
- data/lib/dapp/build/stage/setup.rb +0 -27
- data/lib/dapp/build/stage/source_1.rb +0 -21
- data/lib/dapp/build/stage/source_1_dependencies.rb +0 -27
- data/lib/dapp/build/stage/source_2.rb +0 -17
- data/lib/dapp/build/stage/source_2_dependencies.rb +0 -17
- data/lib/dapp/build/stage/source_3.rb +0 -17
- data/lib/dapp/build/stage/source_3_dependencies.rb +0 -23
- data/lib/dapp/build/stage/source_4.rb +0 -21
- data/lib/dapp/build/stage/source_4_dependencies.rb +0 -27
- data/lib/dapp/cli/smartpush.rb +0 -19
- data/lib/dapp/controller.rb +0 -119
- data/lib/dapp/error/controller.rb +0 -6
- data/lib/dapp/helper/log.rb +0 -73
@@ -0,0 +1,25 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
module SetupGroup
|
5
|
+
# GAPrePatch
|
6
|
+
class GAPreSetupPatch < GABase
|
7
|
+
include Mod::Group
|
8
|
+
|
9
|
+
def initialize(application, next_stage)
|
10
|
+
@prev_stage = GAPreSetupPatchDependencies.new(application, self)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def prev_g_a_stage
|
15
|
+
super.prev_stage # GAPostInstallPatch
|
16
|
+
end
|
17
|
+
|
18
|
+
def next_g_a_stage
|
19
|
+
super.next_stage # GAPostSetupPatch
|
20
|
+
end
|
21
|
+
end # GAPrePatch
|
22
|
+
end
|
23
|
+
end # Stage
|
24
|
+
end # Build
|
25
|
+
end # Dapp
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
module SetupGroup
|
5
|
+
# GAPreSetupPatchDependencies
|
6
|
+
class GAPreSetupPatchDependencies < GADependenciesBase
|
7
|
+
include Mod::Group
|
8
|
+
|
9
|
+
def initialize(application, next_stage)
|
10
|
+
@prev_stage = BeforeSetup.new(application, self)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def dependencies
|
15
|
+
[setup_dependencies_files_checksum, application.builder.setup_checksum]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def setup_dependencies_files_checksum
|
21
|
+
@setup_files_checksum ||= dependencies_files_checksum(application.config._setup_dependencies)
|
22
|
+
end
|
23
|
+
end # GAPreSetupPatchDependencies
|
24
|
+
end
|
25
|
+
end # Stage
|
26
|
+
end # Build
|
27
|
+
end # Dapp
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
module SetupGroup
|
5
|
+
# Setup
|
6
|
+
class Setup < Base
|
7
|
+
include Mod::Group
|
8
|
+
|
9
|
+
def initialize(application, next_stage)
|
10
|
+
@prev_stage = GAPreSetupPatch.new(application, self)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def empty?
|
15
|
+
super && !application.builder.setup?
|
16
|
+
end
|
17
|
+
|
18
|
+
def dependencies
|
19
|
+
prev_stage.prev_stage.dependencies # GAPreSetupPatchDependencies
|
20
|
+
end
|
21
|
+
|
22
|
+
def image
|
23
|
+
super do |image|
|
24
|
+
application.builder.setup(image)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end # Setup
|
28
|
+
end
|
29
|
+
end # Stage
|
30
|
+
end # Build
|
31
|
+
end # Dapp
|
data/lib/dapp/builder/base.rb
CHANGED
@@ -8,27 +8,30 @@ module Dapp
|
|
8
8
|
@application = application
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def before_application_export
|
12
|
+
end
|
13
|
+
|
14
|
+
def before_install?
|
12
15
|
false
|
13
16
|
end
|
14
17
|
|
15
|
-
def
|
18
|
+
def before_install(_image)
|
16
19
|
raise
|
17
20
|
end
|
18
21
|
|
19
|
-
def
|
22
|
+
def before_install_checksum
|
20
23
|
raise
|
21
24
|
end
|
22
25
|
|
23
|
-
def
|
26
|
+
def before_setup?
|
24
27
|
false
|
25
28
|
end
|
26
29
|
|
27
|
-
def
|
30
|
+
def before_setup(_image)
|
28
31
|
raise
|
29
32
|
end
|
30
33
|
|
31
|
-
def
|
34
|
+
def before_setup_checksum
|
32
35
|
raise
|
33
36
|
end
|
34
37
|
|
data/lib/dapp/builder/chef.rb
CHANGED
@@ -11,18 +11,28 @@ 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
|
-
|
14
|
+
def before_application_export
|
15
|
+
super
|
16
|
+
|
17
|
+
%i(before_install install before_setup setup chef_cookbooks).each do |stage|
|
18
|
+
raise ::Dapp::Error::Application, code: :cookbooks_stage_checksum_not_caclculated,
|
19
|
+
data: { stage: stage } unless stage_cookbooks_checksum_path(stage).exist?
|
17
20
|
end
|
21
|
+
end
|
22
|
+
|
23
|
+
%i(before_install install before_setup setup).each do |stage|
|
24
|
+
define_method("#{stage}_checksum") { stage_cookbooks_checksum(stage) }
|
18
25
|
|
19
26
|
define_method("#{stage}?") { !stage_empty?(stage) }
|
20
27
|
|
21
|
-
define_method(
|
28
|
+
define_method(stage.to_s) do |image|
|
22
29
|
unless stage_empty?(stage)
|
23
30
|
image.add_volumes_from(chefdk_container)
|
31
|
+
image.add_command 'export PATH=/.dapp/deps/chefdk/bin:$PATH',
|
32
|
+
"export DAPP_BUILD_STAGE=#{stage}"
|
33
|
+
|
24
34
|
image.add_volume "#{stage_build_path(stage)}:#{container_stage_build_path(stage)}:ro"
|
25
|
-
image.add_command ['
|
35
|
+
image.add_command ['chef-solo',
|
26
36
|
'--legacy-mode',
|
27
37
|
"-c #{container_stage_config_path(stage)}",
|
28
38
|
"-o #{stage_cookbooks_runlist(stage).join(',')}"].join(' ')
|
@@ -35,10 +45,10 @@ module Dapp
|
|
35
45
|
end
|
36
46
|
|
37
47
|
def chef_cookbooks(image)
|
38
|
-
image.add_volume "#{cookbooks_vendor_path
|
48
|
+
image.add_volume "#{cookbooks_vendor_path}:#{application.container_dapp_path('chef_cookbooks')}"
|
39
49
|
image.add_command(
|
40
50
|
'mkdir -p /usr/share/dapp/chef_repo',
|
41
|
-
["cp -a #{application.container_dapp_path('
|
51
|
+
["cp -a #{application.container_dapp_path('chef_cookbooks')} ",
|
42
52
|
'/usr/share/dapp/chef_repo/cookbooks'].join
|
43
53
|
)
|
44
54
|
end
|
@@ -78,11 +88,11 @@ module Dapp
|
|
78
88
|
end
|
79
89
|
|
80
90
|
def berksfile_lock_checksum
|
81
|
-
application.hashsum
|
91
|
+
application.hashsum(berksfile_lock_path.read) if berksfile_lock_path.exist?
|
82
92
|
end
|
83
93
|
|
84
94
|
def stage_cookbooks_checksum_path(stage)
|
85
|
-
application.build_path("#{cookbooks_checksum}.#{stage}.checksum")
|
95
|
+
application.build_path.join("#{cookbooks_checksum}.#{stage}.checksum")
|
86
96
|
end
|
87
97
|
|
88
98
|
def stage_cookbooks_checksum(stage)
|
@@ -90,18 +100,28 @@ module Dapp
|
|
90
100
|
stage_cookbooks_checksum_path(stage).read.strip
|
91
101
|
else
|
92
102
|
checksum = if stage == :chef_cookbooks
|
93
|
-
|
103
|
+
paths = Dir[cookbooks_vendor_path('**/*')].map(&Pathname.method(:new))
|
104
|
+
|
105
|
+
application.hashsum [
|
106
|
+
application.paths_content_hashsum(paths),
|
107
|
+
*paths.map { |p| p.relative_path_from(cookbooks_vendor_path).to_s }.sort
|
108
|
+
]
|
94
109
|
else
|
95
110
|
paths = Dir[stage_cookbooks_path(stage, '**/*')].map(&Pathname.method(:new))
|
96
111
|
|
97
112
|
application.hashsum [
|
98
113
|
application.paths_content_hashsum(paths),
|
99
114
|
*paths.map { |p| p.relative_path_from(stage_cookbooks_path(stage)).to_s }.sort,
|
100
|
-
|
115
|
+
*enabled_modules,
|
116
|
+
stage == :before_install ? chefdk_image : nil
|
101
117
|
].compact
|
102
118
|
end
|
103
119
|
|
104
|
-
stage_cookbooks_checksum_path(stage).
|
120
|
+
stage_cookbooks_checksum_path(stage).tap do |path|
|
121
|
+
path.parent.mkpath
|
122
|
+
path.write "#{checksum}\n"
|
123
|
+
end
|
124
|
+
|
105
125
|
checksum
|
106
126
|
end
|
107
127
|
end
|
@@ -109,21 +129,20 @@ module Dapp
|
|
109
129
|
def cookbooks_checksum
|
110
130
|
@cookbooks_checksum ||= begin
|
111
131
|
paths = berksfile
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
132
|
+
.local_cookbooks
|
133
|
+
.values
|
134
|
+
.map { |cookbook| cookbook[:path] }
|
135
|
+
.product(LOCAL_COOKBOOK_CHECKSUM_PATTERNS)
|
136
|
+
.map { |cb, dir| Dir[cb.join(dir)] }
|
137
|
+
.flatten
|
138
|
+
.map(&Pathname.method(:new))
|
119
139
|
|
120
140
|
application.hashsum [
|
121
141
|
application.paths_content_hashsum(paths),
|
122
142
|
*paths.map { |p| p.relative_path_from(berksfile.home_path).to_s }.sort,
|
123
|
-
berksfile_lock_checksum,
|
124
|
-
*enabled_recipes,
|
143
|
+
(berksfile_lock_checksum unless application.project.cli_options[:dev]),
|
125
144
|
*enabled_modules
|
126
|
-
]
|
145
|
+
].compact
|
127
146
|
end
|
128
147
|
end
|
129
148
|
|
@@ -137,9 +156,9 @@ module Dapp
|
|
137
156
|
|
138
157
|
def chefdk_container
|
139
158
|
@chefdk_container ||= begin
|
140
|
-
if application.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
|
141
|
-
application.log_secondary_process(application.t(code: 'process.
|
142
|
-
application.shellout(
|
159
|
+
if application.project.shellout("docker inspect #{chefdk_container_name}").exitstatus.nonzero?
|
160
|
+
application.project.log_secondary_process(application.project.t(code: 'process.chefdk_loading'), short: true) do
|
161
|
+
application.project.shellout(
|
143
162
|
['docker run',
|
144
163
|
'--restart=no',
|
145
164
|
"--name #{chefdk_container_name}",
|
@@ -148,91 +167,97 @@ module Dapp
|
|
148
167
|
)
|
149
168
|
end
|
150
169
|
end
|
170
|
+
|
151
171
|
chefdk_container_name
|
152
172
|
end
|
153
173
|
end
|
154
174
|
|
155
175
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
156
|
-
def install_cookbooks
|
176
|
+
def install_cookbooks
|
157
177
|
volumes_from = chefdk_container
|
158
|
-
application.log_secondary_process(application.t(code:
|
159
|
-
|
160
|
-
|
178
|
+
application.project.log_secondary_process(application.project.t(code: 'process.berks_vendor')) do
|
179
|
+
before_vendor_commands = [].tap do |commands|
|
180
|
+
unless application.project.cli_options[:dev]
|
181
|
+
commands.push(
|
182
|
+
['if [ ! -f Berksfile.lock ] ; then ',
|
183
|
+
'echo "Berksfile.lock not found" 1>&2 ; ',
|
184
|
+
'exit 1 ; ',
|
185
|
+
'fi'].join
|
186
|
+
)
|
187
|
+
end
|
188
|
+
end
|
161
189
|
|
162
|
-
|
190
|
+
after_vendor_commands = [].tap do |commands|
|
191
|
+
if application.project.cli_options[:dev]
|
192
|
+
commands.push(
|
193
|
+
["install -o #{Process.uid} -g #{Process.gid} --mode $(stat -c %a Berksfile.lock) ",
|
194
|
+
"Berksfile.lock #{berksfile_lock_path}"].join
|
195
|
+
)
|
196
|
+
else
|
197
|
+
commands.push(
|
198
|
+
"export LOCKDIFF=$(diff -u1 Berksfile.lock #{berksfile_lock_path})",
|
199
|
+
['if [ "$LOCKDIFF" != "" ] ; then ',
|
200
|
+
'echo -e "Bad Berksfile.lock\n$LOCKDIFF" 1>&2 ; ',
|
201
|
+
'exit 1 ; ',
|
202
|
+
'fi'].join
|
203
|
+
)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
vendor_commands = [
|
163
208
|
'mkdir -p ~/.ssh',
|
164
209
|
'echo "Host *" >> ~/.ssh/config',
|
165
210
|
'echo " StrictHostKeyChecking no" >> ~/.ssh/config',
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
]
|
175
|
-
else
|
176
|
-
after_berks_vendor.concat [
|
177
|
-
'export LOCKDIFF=$(diff -u0 Berksfile.lock /tmp/Berksfile.lock.orig)',
|
178
|
-
['if [ "$LOCKDIFF" != "" ] ; then ',
|
179
|
-
'cp -a /tmp/Berksfile.lock.orig Berksfile.lock ; ',
|
180
|
-
'echo -e "Bad Berksfile.lock\n$LOCKDIFF" 1>&2 ; exit 1 ; fi'].join
|
181
|
-
]
|
182
|
-
end
|
183
|
-
|
184
|
-
move_cookbooks = [
|
185
|
-
["find /tmp/vendored_cookbooks -type d -exec bash -ec '",
|
211
|
+
*berksfile.local_cookbooks
|
212
|
+
.values
|
213
|
+
.map { |cookbook| "rsync --archive --relative #{cookbook[:path]} /tmp/local_cookbooks" },
|
214
|
+
"cd /tmp/local_cookbooks/#{berksfile_path.parent}",
|
215
|
+
*before_vendor_commands,
|
216
|
+
'/.dapp/deps/chefdk/bin/berks vendor /tmp/cookbooks',
|
217
|
+
*after_vendor_commands,
|
218
|
+
["find /tmp/cookbooks -type d -exec bash -ec '",
|
186
219
|
"install -o #{Process.uid} -g #{Process.gid} --mode $(stat -c %a {}) -d ",
|
187
|
-
"#{
|
188
|
-
["find /tmp/
|
220
|
+
"#{_cookbooks_vendor_path}/$(echo {} | sed -e \"s/^\\/tmp\\/cookbooks//\")' \\;"].join,
|
221
|
+
["find /tmp/cookbooks -type f -exec bash -ec '",
|
189
222
|
"install -o #{Process.uid} -g #{Process.gid} --mode $(stat -c %a {}) {} ",
|
190
|
-
"#{
|
223
|
+
"#{_cookbooks_vendor_path}/$(echo {} | sed -e \"s/\\/tmp\\/cookbooks//\")' \\;"].join,
|
224
|
+
"install -o #{Process.uid} -g #{Process.gid} --mode 0644 <(date +%s.%N) #{_cookbooks_vendor_path.join('.created_at')}"
|
191
225
|
]
|
192
226
|
|
193
|
-
|
194
|
-
*before_berks_vendor.compact,
|
195
|
-
"/.dapp/deps/chefdk/bin/berks vendor /tmp/vendored_cookbooks",
|
196
|
-
*after_berks_vendor.compact,
|
197
|
-
*move_cookbooks.compact
|
198
|
-
]
|
199
|
-
|
200
|
-
application.shellout!(
|
227
|
+
application.project.shellout!(
|
201
228
|
['docker run --rm',
|
202
|
-
|
203
|
-
"--volume #{dest_path.tap(&:mkpath)}:#{dest_path}",
|
229
|
+
"--volumes-from #{volumes_from}",
|
204
230
|
*berksfile.local_cookbooks
|
205
231
|
.values
|
206
232
|
.map { |cookbook| "--volume #{cookbook[:path]}:#{cookbook[:path]}" },
|
207
|
-
"--
|
208
|
-
"--
|
209
|
-
("--env SSH_AUTH_SOCK=#{
|
210
|
-
('
|
211
|
-
|
212
|
-
log_verbose: application.log_verbose?
|
233
|
+
("--volume #{application.project.ssh_auth_sock}:#{application.project.ssh_auth_sock}" if application.project.ssh_auth_sock),
|
234
|
+
"--volume #{_cookbooks_vendor_path.tap(&:mkpath)}:#{_cookbooks_vendor_path}",
|
235
|
+
("--env SSH_AUTH_SOCK=#{application.project.ssh_auth_sock}" if application.project.ssh_auth_sock),
|
236
|
+
"dappdeps/berksdeps:0.1.0 bash -ec '#{application.project.shellout_pack(vendor_commands.join(' && '))}'"].compact.join(' '),
|
237
|
+
log_verbose: application.project.log_verbose?
|
213
238
|
)
|
214
239
|
end
|
215
240
|
end
|
216
241
|
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
217
242
|
|
218
|
-
def _cookbooks_vendor_path
|
219
|
-
application.
|
220
|
-
application.config._name,
|
221
|
-
['cookbooks',
|
222
|
-
chef_cookbooks_stage ? 'chef_cookbooks_stage' : nil,
|
223
|
-
cookbooks_checksum].compact.join('.')
|
224
|
-
)
|
243
|
+
def _cookbooks_vendor_path
|
244
|
+
application.build_path.join('cookbooks', cookbooks_checksum)
|
225
245
|
end
|
226
246
|
|
227
|
-
def cookbooks_vendor_path(*path
|
228
|
-
_cookbooks_vendor_path
|
229
|
-
|
247
|
+
def cookbooks_vendor_path(*path)
|
248
|
+
_cookbooks_vendor_path.tap do |cookbooks_path|
|
249
|
+
application.project.lock("#{application.config._basename}.cookbooks.#{cookbooks_checksum}", default_timeout: 120) do
|
250
|
+
@install_cookbooks ||= begin
|
251
|
+
install_cookbooks unless _cookbooks_vendor_path.join('.created_at').exist? && !application.project.cli_options[:dev]
|
252
|
+
true
|
253
|
+
end
|
254
|
+
end
|
230
255
|
end.join(*path)
|
231
256
|
end
|
232
257
|
|
233
258
|
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
234
259
|
def install_stage_cookbooks(stage)
|
235
|
-
select_existing_paths =
|
260
|
+
select_existing_paths = ->(cookbook_path, paths) do
|
236
261
|
paths.select { |from, _| cookbook_path.join(from).exist? }
|
237
262
|
end
|
238
263
|
|
@@ -250,9 +275,8 @@ module Dapp
|
|
250
275
|
mdapp_enabled = is_mdapp && enabled_modules.include?(mdapp_name)
|
251
276
|
|
252
277
|
paths = if is_project
|
253
|
-
recipe_paths = enabled_recipes
|
254
|
-
|
255
|
-
.select { |from, _| cookbook_path.join(from).exist? }
|
278
|
+
recipe_paths = enabled_recipes.map { |recipe| ["recipes/#{stage}/#{recipe}.rb", "recipes/#{recipe}.rb"] }
|
279
|
+
.select { |from, _| cookbook_path.join(from).exist? }
|
256
280
|
|
257
281
|
common_project_paths = select_existing_paths.call(
|
258
282
|
cookbook_path, [*common_paths,
|
@@ -279,7 +303,7 @@ module Dapp
|
|
279
303
|
else
|
280
304
|
[nil, *common_mdapp_paths]
|
281
305
|
end
|
282
|
-
|
306
|
+
else
|
283
307
|
[['.', '.']]
|
284
308
|
end
|
285
309
|
|
@@ -328,41 +352,38 @@ module Dapp
|
|
328
352
|
@stage_cookbooks_runlist[stage] ||= begin
|
329
353
|
res = []
|
330
354
|
|
331
|
-
does_entry_exist =
|
355
|
+
does_entry_exist = lambda do |cookbook, entrypoint|
|
332
356
|
stage_cookbooks_path(stage, cookbook, 'recipes', "#{entrypoint}.rb").exist?
|
333
357
|
end
|
334
358
|
|
335
|
-
format_entry =
|
359
|
+
format_entry = lambda do |cookbook, entrypoint|
|
336
360
|
entrypoint = 'void' if entrypoint.nil?
|
337
361
|
"#{cookbook}::#{entrypoint}"
|
338
362
|
end
|
339
363
|
|
340
|
-
enabled_modules
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
[cookbook, nil]
|
347
|
-
end
|
364
|
+
enabled_modules.map do |mod|
|
365
|
+
cookbook = "mdapp-#{mod}"
|
366
|
+
if does_entry_exist[cookbook, stage]
|
367
|
+
[cookbook, stage]
|
368
|
+
else
|
369
|
+
[cookbook, nil]
|
348
370
|
end
|
349
|
-
|
350
|
-
|
351
|
-
enabled_recipes
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
res << [project_name, nil]
|
359
|
-
end
|
371
|
+
end.tap { |entries| res.concat entries }
|
372
|
+
|
373
|
+
enabled_recipes.map { |recipe| [project_name, recipe] }
|
374
|
+
.select { |entry| does_entry_exist[*entry] }
|
375
|
+
.tap do |entries|
|
376
|
+
if entries.any?
|
377
|
+
res.concat entries
|
378
|
+
else
|
379
|
+
res << [project_name, nil]
|
360
380
|
end
|
381
|
+
end
|
361
382
|
|
362
383
|
if res.all? { |_, entrypoint| entrypoint.nil? }
|
363
384
|
[]
|
364
385
|
else
|
365
|
-
res.map
|
386
|
+
res.map(&format_entry)
|
366
387
|
end
|
367
388
|
end
|
368
389
|
end
|
@@ -377,7 +398,7 @@ module Dapp
|
|
377
398
|
end
|
378
399
|
|
379
400
|
def stage_cookbooks_path(stage, *path)
|
380
|
-
_stage_cookbooks_path(stage).tap do |
|
401
|
+
_stage_cookbooks_path(stage).tap do |_cookbooks_path|
|
381
402
|
@install_stage_cookbooks ||= {}
|
382
403
|
@install_stage_cookbooks[stage] ||= true.tap { install_stage_cookbooks(stage) }
|
383
404
|
end.join(*path)
|