dapp 0.26.14 → 0.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/dapp +0 -4
- data/config/en/common.yml +1 -0
- data/config/en/net_status.yml +2 -0
- data/lib/dapp.rb +1 -4
- data/lib/dapp/cli.rb +0 -4
- data/lib/dapp/cli/command/base.rb +1 -7
- data/lib/dapp/dapp.rb +4 -22
- data/lib/dapp/dapp/dappfile.rb +2 -2
- data/lib/dapp/dapp/deps/base.rb +6 -2
- data/lib/dapp/dapp/option_tags.rb +1 -7
- data/lib/dapp/dimg/artifact.rb +4 -0
- data/lib/dapp/dimg/build/stage/artifact_base.rb +7 -7
- data/lib/dapp/dimg/build/stage/artifact_default.rb +4 -5
- data/lib/dapp/dimg/build/stage/base.rb +1 -3
- data/lib/dapp/dimg/build/stage/before_install.rb +2 -3
- data/lib/dapp/dimg/build/stage/from.rb +31 -5
- data/lib/dapp/dimg/build/stage/ga_base.rb +1 -1
- data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +1 -3
- data/lib/dapp/dimg/build/stage/import_artifact.rb +3 -4
- data/lib/dapp/dimg/builder/ansible.rb +167 -2
- data/lib/dapp/dimg/builder/ansible/assets.rb +332 -0
- data/lib/dapp/dimg/builder/chef.rb +2 -2
- data/lib/dapp/dimg/cli/command/base.rb +14 -0
- data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -24
- data/lib/dapp/dimg/cli/command/dimg/run.rb +14 -1
- data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +2 -1
- data/lib/dapp/dimg/config/directive/dimg_group_base.rb +2 -2
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +4 -3
- data/lib/dapp/dimg/dapp/command/cleanup.rb +2 -2
- data/lib/dapp/dimg/dapp/command/common.rb +16 -5
- data/lib/dapp/dimg/dapp/command/mrproper.rb +6 -8
- data/lib/dapp/dimg/dapp/command/push.rb +1 -1
- data/lib/dapp/dimg/dapp/command/run.rb +3 -2
- data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +3 -0
- data/lib/dapp/dimg/dapp/command/tag.rb +1 -1
- data/lib/dapp/dimg/dapp/dimg.rb +8 -0
- data/lib/dapp/dimg/dimg.rb +14 -3
- data/lib/dapp/dimg/dimg/stages.rb +1 -1
- data/lib/dapp/dimg/docker_registry/base.rb +10 -0
- data/lib/dapp/dimg/docker_registry/base/authorization.rb +1 -16
- data/lib/dapp/dimg/git_artifact.rb +9 -2
- data/lib/dapp/dimg/git_repo/base.rb +2 -2
- data/lib/dapp/dimg/git_repo/local.rb +2 -2
- data/lib/dapp/kube/dapp/command/deploy.rb +0 -1
- data/lib/dapp/kube/dapp/command/lint.rb +11 -4
- data/lib/dapp/kube/helm/values.rb +7 -7
- data/lib/dapp/version.rb +2 -2
- metadata +5 -34
- data/lib/dapp/dapp/sentry.rb +0 -106
- data/lib/dapp/helper/url.rb +0 -23
@@ -127,7 +127,7 @@ module Dapp
|
|
127
127
|
end
|
128
128
|
|
129
129
|
def stage_cookbooks_checksum_path(stage)
|
130
|
-
dimg.build_path.join("#{builder_cookbook.checksum}.#{dimg.
|
130
|
+
dimg.build_path.join("#{builder_cookbook.checksum}.#{dimg.name}.#{stage}.checksum")
|
131
131
|
end
|
132
132
|
|
133
133
|
def stage_cookbooks_checksum(stage)
|
@@ -216,7 +216,7 @@ module Dapp
|
|
216
216
|
end
|
217
217
|
|
218
218
|
def stage_build_path(stage)
|
219
|
-
dimg.tmp_path(dimg.
|
219
|
+
dimg.tmp_path(dimg.name).join(stage.to_s)
|
220
220
|
end
|
221
221
|
|
222
222
|
def container_stage_build_path(_stage)
|
@@ -1,6 +1,16 @@
|
|
1
1
|
module Dapp::Dimg::CLI
|
2
2
|
module Command
|
3
3
|
class Base < ::Dapp::CLI::Command::Base
|
4
|
+
DIMG_STAGES = [
|
5
|
+
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
6
|
+
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
7
|
+
:g_a_pre_setup_patch, :setup, :g_a_post_setup_patch, :after_setup_artifact, :g_a_latest_patch, :docker_instructions
|
8
|
+
].freeze
|
9
|
+
|
10
|
+
STAGE_PROC = proc do |stages|
|
11
|
+
proc { |val| val.to_sym.tap { |v| in_validate!(v, stages) } }
|
12
|
+
end
|
13
|
+
|
4
14
|
option :build_dir,
|
5
15
|
long: "--build-dir PATH",
|
6
16
|
description: "Directory where build cache stored ($HOME/.dapp/builds/<dapp name> by default)."
|
@@ -9,6 +19,10 @@ module Dapp::Dimg::CLI
|
|
9
19
|
self.class.parse_options(self, argv)
|
10
20
|
run_dapp_command(run_method, options: cli_options(dimgs_patterns: cli_arguments))
|
11
21
|
end
|
22
|
+
|
23
|
+
def run_method
|
24
|
+
class_to_lowercase
|
25
|
+
end
|
12
26
|
end
|
13
27
|
end
|
14
28
|
end
|
@@ -11,25 +11,16 @@ Usage:
|
|
11
11
|
|
12
12
|
Options:
|
13
13
|
BANNER
|
14
|
-
|
15
|
-
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
16
|
-
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
17
|
-
:g_a_pre_setup_patch, :setup, :g_a_post_setup_patch, :after_setup_artifact, :g_a_latest_patch, :docker_instructions
|
18
|
-
]
|
19
|
-
artifact_introspected_stages = [
|
14
|
+
artifact_stages = [
|
20
15
|
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
21
16
|
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
22
17
|
:g_a_pre_setup_patch, :setup, :after_setup_artifact, :g_a_artifact_patch, :build_artifact
|
23
18
|
]
|
24
19
|
|
25
|
-
|
26
|
-
proc { |val| val.to_sym.tap { |v| in_validate!(v, stages) } }
|
27
|
-
end
|
28
|
-
|
29
|
-
introspect_before_proc = proc do |stages|
|
20
|
+
before_stage_proc = proc do |stages|
|
30
21
|
proc do |val|
|
31
22
|
val_sym = val.to_sym
|
32
|
-
|
23
|
+
STAGE_PROC.call(stages[1..-1]).call(val_sym)
|
33
24
|
stages[stages.index(val_sym) - 1]
|
34
25
|
end
|
35
26
|
end
|
@@ -58,24 +49,24 @@ BANNER
|
|
58
49
|
default: false
|
59
50
|
|
60
51
|
option :introspect_stage,
|
61
|
-
long:
|
62
|
-
description: "Introspect one of the following stages (#{list_msg_format(
|
63
|
-
proc:
|
52
|
+
long: '--introspect-stage STAGE',
|
53
|
+
description: "Introspect one of the following stages (#{list_msg_format(DIMG_STAGES)})",
|
54
|
+
proc: STAGE_PROC.call(DIMG_STAGES)
|
64
55
|
|
65
56
|
option :introspect_before,
|
66
|
-
long:
|
67
|
-
description: "Introspect stage before one of the following stages (#{list_msg_format(
|
68
|
-
proc:
|
57
|
+
long: '--introspect-before STAGE',
|
58
|
+
description: "Introspect stage before one of the following stages (#{list_msg_format(DIMG_STAGES[1..-1])})",
|
59
|
+
proc: before_stage_proc.call(DIMG_STAGES)
|
69
60
|
|
70
61
|
option :introspect_artifact_stage,
|
71
|
-
long:
|
72
|
-
description: "Introspect one of the following stages (#{list_msg_format(
|
73
|
-
proc:
|
62
|
+
long: '--introspect-artifact-stage STAGE',
|
63
|
+
description: "Introspect one of the following stages (#{list_msg_format(artifact_stages)})",
|
64
|
+
proc: STAGE_PROC.call(artifact_stages)
|
74
65
|
|
75
66
|
option :introspect_artifact_before,
|
76
|
-
long:
|
77
|
-
description: "Introspect stage before one of the following stages (#{list_msg_format(
|
78
|
-
proc:
|
67
|
+
long: '--introspect-artifact-before STAGE',
|
68
|
+
description: "Introspect stage before one of the following stages (#{list_msg_format(artifact_stages[1..-1])})",
|
69
|
+
proc: before_stage_proc.call(artifact_stages)
|
79
70
|
|
80
71
|
option :ssh_key,
|
81
72
|
long: '--ssh-key SSH_KEY',
|
@@ -12,6 +12,11 @@ Usage:
|
|
12
12
|
|
13
13
|
Options:
|
14
14
|
BANNER
|
15
|
+
option :stage,
|
16
|
+
long: '--stage STAGE',
|
17
|
+
description: "Run one of the following stages (#{list_msg_format(DIMG_STAGES)})",
|
18
|
+
proc: STAGE_PROC.call(DIMG_STAGES)
|
19
|
+
|
15
20
|
option :ssh_key,
|
16
21
|
long: '--ssh-key SSH_KEY',
|
17
22
|
description: ['Enable only specified ssh keys ',
|
@@ -51,8 +56,16 @@ BANNER
|
|
51
56
|
index = filtered_args.index('--') || filtered_args.count
|
52
57
|
docker_options = index.nonzero? ? filtered_args.slice(0..index - 1) : []
|
53
58
|
command = filtered_args.slice(index + 1..-1) || []
|
59
|
+
|
60
|
+
if docker_options.empty? && command.empty?
|
61
|
+
docker_options = %w(-ti --rm)
|
62
|
+
command = %w(/bin/bash)
|
63
|
+
end
|
64
|
+
|
65
|
+
stage_name = config.delete(:stage)
|
66
|
+
|
54
67
|
run_dapp_command(nil, options: cli_options(dimgs_patterns: patterns), log_running_time: false) do |dapp|
|
55
|
-
dapp.run(docker_options, command)
|
68
|
+
dapp.run(stage_name, docker_options, command)
|
56
69
|
end
|
57
70
|
end
|
58
71
|
end
|
@@ -5,8 +5,9 @@ module Dapp
|
|
5
5
|
class Dimg < Base
|
6
6
|
module InstanceMethods
|
7
7
|
attr_reader :_builder
|
8
|
-
attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact
|
8
|
+
attr_reader :_chef, :_shell, :_docker, :_git_artifact, :_mount, :_artifact, :_ansible
|
9
9
|
attr_reader :_artifact_groups
|
10
|
+
attr_reader :_from_dimg, :_from_dimg_artifact
|
10
11
|
|
11
12
|
def chef(&blk)
|
12
13
|
builder(:chef)
|
@@ -3,13 +3,14 @@ module Dapp
|
|
3
3
|
module Config
|
4
4
|
module Directive
|
5
5
|
class GitArtifactRemote < GitArtifactLocal
|
6
|
-
include ::Dapp::Helper::Url
|
7
|
-
|
8
6
|
attr_reader :_url, :_name, :_branch, :_commit
|
9
7
|
|
10
8
|
def initialize(url, **kwargs, &blk)
|
11
9
|
@_url = url
|
12
|
-
|
10
|
+
|
11
|
+
url_without_scheme = url.split("://", 2).last
|
12
|
+
url_without_creds = url_without_scheme.split(":", 2).last
|
13
|
+
@_name = url_without_creds.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
|
13
14
|
|
14
15
|
super(**kwargs, &blk)
|
15
16
|
end
|
@@ -66,12 +66,16 @@ module Dapp
|
|
66
66
|
project_images.map { |image| image[:dangling] ? image[:id] : image[:name] }
|
67
67
|
end
|
68
68
|
|
69
|
-
def
|
70
|
-
|
69
|
+
def dapp_containers_flush_by_label(label)
|
70
|
+
log_proper_containers do
|
71
|
+
remove_containers_by_query(%(#{host_docker} ps -a -f "label=#{label}" -q --no-trunc))
|
72
|
+
end
|
71
73
|
end
|
72
74
|
|
73
|
-
def
|
74
|
-
|
75
|
+
def dapp_dangling_images_flush_by_label(label)
|
76
|
+
log_proper_flush_dangling_images do
|
77
|
+
remove_images_by_query(%(#{host_docker} images -f "dangling=true" -f "label=#{label}" -q --no-trunc))
|
78
|
+
end
|
75
79
|
end
|
76
80
|
|
77
81
|
def dapp_tagless_images_flush
|
@@ -125,7 +129,6 @@ module Dapp
|
|
125
129
|
end
|
126
130
|
|
127
131
|
def remove_base(query_format, ids, force: false)
|
128
|
-
return if ids.empty?
|
129
132
|
force_option = force ? ' -f' : ''
|
130
133
|
log(ids.join("\n")) if log_verbose? || dry_run?
|
131
134
|
run_command(format(query_format, force_option: force_option, ids: ids.join(' ')))
|
@@ -178,6 +181,14 @@ module Dapp
|
|
178
181
|
log_step_with_indent(:'proper repo cache', &blk)
|
179
182
|
end
|
180
183
|
|
184
|
+
def log_proper_containers(&blk)
|
185
|
+
log_step_with_indent(:'proper containers', &blk)
|
186
|
+
end
|
187
|
+
|
188
|
+
def log_proper_flush_dangling_images(&blk)
|
189
|
+
log_step_with_indent(:'proper dangling', &blk)
|
190
|
+
end
|
191
|
+
|
181
192
|
def push_format(dimg_name)
|
182
193
|
if dimg_name.nil?
|
183
194
|
spush_format
|
@@ -16,7 +16,7 @@ module Dapp
|
|
16
16
|
proper_cache_version
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
dapp_dangling_images_flush_by_label('dapp')
|
20
20
|
dapp_tagless_images_flush
|
21
21
|
end
|
22
22
|
end
|
@@ -52,16 +52,14 @@ module Dapp
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def flush_by_label(label)
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
def dapp_containers_flush_by_label(label)
|
60
|
-
remove_containers_by_query(%(#{host_docker} ps -a -f "label=dapp" -f "label=#{label}" -q --no-trunc))
|
55
|
+
dapp_containers_flush_by_label(label)
|
56
|
+
dapp_images_flush_by_label(label)
|
61
57
|
end
|
62
58
|
|
63
59
|
def dapp_images_flush_by_label(label)
|
64
|
-
|
60
|
+
log_step_with_indent('proper images') do
|
61
|
+
remove_images(dapp_images_names_by_label(label))
|
62
|
+
end
|
65
63
|
end
|
66
64
|
|
67
65
|
def proper_cache_version
|
@@ -8,7 +8,7 @@ module Dapp
|
|
8
8
|
#RubyProf.start
|
9
9
|
log_step_with_indent(:stages) { stages_push } if with_stages?
|
10
10
|
dimg_import_export_base do |dimg|
|
11
|
-
dimg.export!(option_repo, format: push_format(dimg.
|
11
|
+
dimg.export!(option_repo, format: push_format(dimg.name))
|
12
12
|
end
|
13
13
|
# FIXME: rework images cache, then profile
|
14
14
|
#result = RubyProf.stop
|
@@ -3,10 +3,11 @@ module Dapp
|
|
3
3
|
module Dapp
|
4
4
|
module Command
|
5
5
|
module Run
|
6
|
-
def run(docker_options, command)
|
6
|
+
def run(stage_name, docker_options, command)
|
7
7
|
one_dimg!
|
8
8
|
setup_ssh_agent
|
9
|
-
dimg(config: build_configs.first, ignore_git_fetch: true, should_be_built:
|
9
|
+
dimg(config: build_configs.first, ignore_git_fetch: true, should_be_built: stage_name.nil?)
|
10
|
+
.run_stage(stage_name, docker_options, command)
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
@@ -11,6 +11,9 @@ module Dapp
|
|
11
11
|
proper_cache if proper_cache_version?
|
12
12
|
stages_cleanup_by_repo if proper_repo_cache?
|
13
13
|
proper_git_commit if proper_git_commit?
|
14
|
+
|
15
|
+
dapp_containers_flush_by_label("dapp=#{name}")
|
16
|
+
dapp_dangling_images_flush_by_label("dapp=#{name}")
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
data/lib/dapp/dimg/dapp/dimg.rb
CHANGED
@@ -10,6 +10,14 @@ module Dapp
|
|
10
10
|
(@artifacts_dimgs ||= {})[config._name] ||= ::Dapp::Dimg::Artifact.new(config: config, dapp: self, **kwargs)
|
11
11
|
end
|
12
12
|
|
13
|
+
def dimg_layer(config:, **kwargs)
|
14
|
+
(@dimg_layers ||= {})[config._name] ||= ::Dapp::Dimg::Dimg.new(config: config, dapp: self, **kwargs)
|
15
|
+
end
|
16
|
+
|
17
|
+
def artifact_dimg_layer(config:, **kwargs)
|
18
|
+
(@artifact_dimg_layers ||= {})[config._name] ||= ::Dapp::Dimg::Artifact.new(config: config, dapp: self, **kwargs)
|
19
|
+
end
|
20
|
+
|
13
21
|
def _terminate_dimg_on_terminate(dimg)
|
14
22
|
@_call_before_terminate << proc{dimg.terminate}
|
15
23
|
end
|
data/lib/dapp/dimg/dimg.rb
CHANGED
@@ -25,6 +25,10 @@ module Dapp
|
|
25
25
|
raise Error::Dimg, code: :dimg_not_built if should_be_built?
|
26
26
|
end
|
27
27
|
|
28
|
+
def name
|
29
|
+
config._name
|
30
|
+
end
|
31
|
+
|
28
32
|
def terminate
|
29
33
|
cleanup_tmp
|
30
34
|
end
|
@@ -74,7 +78,7 @@ module Dapp
|
|
74
78
|
dapp.tags_by_scheme.each do |tag_scheme_name, tags|
|
75
79
|
dapp.log_step_with_indent(tag_scheme_name) do
|
76
80
|
tags.each do |tag|
|
77
|
-
image_name = format(export_format, repo: repo, dimg_name:
|
81
|
+
image_name = format(export_format, repo: repo, dimg_name: name, tag: tag)
|
78
82
|
export_base!(image_name, push: push) do
|
79
83
|
export_image = build_export_image!(image_name, scheme_name: tag_scheme_name)
|
80
84
|
if push
|
@@ -139,7 +143,13 @@ module Dapp
|
|
139
143
|
end
|
140
144
|
|
141
145
|
def run(docker_options, command)
|
142
|
-
|
146
|
+
run_stage(nil, docker_options, command)
|
147
|
+
end
|
148
|
+
|
149
|
+
def run_stage(stage_name, docker_options, command)
|
150
|
+
stage_image = (stage_name.nil? ? last_stage : stage_by_name(stage_name)).image
|
151
|
+
raise Error::Dimg, code: :dimg_stage_not_built, data: { stage_name: stage_name } unless stage_image.built?
|
152
|
+
cmd = "#{dapp.host_docker} run #{[docker_options, stage_image.built_id, command].flatten.compact.join(' ')}"
|
143
153
|
if dapp.dry_run?
|
144
154
|
dapp.log(cmd)
|
145
155
|
else
|
@@ -164,7 +174,7 @@ module Dapp
|
|
164
174
|
end
|
165
175
|
|
166
176
|
def scratch?
|
167
|
-
config._docker._from.nil?
|
177
|
+
config._docker._from.nil? && config._from_dimg.nil? && config._from_dimg_artifact.nil?
|
168
178
|
end
|
169
179
|
|
170
180
|
def dev_mode?
|
@@ -198,6 +208,7 @@ module Dapp
|
|
198
208
|
cmd = "".tap do |cmd|
|
199
209
|
cmd << "#{dapp.host_docker} run --rm"
|
200
210
|
cmd << " --volume #{dapp.tmp_base_dir}:#{dapp.tmp_base_dir}"
|
211
|
+
cmd << " --label dapp=#{dapp.name}"
|
201
212
|
cmd << " alpine:3.6"
|
202
213
|
cmd << " rm -rf #{tmp_path}"
|
203
214
|
end
|
@@ -34,7 +34,7 @@ module Dapp
|
|
34
34
|
def last_stage
|
35
35
|
@last_stage || begin
|
36
36
|
(self.last_stage = last_stage_class.new(self)).tap do |stage|
|
37
|
-
dapp.log_secondary_process("#{
|
37
|
+
dapp.log_secondary_process("#{name || 'nameless'}: calculating stages signatures") do
|
38
38
|
stage.signature
|
39
39
|
end
|
40
40
|
end
|
@@ -35,6 +35,7 @@ module Dapp
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def image_delete(tag)
|
38
|
+
image_blobs(tag).each { |hash| blob_delete(hash.values.first) }
|
38
39
|
api_request(repo_suffix, "/manifests/#{image_digest(tag)}",
|
39
40
|
method: :delete,
|
40
41
|
expects: [202, 404],
|
@@ -53,6 +54,10 @@ module Dapp
|
|
53
54
|
headers: { Accept: 'application/vnd.docker.distribution.manifest.v2+json' }).headers['Docker-Content-Digest']
|
54
55
|
end
|
55
56
|
|
57
|
+
def image_blobs(tag)
|
58
|
+
manifest_v1(tag)['fsLayers']
|
59
|
+
end
|
60
|
+
|
56
61
|
def manifest_v1(tag)
|
57
62
|
api_request(repo_suffix, "/manifests/#{tag}")
|
58
63
|
end
|
@@ -62,6 +67,11 @@ module Dapp
|
|
62
67
|
headers: { Accept: 'application/vnd.docker.distribution.manifest.v2+json' })
|
63
68
|
end
|
64
69
|
|
70
|
+
def blob_delete(id)
|
71
|
+
api_request(repo_suffix, "/blobs/#{id}",
|
72
|
+
method: :delete, expects: [202, 404])
|
73
|
+
end
|
74
|
+
|
65
75
|
def api_request(*uri, **options)
|
66
76
|
JSON.load(raw_api_request(*uri, **options).body)
|
67
77
|
end
|
@@ -29,25 +29,10 @@ module Dapp
|
|
29
29
|
[:realm, :service, :scope].map do |option|
|
30
30
|
/#{option}="([[^"].]*)/ =~ header
|
31
31
|
next unless Regexp.last_match(1)
|
32
|
-
|
33
|
-
option_value = begin
|
34
|
-
if option == :scope
|
35
|
-
handle_scope_option(Regexp.last_match(1))
|
36
|
-
else
|
37
|
-
Regexp.last_match(1)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
[option, option_value]
|
32
|
+
[option, Regexp.last_match(1)]
|
42
33
|
end.compact.to_h
|
43
34
|
end
|
44
35
|
|
45
|
-
def handle_scope_option(resourcescope)
|
46
|
-
resource_type, resource_name, actions = resourcescope.split(":")
|
47
|
-
actions = actions.split(",").map { |action| action == "delete" ? "*" : action }.join(",")
|
48
|
-
[resource_type, resource_name, actions].join(":")
|
49
|
-
end
|
50
|
-
|
51
36
|
def authorization_auth
|
52
37
|
@authorization_auth ||= begin
|
53
38
|
if ::Dapp::Dapp.options_with_docker_credentials?
|