dapp 0.2.6 → 0.2.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|