dapp 0.2.6 → 0.2.7
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 +8 -8
- data/lib/dapp.rb +1 -0
- data/lib/dapp/build/stage/chef_cookbooks.rb +23 -0
- data/lib/dapp/build/stage/source_4.rb +5 -1
- data/lib/dapp/builder/chef.rb +58 -21
- data/lib/dapp/builder/shell.rb +7 -0
- data/lib/dapp/config/application.rb +11 -2
- data/lib/dapp/config/docker.rb +11 -12
- data/lib/dapp/helper/shellout.rb +5 -1
- data/lib/dapp/helper/streaming.rb +3 -3
- data/lib/dapp/stage_image.rb +10 -2
- data/lib/dapp/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NmY2NzQzN2JiYmQ0Y2M4ZmY0ZTEwMGMzYTI3ZmQ0ZDYyZjlkODJjMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTYwNTYyN2M5MWQyNjkxZTNjMGYxZmNlZTk3NTFiM2RhOTVlMjA5ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzBkNjBhZjljMTEzNDc0MDdjM2FmN2MxNmQ2YmViMGM5NmEzZDI2OTdhM2E2
|
10
|
+
MWIyYzE4NzQwMGFlMzQ1YzZjMDI0MTE5MjU2MWI1MzAzMTUxNTdjODAzYTlm
|
11
|
+
Yzc4YjlkNTA2YWI0M2VkODY2ZTAxNDAxZTYwMzJhMjcyZDRmODA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDU4ZWVjMmQyYWNmN2UyOGYxMjE1ODMzNDhlOWI2NDQ5ODljYjk4MmM1ODc5
|
14
|
+
OTFmZmM0ZWIzOWVmYzIyN2EzNTI3ZDg4Y2QwYWVkNjJjMzFlNTkwMzNiMzFj
|
15
|
+
ZjQ4YzM0ZWEyZDZlZjJlYjY5NTc1OTI2ZDQ0ZTBjNjlhODZjZmM=
|
data/lib/dapp.rb
CHANGED
@@ -53,6 +53,7 @@ require 'dapp/build/stage/infra_install'
|
|
53
53
|
require 'dapp/build/stage/infra_setup'
|
54
54
|
require 'dapp/build/stage/app_install'
|
55
55
|
require 'dapp/build/stage/app_setup'
|
56
|
+
require 'dapp/build/stage/chef_cookbooks'
|
56
57
|
require 'dapp/build/stage/source_1_archive'
|
57
58
|
require 'dapp/build/stage/source_1'
|
58
59
|
require 'dapp/build/stage/source_2'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Build
|
3
|
+
module Stage
|
4
|
+
# ChefCookbooks
|
5
|
+
class ChefCookbooks < Base
|
6
|
+
def initialize(application, next_stage)
|
7
|
+
@prev_stage = AppSetup.new(application, self)
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def signature
|
12
|
+
hashsum [prev_stage.signature, *application.builder.chef_cookbooks_checksum]
|
13
|
+
end
|
14
|
+
|
15
|
+
def image
|
16
|
+
super do |image|
|
17
|
+
application.builder.chef_cookbooks(image)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end # ChefCookbooks
|
21
|
+
end # Stage
|
22
|
+
end # Build
|
23
|
+
end # Dapp
|
@@ -6,10 +6,14 @@ module Dapp
|
|
6
6
|
MAX_PATCH_SIZE = 1024 * 1024
|
7
7
|
|
8
8
|
def initialize(application, next_stage)
|
9
|
-
@prev_stage =
|
9
|
+
@prev_stage = ChefCookbooks.new(application, self)
|
10
10
|
super
|
11
11
|
end
|
12
12
|
|
13
|
+
def prev_source_stage
|
14
|
+
prev_stage.prev_stage.prev_stage
|
15
|
+
end
|
16
|
+
|
13
17
|
def next_source_stage
|
14
18
|
next_stage
|
15
19
|
end
|
data/lib/dapp/builder/chef.rb
CHANGED
@@ -12,11 +12,11 @@ module Dapp
|
|
12
12
|
metadata.json
|
13
13
|
recipes/%{stage}.rb
|
14
14
|
recipes/*_%{stage}.rb
|
15
|
-
files/%{stage}/*
|
16
|
-
templates/%{stage}/*
|
15
|
+
files/default/%{stage}/*
|
16
|
+
templates/default/%{stage}/*
|
17
17
|
).freeze
|
18
18
|
|
19
|
-
DEFAULT_CHEFDK_IMAGE = 'dappdeps/chefdk:0.
|
19
|
+
DEFAULT_CHEFDK_IMAGE = 'dappdeps/chefdk:0.17.3-1'.freeze # TODO: config, DSL, DEFAULT_CHEFDK_IMAGE
|
20
20
|
|
21
21
|
[:infra_install, :infra_setup, :app_install, :app_setup].each do |stage|
|
22
22
|
define_method(:"#{stage}_checksum") { stage_cookbooks_checksum(stage) }
|
@@ -37,6 +37,17 @@ module Dapp
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
+
def chef_cookbooks_checksum
|
41
|
+
stage_cookbooks_checksum(:chef_cookbooks)
|
42
|
+
end
|
43
|
+
|
44
|
+
def chef_cookbooks(image)
|
45
|
+
image.add_commands(
|
46
|
+
"mkdir -p /usr/share/dapp/chef_repo",
|
47
|
+
"cp -a #{container_cookbooks_vendor_path} /usr/share/dapp/chef_repo/cookbooks"
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
40
51
|
private
|
41
52
|
|
42
53
|
def project_name
|
@@ -47,6 +58,10 @@ module Dapp
|
|
47
58
|
application.home_path('Berksfile')
|
48
59
|
end
|
49
60
|
|
61
|
+
def berksfile_lock_path
|
62
|
+
application.home_path('Berksfile.lock')
|
63
|
+
end
|
64
|
+
|
50
65
|
def berksfile
|
51
66
|
@berksfile ||= Berksfile.new(application.home_path, berksfile_path)
|
52
67
|
end
|
@@ -60,8 +75,7 @@ module Dapp
|
|
60
75
|
end
|
61
76
|
|
62
77
|
def berksfile_lock_checksum
|
63
|
-
|
64
|
-
application.hashsum path.read if path.exist?
|
78
|
+
application.hashsum berksfile_lock_path.read if berksfile_lock_path.exist?
|
65
79
|
end
|
66
80
|
|
67
81
|
# rubocop:disable Metrics/AbcSize
|
@@ -78,9 +92,11 @@ module Dapp
|
|
78
92
|
to_runlist_entrypoint[name, stage]
|
79
93
|
end.compact)
|
80
94
|
|
81
|
-
|
82
|
-
|
83
|
-
|
95
|
+
project_main_entry = to_runlist_entrypoint[project_name, stage]
|
96
|
+
res << project_main_entry if project_main_entry
|
97
|
+
|
98
|
+
res.concat(application.config._app_runlist.map do |app_component|
|
99
|
+
to_runlist_entrypoint[project_name, [app_component, stage].join('_')]
|
84
100
|
end.compact)
|
85
101
|
end
|
86
102
|
end
|
@@ -123,11 +139,18 @@ module Dapp
|
|
123
139
|
else
|
124
140
|
install_cookbooks
|
125
141
|
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
142
|
+
if stage == :chef_cookbooks
|
143
|
+
checksum = cookbooks_checksum
|
144
|
+
else
|
145
|
+
checksum = application.hashsum [
|
146
|
+
_paths_checksum(stage_cookbooks_vendored_paths(stage, with_files: true)),
|
147
|
+
*application.config._chef._modules,
|
148
|
+
stage == :infra_install ? chefdk_image : nil
|
149
|
+
].compact
|
130
150
|
end
|
151
|
+
|
152
|
+
stage_cookbooks_checksum_path(stage).write "#{checksum}\n"
|
153
|
+
checksum
|
131
154
|
end
|
132
155
|
end
|
133
156
|
|
@@ -172,24 +195,34 @@ module Dapp
|
|
172
195
|
ssh_auth_socket_path = nil
|
173
196
|
ssh_auth_socket_path = Pathname.new(ENV['SSH_AUTH_SOCK']).expand_path if ENV['SSH_AUTH_SOCK'] && File.exist?(ENV['SSH_AUTH_SOCK'])
|
174
197
|
|
198
|
+
vendor_commands = [
|
199
|
+
'mkdir -p ~/.ssh',
|
200
|
+
'echo "Host *" >> ~/.ssh/config',
|
201
|
+
'echo " StrictHostKeyChecking no" >> ~/.ssh/config',
|
202
|
+
'if [ ! -f Berksfile.lock ] ; then echo "Berksfile.lock not found" 1>&2 ; exit 1 ; fi',
|
203
|
+
'cp -a Berksfile.lock /tmp/Berksfile.lock.orig',
|
204
|
+
'/.dapp/deps/chefdk/bin/berks vendor /tmp/vendored_cookbooks',
|
205
|
+
'export LOCKDIFF=$(diff -u0 Berksfile.lock /tmp/Berksfile.lock.orig)',
|
206
|
+
['if [ "$LOCKDIFF" != "" ] ; then ',
|
207
|
+
'cp -a /tmp/Berksfile.lock.orig Berksfile.lock ; ',
|
208
|
+
'echo -e "Bad Berksfile.lock\n$LOCKDIFF" 1>&2 ; exit 1 ; fi'].join,
|
209
|
+
["find /tmp/vendored_cookbooks -type f -exec bash -ec '",
|
210
|
+
"install -D -o #{Process.uid} -g #{Process.gid} --mode $(stat -c %a {}) {} ",
|
211
|
+
"#{cookbooks_vendor_path}/$(echo {} | sed -e \"s/\\/tmp\\/vendored_cookbooks\\///g\")' \\;"].join,
|
212
|
+
"chown -R #{Process.uid}:#{Process.gid} #{berksfile_lock_path}",
|
213
|
+
]
|
214
|
+
|
175
215
|
application.shellout!(
|
176
216
|
['docker run --rm',
|
177
|
-
|
178
|
-
'--volume /usr:/usr:ro',
|
179
|
-
'--volume /lib:/lib:ro',
|
180
|
-
'--volume /home:/home',
|
181
|
-
'--volume /tmp:/tmp',
|
182
|
-
("--volume #{ssh_auth_socket_path.dirname}:#{ssh_auth_socket_path.dirname}" if ssh_auth_socket_path),
|
217
|
+
("--volume #{ssh_auth_socket_path}:#{ssh_auth_socket_path}" if ssh_auth_socket_path),
|
183
218
|
"--volume #{cookbooks_vendor_path.tap(&:mkpath)}:#{cookbooks_vendor_path}",
|
184
219
|
*berksfile.local_cookbooks
|
185
220
|
.values
|
186
221
|
.map { |cookbook| "--volume #{cookbook[:path]}:#{cookbook[:path]}" },
|
187
222
|
"--volumes-from #{volumes_from}",
|
188
|
-
"--user #{Process.uid}:#{Process.gid}",
|
189
223
|
"--workdir #{berksfile_path.parent}",
|
190
|
-
'--env BERKSHELF_PATH=/tmp/berkshelf',
|
191
224
|
("--env SSH_AUTH_SOCK=#{ssh_auth_socket_path}" if ssh_auth_socket_path),
|
192
|
-
"dappdeps/berksdeps:0.1.0
|
225
|
+
"dappdeps/berksdeps:0.1.0 #{application.shellout_pack(vendor_commands.join(' && '))}"].compact.join(' '),
|
193
226
|
log_verbose: application.log_verbose?
|
194
227
|
)
|
195
228
|
|
@@ -223,6 +256,10 @@ module Dapp
|
|
223
256
|
application.build_path('chef', 'vendored_cookbooks').join(*path)
|
224
257
|
end
|
225
258
|
|
259
|
+
def container_cookbooks_vendor_path(*path)
|
260
|
+
application.container_build_path('chef', 'vendored_cookbooks').join(*path)
|
261
|
+
end
|
262
|
+
|
226
263
|
def stage_build_path(stage, *path)
|
227
264
|
application.build_path(application.config._name, stage).join(*path)
|
228
265
|
end
|
data/lib/dapp/builder/shell.rb
CHANGED
@@ -61,12 +61,21 @@ module Dapp
|
|
61
61
|
@_apps.empty? ? [self] : @_apps.flatten
|
62
62
|
end
|
63
63
|
|
64
|
+
def _app_chain
|
65
|
+
@_app_chain ||= (_parent ? _parent._app_chain : []) + [self]
|
66
|
+
end
|
67
|
+
|
64
68
|
def _app_runlist
|
65
|
-
|
69
|
+
_app_chain.map(&:_name).map do |name|
|
70
|
+
if subname = name.split("#{_root_app._name}-", 2)[1]
|
71
|
+
subname_parts = subname.split('-')
|
72
|
+
subname_parts.join('_') if subname_parts.any?
|
73
|
+
end
|
74
|
+
end.compact
|
66
75
|
end
|
67
76
|
|
68
77
|
def _root_app
|
69
|
-
|
78
|
+
_app_chain.first
|
70
79
|
end
|
71
80
|
|
72
81
|
private
|
data/lib/dapp/config/docker.rb
CHANGED
@@ -2,7 +2,7 @@ module Dapp
|
|
2
2
|
module Config
|
3
3
|
# Docker
|
4
4
|
class Docker
|
5
|
-
attr_reader :_volume, :_expose, :_env, :_label, :_cmd, :_onbuild, :_workdir, :_user
|
5
|
+
attr_reader :_volume, :_expose, :_env, :_label, :_cmd, :_onbuild, :_workdir, :_user, :_entrypoint
|
6
6
|
attr_reader :_from_cache_version
|
7
7
|
|
8
8
|
def initialize
|
@@ -27,12 +27,12 @@ module Dapp
|
|
27
27
|
@_expose.concat(args)
|
28
28
|
end
|
29
29
|
|
30
|
-
def env(
|
31
|
-
@_env.concat(
|
30
|
+
def env(*args)
|
31
|
+
@_env.concat(args)
|
32
32
|
end
|
33
33
|
|
34
|
-
def label(
|
35
|
-
@_label.concat(
|
34
|
+
def label(*args)
|
35
|
+
@_label.concat(args)
|
36
36
|
end
|
37
37
|
|
38
38
|
def cmd(*args)
|
@@ -51,6 +51,10 @@ module Dapp
|
|
51
51
|
@_user = val
|
52
52
|
end
|
53
53
|
|
54
|
+
def entrypoint(*cmd_with_args)
|
55
|
+
@_entrypoint = cmd_with_args.flatten
|
56
|
+
end
|
57
|
+
|
54
58
|
def _from
|
55
59
|
@_from || raise(Error::Config, code: :docker_from_not_defined)
|
56
60
|
end
|
@@ -64,19 +68,14 @@ module Dapp
|
|
64
68
|
cmd: _cmd,
|
65
69
|
onbuild: _onbuild,
|
66
70
|
workdir: _workdir,
|
67
|
-
user: _user
|
71
|
+
user: _user,
|
72
|
+
entrypoint: _entrypoint
|
68
73
|
}
|
69
74
|
end
|
70
75
|
|
71
76
|
def clone
|
72
77
|
Marshal.load(Marshal.dump(self))
|
73
78
|
end
|
74
|
-
|
75
|
-
private
|
76
|
-
|
77
|
-
def options_to_args(options)
|
78
|
-
options.map {|key, value| "#{key.upcase}=#{value}" }
|
79
|
-
end
|
80
79
|
end
|
81
80
|
end
|
82
81
|
end
|
data/lib/dapp/helper/shellout.rb
CHANGED
@@ -30,7 +30,11 @@ module Dapp
|
|
30
30
|
shellout(*args, **kwargs).tap(&:error!)
|
31
31
|
rescue ::Mixlib::ShellOut::ShellCommandFailed => e
|
32
32
|
raise Error::Shellout, code: Trivia.class_to_lowercase(e.class),
|
33
|
-
data: { stream: stream.
|
33
|
+
data: { stream: stream.show }
|
34
|
+
end
|
35
|
+
|
36
|
+
def shellout_pack(command)
|
37
|
+
"bash -ec 'eval $(echo #{Base64.strict_encode64(command)} | base64 --decode)'"
|
34
38
|
end
|
35
39
|
|
36
40
|
def self.included(base)
|
@@ -12,8 +12,8 @@ module Dapp
|
|
12
12
|
buffer << string
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
buffer.join
|
15
|
+
def show
|
16
|
+
buffer.join.strip
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -40,7 +40,7 @@ module Dapp
|
|
40
40
|
# Error
|
41
41
|
class Error < Base
|
42
42
|
def format_string(str)
|
43
|
-
Paint.paint_string(super, :warning)
|
43
|
+
"#{Paint.paint_string(super.strip, :warning)}\n"
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/lib/dapp/stage_image.rb
CHANGED
@@ -38,6 +38,10 @@ module Dapp
|
|
38
38
|
add_change_option(:workdir, value)
|
39
39
|
end
|
40
40
|
|
41
|
+
def add_change_entrypoint(value)
|
42
|
+
add_change_option(:entrypoint, value)
|
43
|
+
end
|
44
|
+
|
41
45
|
def add_change_user(value)
|
42
46
|
add_change_option(:user, value)
|
43
47
|
end
|
@@ -129,7 +133,7 @@ module Dapp
|
|
129
133
|
|
130
134
|
def prepared_change
|
131
135
|
prepared_options_default(change_options) do |k, vals|
|
132
|
-
if
|
136
|
+
if [:cmd, :entrypoint].include? k
|
133
137
|
%(-c '#{k.to_s.upcase} #{Array(vals)}')
|
134
138
|
else
|
135
139
|
Array(vals).map { |v| %(-c "#{k.to_s.upcase} #{v}") }.join(' ')
|
@@ -142,7 +146,11 @@ module Dapp
|
|
142
146
|
end
|
143
147
|
|
144
148
|
def prepared_bash_command
|
145
|
-
|
149
|
+
if bash_commands.empty?
|
150
|
+
'true'
|
151
|
+
else
|
152
|
+
shellout_pack prepared_commands.join(' && ')
|
153
|
+
end
|
146
154
|
end
|
147
155
|
|
148
156
|
def prepared_commands
|
data/lib/dapp/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Stolyarov
|
@@ -334,6 +334,7 @@ files:
|
|
334
334
|
- lib/dapp/build/stage/app_install.rb
|
335
335
|
- lib/dapp/build/stage/app_setup.rb
|
336
336
|
- lib/dapp/build/stage/base.rb
|
337
|
+
- lib/dapp/build/stage/chef_cookbooks.rb
|
337
338
|
- lib/dapp/build/stage/from.rb
|
338
339
|
- lib/dapp/build/stage/infra_install.rb
|
339
340
|
- lib/dapp/build/stage/infra_setup.rb
|