dapp 0.13.3 → 0.13.4
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 +0 -13
- data/config/en/common.yml +4 -2
- data/config/en/net_status.yml +15 -3
- data/lib/dapp.rb +11 -6
- data/lib/dapp/cli.rb +1 -1
- data/lib/dapp/cli/command/base.rb +4 -4
- data/lib/dapp/config/directive/base.rb +4 -2
- data/lib/dapp/core_ext/hash.rb +14 -0
- data/lib/dapp/dapp.rb +32 -6
- data/lib/dapp/dapp/dapp_config.rb +85 -0
- data/lib/dapp/dapp/dappfile.rb +4 -0
- data/lib/dapp/dapp/deps/base.rb +2 -2
- data/lib/dapp/dapp/deps/gitartifact.rb +2 -2
- data/lib/dapp/dapp/logging/base.rb +5 -5
- data/lib/dapp/dapp/logging/process.rb +5 -7
- data/lib/dapp/dapp/shellout/base.rb +16 -17
- data/lib/dapp/deployment/cli/command/deployment.rb +2 -3
- data/lib/dapp/deployment/dapp/command/apply.rb +6 -6
- data/lib/dapp/deployment/dapp/dapp.rb +0 -1
- data/lib/dapp/deployment/kube_app.rb +1 -1
- data/lib/dapp/deployment/kube_base.rb +1 -1
- data/lib/dapp/dimg/build/stage/artifact_base.rb +3 -8
- data/lib/dapp/dimg/build/stage/base.rb +57 -38
- data/lib/dapp/dimg/build/stage/docker_instructions.rb +1 -1
- data/lib/dapp/dimg/build/stage/from.rb +6 -2
- data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +2 -2
- data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
- data/lib/dapp/dimg/build/stage/ga_base.rb +1 -14
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +7 -31
- data/lib/dapp/dimg/build/stage/ga_related_dependencies_base.rb +21 -0
- data/lib/dapp/dimg/build/stage/import_artifact.rb +10 -3
- data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
- data/lib/dapp/dimg/build/stage/mod/logging.rb +7 -20
- data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +1 -1
- data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +3 -3
- data/lib/dapp/dimg/builder/chef.rb +2 -2
- data/lib/dapp/dimg/builder/chef/cookbook.rb +2 -2
- data/lib/dapp/dimg/cli/command/dimg.rb +1 -1
- data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -8
- data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -4
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +1 -1
- data/lib/dapp/dimg/config/directive/dimg/validation.rb +6 -1
- data/lib/dapp/dimg/config/directive/docker/base.rb +1 -2
- data/lib/dapp/dimg/config/directive/git_artifact_local.rb +3 -0
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +1 -1
- data/lib/dapp/dimg/config/directive/mount.rb +9 -1
- data/lib/dapp/dimg/dapp/command/build_context/export.rb +13 -15
- data/lib/dapp/dimg/dapp/command/build_context/import.rb +3 -3
- data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
- data/lib/dapp/dimg/dapp/command/common.rb +17 -6
- data/lib/dapp/dimg/dapp/command/mrproper.rb +9 -4
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +19 -17
- data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +1 -1
- data/lib/dapp/dimg/dimg.rb +5 -5
- data/lib/dapp/dimg/dimg/git_artifact.rb +11 -6
- data/lib/dapp/dimg/dimg/path.rb +2 -6
- data/lib/dapp/dimg/git_artifact.rb +118 -66
- data/lib/dapp/dimg/git_repo/base.rb +1 -1
- data/lib/dapp/dimg/git_repo/own.rb +1 -1
- data/lib/dapp/dimg/git_repo/remote.rb +23 -14
- data/lib/dapp/dimg/image/docker.rb +11 -11
- data/lib/dapp/dimg/image/scratch.rb +33 -9
- data/lib/dapp/dimg/image/stage.rb +3 -3
- data/lib/dapp/helper/cli.rb +8 -0
- data/lib/dapp/helper/tar.rb +31 -0
- data/lib/dapp/kube/cli/command/kube.rb +5 -4
- data/lib/dapp/kube/cli/command/kube/deploy.rb +5 -0
- data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +13 -0
- data/lib/dapp/kube/cli/command/kube/{secret_file_encrypt.rb → secret_extract.rb} +3 -3
- data/lib/dapp/kube/cli/command/kube/secret_generate.rb +11 -1
- data/lib/dapp/kube/client.rb +1 -1
- data/lib/dapp/kube/client/error.rb +1 -1
- data/lib/dapp/kube/dapp/command/common.rb +29 -4
- data/lib/dapp/kube/dapp/command/deploy.rb +43 -21
- data/lib/dapp/kube/dapp/command/dismiss.rb +1 -1
- data/lib/dapp/{deployment → kube}/dapp/command/minikube_setup.rb +12 -12
- data/lib/dapp/kube/dapp/command/secret_extract.rb +46 -0
- data/lib/dapp/kube/dapp/command/secret_generate.rb +33 -4
- data/lib/dapp/kube/dapp/dapp.rb +3 -2
- data/lib/dapp/kube/error/kubernetes.rb +7 -0
- data/lib/dapp/kube/secret.rb +1 -1
- data/lib/dapp/version.rb +2 -2
- metadata +11 -7
- data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +0 -13
- data/lib/dapp/kube/dapp/command/secret_file_encrypt.rb +0 -22
data/lib/dapp/dapp/deps/base.rb
CHANGED
|
@@ -10,10 +10,10 @@ module Dapp
|
|
|
10
10
|
|
|
11
11
|
def base_container
|
|
12
12
|
@base_container ||= begin
|
|
13
|
-
if shellout("
|
|
13
|
+
if shellout("#{host_docker_bin} inspect #{base_container_name}").exitstatus.nonzero?
|
|
14
14
|
log_secondary_process(t(code: 'process.base_container_creating'), short: true) do
|
|
15
15
|
shellout!(
|
|
16
|
-
[
|
|
16
|
+
["#{host_docker_bin} create",
|
|
17
17
|
"--name #{base_container_name}",
|
|
18
18
|
"--volume /.dapp/deps/base/#{BASE_VERSION} dappdeps/base:#{BASE_VERSION}"].join(' ')
|
|
19
19
|
)
|
|
@@ -10,10 +10,10 @@ module Dapp
|
|
|
10
10
|
|
|
11
11
|
def gitartifact_container
|
|
12
12
|
@gitartifact_container ||= begin
|
|
13
|
-
if shellout("
|
|
13
|
+
if shellout("#{host_docker_bin} inspect #{gitartifact_container_name}").exitstatus.nonzero?
|
|
14
14
|
log_secondary_process(t(code: 'process.gitartifact_container_creating'), short: true) do
|
|
15
15
|
shellout!(
|
|
16
|
-
[
|
|
16
|
+
["#{host_docker_bin} create",
|
|
17
17
|
"--name #{gitartifact_container_name}",
|
|
18
18
|
"--volume /.dapp/deps/gitartifact/#{GITARTIFACT_VERSION}",
|
|
19
19
|
"dappdeps/gitartifact:#{GITARTIFACT_VERSION}"].join(' ')
|
|
@@ -3,15 +3,15 @@ module Dapp
|
|
|
3
3
|
module Logging
|
|
4
4
|
module Base
|
|
5
5
|
def log_quiet?
|
|
6
|
-
|
|
6
|
+
option_quiet
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def log_time?
|
|
10
|
-
|
|
10
|
+
option_time
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def log_verbose?
|
|
14
|
-
|
|
14
|
+
option_verbose
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def ignore_config_warning?
|
|
@@ -27,11 +27,11 @@ module Dapp
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def dry_run?
|
|
30
|
-
|
|
30
|
+
option_dry_run
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def dev_mode?
|
|
34
|
-
|
|
34
|
+
option_dev
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def log_info(*args, **kwargs)
|
|
@@ -25,7 +25,7 @@ module Dapp
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
# rubocop:disable Metrics/ParameterLists
|
|
28
|
-
def log_process(message, process: nil, short: false, quiet: false,
|
|
28
|
+
def log_process(message, process: nil, short: false, quiet: false, style: {}, status: {}, &blk)
|
|
29
29
|
style[:message] ||= DEFAULT_STYLE[:message]
|
|
30
30
|
style[:process] ||= DEFAULT_STYLE[:process]
|
|
31
31
|
style[:failed] ||= DEFAULT_STYLE[:failed]
|
|
@@ -34,21 +34,19 @@ module Dapp
|
|
|
34
34
|
status[:success] ||= t(code: 'status.success.default')
|
|
35
35
|
status[:failed] ||= t(code: 'status.failed.default')
|
|
36
36
|
|
|
37
|
-
is_verbose = (verbose.nil? ? log_verbose? : verbose) && !short
|
|
38
|
-
|
|
39
37
|
if quiet
|
|
40
38
|
log_process_quiet(message.to_s, style: style, status: status, &blk)
|
|
41
|
-
elsif
|
|
39
|
+
elsif short
|
|
40
|
+
log_process_short(message.to_s, style: style, status: status, &blk)
|
|
41
|
+
else
|
|
42
42
|
process ||= t(code: 'status.process.default')
|
|
43
43
|
log_process_verbose(message.to_s, process: process, style: style, status: status, &blk)
|
|
44
|
-
else
|
|
45
|
-
log_process_short(message.to_s, style: style, status: status, &blk)
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
# rubocop:enable Metrics/ParameterLists
|
|
49
47
|
|
|
50
48
|
def log_secondary_process(message, **kwargs, &blk)
|
|
51
|
-
log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }
|
|
49
|
+
log_process(message, **kwargs.merge(style: { message: :secondary, success: :secondary }), &blk)
|
|
52
50
|
end
|
|
53
51
|
|
|
54
52
|
protected
|
|
@@ -28,9 +28,12 @@ module Dapp
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def shellout!(*args, **kwargs)
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
if instance_of? Dapp
|
|
32
|
+
default_kwarg = proc { |key, value| kwargs[key] = value unless kwargs.key?(key) }
|
|
33
|
+
default_kwarg.call(:quiet, log_quiet?)
|
|
34
|
+
default_kwarg.call(:time, log_time?)
|
|
33
35
|
end
|
|
36
|
+
_shellout_with_logging!(*args, **kwargs)
|
|
34
37
|
end
|
|
35
38
|
|
|
36
39
|
def shellout_pack(command)
|
|
@@ -49,22 +52,18 @@ module Dapp
|
|
|
49
52
|
|
|
50
53
|
protected
|
|
51
54
|
|
|
52
|
-
def
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: log_time?)
|
|
59
|
-
else
|
|
60
|
-
kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: log_time?)
|
|
61
|
-
end
|
|
62
|
-
kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: log_time?)
|
|
63
|
-
|
|
64
|
-
yield(**kwargs)
|
|
65
|
-
rescue ::Mixlib::ShellOut::ShellCommandFailed => e
|
|
66
|
-
raise Error::Shellout, code: class_to_lowercase(e.class), data: { stream: stream.show }
|
|
55
|
+
def _shellout_with_logging!(*args, verbose: false, quiet: true, time: false, **kwargs)
|
|
56
|
+
stream = Stream.new
|
|
57
|
+
if verbose && !quiet
|
|
58
|
+
kwargs[:live_stream] = Proxy::Base.new(stream, STDOUT, with_time: time)
|
|
59
|
+
else
|
|
60
|
+
kwargs[:live_stdout] = Proxy::Base.new(stream, with_time: time)
|
|
67
61
|
end
|
|
62
|
+
kwargs[:live_stderr] = Proxy::Error.new(stream, with_time: time)
|
|
63
|
+
|
|
64
|
+
shellout(*args, **kwargs).tap(&:error!)
|
|
65
|
+
rescue ::Mixlib::ShellOut::ShellCommandFailed => e
|
|
66
|
+
raise Error::Shellout, code: Helper::Trivia.class_to_lowercase(e.class), data: { stream: stream.show }
|
|
68
67
|
end
|
|
69
68
|
end
|
|
70
69
|
end
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
module Dapp::Deployment::CLI
|
|
2
2
|
module Command
|
|
3
3
|
class Deployment < ::Dapp::CLI
|
|
4
|
-
SUBCOMMANDS = ['apply', 'mrproper'
|
|
4
|
+
SUBCOMMANDS = ['apply', 'mrproper'].freeze
|
|
5
5
|
|
|
6
6
|
banner <<BANNER.freeze
|
|
7
|
-
Usage: dapp deployment
|
|
7
|
+
Usage: dapp deployment subcommand [subcommand options]
|
|
8
8
|
|
|
9
9
|
Available subcommands: (for details, dapp deployment SUB-COMMAND --help)
|
|
10
10
|
|
|
11
11
|
dapp deployment apply [options] [APP ...] REPO
|
|
12
|
-
dapp deployment minikube setup
|
|
13
12
|
dapp deployment mrproper [options]
|
|
14
13
|
|
|
15
14
|
Options:
|
|
@@ -10,14 +10,14 @@ module Dapp
|
|
|
10
10
|
validate_repo_name!(repo)
|
|
11
11
|
validate_tag_name!(image_version)
|
|
12
12
|
|
|
13
|
-
log_process("Applying deployment #{deployment.name}"
|
|
13
|
+
log_process("Applying deployment #{deployment.name}") do
|
|
14
14
|
with_log_indent do
|
|
15
15
|
deployment.kube.delete_unknown_resources!
|
|
16
16
|
|
|
17
17
|
deployment.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
|
|
18
18
|
next if deployment.kube.pod_succeeded?(name)
|
|
19
19
|
deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
|
|
20
|
-
log_process(:bootstrap
|
|
20
|
+
log_process(:bootstrap) do
|
|
21
21
|
with_log_indent do
|
|
22
22
|
deployment.kube.run_job!(spec, name)
|
|
23
23
|
end
|
|
@@ -25,7 +25,7 @@ module Dapp
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
deployment.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
|
|
28
|
-
log_process(:before_apply_job
|
|
28
|
+
log_process(:before_apply_job) do
|
|
29
29
|
deployment.kube.delete_pod!(name) if deployment.kube.pod_exist?(name)
|
|
30
30
|
with_log_indent do
|
|
31
31
|
deployment.kube.run_job!(spec, name)
|
|
@@ -34,7 +34,7 @@ module Dapp
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
deployment.apps.each do |app|
|
|
37
|
-
log_process("Applying app #{app.name}"
|
|
37
|
+
log_process("Applying app #{app.name}") do
|
|
38
38
|
with_log_indent do
|
|
39
39
|
(app.kube.existing_deployments_names - app.to_kube_deployments(repo, image_version).keys).each do |deployment_name|
|
|
40
40
|
app.kube.delete_deployment!(deployment_name)
|
|
@@ -47,7 +47,7 @@ module Dapp
|
|
|
47
47
|
app.to_kube_bootstrap_pods(repo, image_version).each do |name, spec|
|
|
48
48
|
next if app.kube.pod_succeeded?(name)
|
|
49
49
|
app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
|
|
50
|
-
log_process(:bootstrap
|
|
50
|
+
log_process(:bootstrap) do
|
|
51
51
|
with_log_indent do
|
|
52
52
|
app.kube.run_job!(spec, name)
|
|
53
53
|
end
|
|
@@ -55,7 +55,7 @@ module Dapp
|
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
app.to_kube_before_apply_job_pods(repo, image_version).each do |name, spec|
|
|
58
|
-
log_process(:before_apply_job
|
|
58
|
+
log_process(:before_apply_job) do
|
|
59
59
|
app.kube.delete_pod!(name) if app.kube.pod_exist?(name)
|
|
60
60
|
with_log_indent do
|
|
61
61
|
app.kube.run_job!(spec, name)
|
|
@@ -117,7 +117,7 @@ module Dapp
|
|
|
117
117
|
# NOTICE: Однако, при обновлении deployment ревизия сбрасывается и ожидание переустановки этой ревизии
|
|
118
118
|
# NOTICE: является одним из критериев завершения ожидания на данный момент.
|
|
119
119
|
def _wait_for_deployment(d, old_d_revision: nil)
|
|
120
|
-
app.deployment.dapp.log_process("Waiting for kubernetes Deployment #{d['metadata']['name']} readiness"
|
|
120
|
+
app.deployment.dapp.log_process("Waiting for kubernetes Deployment #{d['metadata']['name']} readiness") do
|
|
121
121
|
app.deployment.dapp.with_log_indent do
|
|
122
122
|
known_events_by_pod = {}
|
|
123
123
|
|
|
@@ -4,7 +4,7 @@ module Dapp
|
|
|
4
4
|
module Stage
|
|
5
5
|
class ArtifactBase < Base
|
|
6
6
|
def dependencies
|
|
7
|
-
artifacts_signatures
|
|
7
|
+
@dependencies ||= artifacts_signatures
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def prepare_image
|
|
@@ -50,9 +50,7 @@ module Dapp
|
|
|
50
50
|
def artifacts_dimgs_build!
|
|
51
51
|
artifacts.each do |artifact|
|
|
52
52
|
process = dimg.dapp.t(code: 'process.artifact_building', data: { name: artifact[:name] })
|
|
53
|
-
dimg.dapp.log_secondary_process(process
|
|
54
|
-
short: !dimg.dapp.log_verbose?,
|
|
55
|
-
quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
|
|
53
|
+
dimg.dapp.log_secondary_process(process) do
|
|
56
54
|
dimg.dapp.with_log_indent do
|
|
57
55
|
artifact[:dimg].build!
|
|
58
56
|
end
|
|
@@ -65,10 +63,7 @@ module Dapp
|
|
|
65
63
|
"--volume #{dimg.tmp_path('artifact', artifact_name)}:#{artifact_dimg.container_tmp_path(artifact_name)}",
|
|
66
64
|
"--volumes-from #{dimg.dapp.base_container}",
|
|
67
65
|
"--entrypoint #{dimg.dapp.bash_bin}"]
|
|
68
|
-
dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.artifact_copy',
|
|
69
|
-
data: { name: artifact_name }),
|
|
70
|
-
short: true,
|
|
71
|
-
quiet: dimg.artifact? && !dimg.dapp.log_verbose?) do
|
|
66
|
+
dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.artifact_copy', data: { name: artifact_name }), short: true) do
|
|
72
67
|
artifact_dimg.run(docker_options, [%(-ec '#{dimg.dapp.shellout_pack(commands)}')])
|
|
73
68
|
end
|
|
74
69
|
end
|
|
@@ -47,17 +47,19 @@ module Dapp
|
|
|
47
47
|
end
|
|
48
48
|
# rubocop:enable Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
49
49
|
|
|
50
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
|
51
50
|
def build!
|
|
52
|
-
return if build_should_be_skipped?
|
|
53
51
|
prev_stage.build! if prev_stage
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
image_build unless empty?
|
|
53
|
+
image_introspect if image_should_be_introspected?
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def image_introspect
|
|
57
|
+
if image.built?
|
|
58
|
+
dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options))
|
|
59
|
+
else
|
|
60
|
+
dimg.dapp.log_warning(desc: { code: :introspect_image_impossible, data: { name: name } })
|
|
57
61
|
end
|
|
58
|
-
dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options)) if should_be_introspected?
|
|
59
62
|
end
|
|
60
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
|
61
63
|
|
|
62
64
|
def save_in_cache!
|
|
63
65
|
prev_stage.save_in_cache! if prev_stage
|
|
@@ -106,12 +108,35 @@ module Dapp
|
|
|
106
108
|
|
|
107
109
|
image.add_service_change_label :"dapp-mount-#{type.to_s.tr('_', '-')}" => mounts.join(';')
|
|
108
110
|
end
|
|
111
|
+
|
|
112
|
+
image_add_custom_mounts
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def image_add_custom_mounts
|
|
116
|
+
adding_custom_dir_mounts.each do |from, to_pathes|
|
|
117
|
+
FileUtils.mkdir_p(from)
|
|
118
|
+
to_pathes.tap(&:uniq!).map { |to_path| image.add_volume "#{from}:#{to_path}" }
|
|
119
|
+
image.add_service_change_label :"dapp-mount-custom-dir-#{from.gsub('/', '--')}" => to_pathes.join(';')
|
|
120
|
+
end
|
|
109
121
|
end
|
|
110
122
|
|
|
111
123
|
def adding_mounts_by_type(type)
|
|
112
124
|
(config_mounts_by_type(type) + labels_mounts_by_type(type)).uniq
|
|
113
125
|
end
|
|
114
126
|
|
|
127
|
+
def adding_custom_dir_mounts
|
|
128
|
+
config_custom_dir_mounts.in_depth_merge(labels_custom_dir_mounts)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def config_custom_dir_mounts
|
|
132
|
+
dimg.config._custom_dir_mount.reduce({}) do |mounts, mount|
|
|
133
|
+
from_path = File.expand_path(mount._from)
|
|
134
|
+
mounts[from_path] ||= []
|
|
135
|
+
mounts[from_path] << mount._to
|
|
136
|
+
mounts
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
115
140
|
def config_mounts_by_type(type)
|
|
116
141
|
dimg.config.public_send("_#{type}_mount").map(&:_to)
|
|
117
142
|
end
|
|
@@ -120,8 +145,11 @@ module Dapp
|
|
|
120
145
|
from_image.labels.select { |l, _| l == "dapp-mount-#{type.to_s.tr('_', '-')}" }.map { |_, value| value.split(';') }.flatten
|
|
121
146
|
end
|
|
122
147
|
|
|
123
|
-
def
|
|
124
|
-
|
|
148
|
+
def labels_custom_dir_mounts
|
|
149
|
+
from_image.labels.map do |label, value|
|
|
150
|
+
next unless label =~ /dapp-mount-custom-dir-(?<from>.+)/
|
|
151
|
+
[File.expand_path(Regexp.last_match(:from).gsub('--', '/')), value.split(';')]
|
|
152
|
+
end.compact.to_h
|
|
125
153
|
end
|
|
126
154
|
|
|
127
155
|
def empty?
|
|
@@ -133,18 +161,16 @@ module Dapp
|
|
|
133
161
|
end
|
|
134
162
|
|
|
135
163
|
def signature
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
args.concat(dependencies.flatten)
|
|
164
|
+
if empty?
|
|
165
|
+
prev_stage.signature
|
|
166
|
+
else
|
|
167
|
+
args = []
|
|
168
|
+
args << prev_stage.signature unless prev_stage.nil?
|
|
169
|
+
args << dimg.build_cache_version
|
|
170
|
+
args << builder_checksum
|
|
171
|
+
args.concat(dependencies.flatten)
|
|
145
172
|
|
|
146
|
-
|
|
147
|
-
end
|
|
173
|
+
hashsum args
|
|
148
174
|
end
|
|
149
175
|
end
|
|
150
176
|
|
|
@@ -156,19 +182,7 @@ module Dapp
|
|
|
156
182
|
end
|
|
157
183
|
|
|
158
184
|
def git_artifacts_dependencies
|
|
159
|
-
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def local_git_artifacts_dependencies
|
|
163
|
-
default_git_artifacts_dependencies(dimg.local_git_artifacts)
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
def remote_git_artifacts_dependencies
|
|
167
|
-
default_git_artifacts_dependencies(dimg.remote_git_artifacts)
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def default_git_artifacts_dependencies(git_artifacts)
|
|
171
|
-
git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksum(self) }
|
|
185
|
+
dimg.git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksum(self) }
|
|
172
186
|
end
|
|
173
187
|
|
|
174
188
|
def dependencies
|
|
@@ -200,11 +214,12 @@ module Dapp
|
|
|
200
214
|
protected
|
|
201
215
|
|
|
202
216
|
def image_build
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
217
|
+
prepare_image if image_should_be_prepared?
|
|
218
|
+
log_image_build do
|
|
219
|
+
dimg.dapp.log_process(log_name,
|
|
220
|
+
process: dimg.dapp.t(code: 'status.process.building'),
|
|
221
|
+
short: should_not_be_detailed?) { image.build! }
|
|
222
|
+
end
|
|
208
223
|
end
|
|
209
224
|
|
|
210
225
|
def should_be_tagged?
|
|
@@ -215,6 +230,10 @@ module Dapp
|
|
|
215
230
|
!(empty? || image.tagged? || should_be_not_present?)
|
|
216
231
|
end
|
|
217
232
|
|
|
233
|
+
def image_should_be_prepared?
|
|
234
|
+
!image.built? && !should_be_not_present? || image_should_be_introspected?
|
|
235
|
+
end
|
|
236
|
+
|
|
218
237
|
def should_be_not_present?
|
|
219
238
|
return false if next_stage.nil?
|
|
220
239
|
next_stage.image.tagged? || next_stage.should_be_not_present?
|
|
@@ -4,7 +4,7 @@ module Dapp
|
|
|
4
4
|
module Stage
|
|
5
5
|
class From < Base
|
|
6
6
|
def dependencies
|
|
7
|
-
[from_image_name, dimg.config._docker._from_cache_version, config_mounts_dirs]
|
|
7
|
+
@dependencies ||= [from_image_name, dimg.config._docker._from_cache_version, config_mounts_dirs]
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
protected
|
|
@@ -23,13 +23,17 @@ module Dapp
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def config_mounts_dirs
|
|
26
|
-
[:tmp_dir, :build_dir].map { |type| config_mounts_by_type(type) }.flatten.uniq
|
|
26
|
+
([:tmp_dir, :build_dir].map { |type| config_mounts_by_type(type) } + config_custom_dir_mounts.map(&:last)).flatten.uniq
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def adding_mounts_by_type(_type)
|
|
30
30
|
[]
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
def adding_custom_dir_mounts
|
|
34
|
+
[]
|
|
35
|
+
end
|
|
36
|
+
|
|
33
37
|
def should_not_be_detailed?
|
|
34
38
|
from_image.tagged?
|
|
35
39
|
end
|