dapp 0.27.24 → 0.28.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/en/common.yml +1 -0
- data/lib/dapp.rb +2 -2
- data/lib/dapp/cli/options/tag.rb +51 -0
- data/lib/dapp/dapp/dappfile.rb +2 -2
- data/lib/dapp/dimg/artifact.rb +5 -1
- data/lib/dapp/dimg/build/stage/artifact_default.rb +2 -4
- data/lib/dapp/dimg/build/stage/base.rb +22 -10
- data/lib/dapp/dimg/build/stage/ga_archive.rb +7 -2
- data/lib/dapp/dimg/build/stage/mod/logging.rb +9 -1
- data/lib/dapp/dimg/builder/ansible.rb +1 -1
- data/lib/dapp/dimg/cli/cli.rb +1 -0
- data/lib/dapp/dimg/cli/command/dimg/bp.rb +8 -32
- data/lib/dapp/dimg/cli/command/dimg/build.rb +7 -50
- data/lib/dapp/dimg/cli/command/dimg/push.rb +1 -1
- data/lib/dapp/dimg/cli/command/dimg/run.rb +7 -3
- data/lib/dapp/dimg/cli/command/dimg/tag.rb +1 -1
- data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +60 -3
- data/lib/dapp/dimg/dapp/command/common.rb +5 -1
- data/lib/dapp/dimg/dapp/command/run.rb +1 -1
- data/lib/dapp/dimg/dapp/command/stages/common.rb +2 -3
- data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +3 -0
- data/lib/dapp/dimg/dapp/dimg.rb +16 -2
- data/lib/dapp/dimg/dimg.rb +39 -4
- data/lib/dapp/dimg/dimg/git_artifact.rb +1 -5
- data/lib/dapp/dimg/docker_registry/base/authorization.rb +1 -16
- data/lib/dapp/dimg/git_artifact.rb +1 -1
- data/lib/dapp/dimg/image/argument.rb +0 -4
- data/lib/dapp/kube/cli/command/kube/deploy.rb +1 -3
- data/lib/dapp/kube/cli/command/kube/lint.rb +1 -1
- data/lib/dapp/kube/cli/command/kube/render.rb +1 -1
- data/lib/dapp/kube/cli/command/kube/value_get.rb +1 -1
- data/lib/dapp/kube/dapp/command/deploy.rb +0 -2
- data/lib/dapp/kube/dapp/command/minikube_setup.rb +4 -0
- data/lib/dapp/kube/kubernetes/client.rb +101 -30
- data/lib/dapp/version.rb +2 -2
- metadata +6 -6
- data/lib/dapp/cli/command/options/tag.rb +0 -53
- data/lib/dapp/cli/options/ssh.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3dbff2ff0349b92efd0c4662cc5ba5bb9c77a107
|
4
|
+
data.tar.gz: e97fcc44533ceea1d85f3ca6e2384738885c83b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 830eb29eb810e75dd9404f44771813b39b5eaffc6a6739f93214d3917138cdc67ecb4f8582da684c28f296158400bae84497854a4dceef89340f7299205a13bc
|
7
|
+
data.tar.gz: 7676eef00836559b62814f9833d4877f6f8dd042a9d936f0b758c2e5127aa6f88c25bf6e2076245c62077239e1a9d84586a6bc5d028b7d0946e3d46891a5fb80
|
data/config/en/common.yml
CHANGED
@@ -49,6 +49,7 @@ en:
|
|
49
49
|
pull: '[PULL]'
|
50
50
|
tag: '[TAG]'
|
51
51
|
exist: '[EXIST]'
|
52
|
+
not_exist: '[NOT EXIST]'
|
52
53
|
warning:
|
53
54
|
wrong_using_base_directive: "WARNING: Directive `%{directive}` has declared after dimg_group|dimg|artifact!"
|
54
55
|
wrong_using_directive: "WARNING: Directive `%{directive}` has declared after dimg_group|dimg!"
|
data/lib/dapp.rb
CHANGED
@@ -52,8 +52,7 @@ require 'dapp/error/config'
|
|
52
52
|
require 'dapp/error/shellout'
|
53
53
|
require 'dapp/exception/base'
|
54
54
|
require 'dapp/cli'
|
55
|
-
require 'dapp/cli/
|
56
|
-
require 'dapp/cli/options/ssh'
|
55
|
+
require 'dapp/cli/options/tag'
|
57
56
|
require 'dapp/cli/command/base'
|
58
57
|
require 'dapp/cli/command/update'
|
59
58
|
require 'dapp/cli/command/slug'
|
@@ -169,6 +168,7 @@ require 'dapp/dimg/build/stage/ga_latest_patch'
|
|
169
168
|
require 'dapp/dimg/build/stage/docker_instructions'
|
170
169
|
require 'dapp/dimg/build/stage/ga_artifact_patch'
|
171
170
|
require 'dapp/dimg/build/stage/build_artifact'
|
171
|
+
require 'dapp/dimg/cli/options/introspection'
|
172
172
|
require 'dapp/dimg/cli/command/base'
|
173
173
|
require 'dapp/dimg/cli/command/dimg'
|
174
174
|
require 'dapp/dimg/cli/command/dimg/build'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Dapp
|
2
|
+
class CLI
|
3
|
+
module Options
|
4
|
+
module Tag
|
5
|
+
def self.extended(klass)
|
6
|
+
klass.class_eval do
|
7
|
+
"Add tag (can be used one or more times), specified text will be slugified".tap do |desc|
|
8
|
+
option :tag,
|
9
|
+
long: '--tag TAG',
|
10
|
+
description: desc,
|
11
|
+
default: [],
|
12
|
+
proc: proc { |v| composite_options(:tags) << v }
|
13
|
+
|
14
|
+
option :tag_slug,
|
15
|
+
long: '--tag-slug TAG',
|
16
|
+
description: desc,
|
17
|
+
default: [],
|
18
|
+
proc: proc { |v| composite_options(:slug_tags) << v }
|
19
|
+
end
|
20
|
+
|
21
|
+
option :tag_plain,
|
22
|
+
long: '--tag-plain TAG',
|
23
|
+
description: "Add tag (can be used one or more times)",
|
24
|
+
default: [],
|
25
|
+
proc: proc { |v| composite_options(:plain_tags) << v }
|
26
|
+
|
27
|
+
option :tag_branch,
|
28
|
+
long: '--tag-branch',
|
29
|
+
description: 'Tag by git branch',
|
30
|
+
boolean: true
|
31
|
+
|
32
|
+
option :tag_build_id,
|
33
|
+
long: '--tag-build-id',
|
34
|
+
description: 'Tag by CI build id',
|
35
|
+
boolean: true
|
36
|
+
|
37
|
+
option :tag_ci,
|
38
|
+
long: '--tag-ci',
|
39
|
+
description: 'Tag by CI branch and tag',
|
40
|
+
boolean: true
|
41
|
+
|
42
|
+
option :tag_commit,
|
43
|
+
long: '--tag-commit',
|
44
|
+
description: 'Tag by git commit',
|
45
|
+
boolean: true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/dapp/dapp/dappfile.rb
CHANGED
@@ -124,12 +124,12 @@ module Dapp
|
|
124
124
|
return if File.exists? dappfile_yml_bin_path
|
125
125
|
|
126
126
|
log_process("Downloading dappfile-yml dapp dependency") do
|
127
|
-
location = URI("https://dl.bintray.com/dapp
|
127
|
+
location = URI("https://dl.bintray.com/flant/dapp/#{::Dapp::VERSION}/dappfile-yml")
|
128
128
|
|
129
129
|
tmp_bin_path = File.join(self.class.tmp_base_dir, "dappfile-yml-#{SecureRandom.uuid}")
|
130
130
|
::Dapp::Downloader.download(location, tmp_bin_path, show_progress: true, progress_titile: dappfile_yml_bin_path)
|
131
131
|
|
132
|
-
checksum_location = URI("https://dl.bintray.com/dapp
|
132
|
+
checksum_location = URI("https://dl.bintray.com/flant/dapp/#{::Dapp::VERSION}/dappfile-yml.sha")
|
133
133
|
tmp_bin_checksum_path = tmp_bin_path + ".checksum"
|
134
134
|
::Dapp::Downloader.download(checksum_location, tmp_bin_checksum_path)
|
135
135
|
|
data/lib/dapp/dimg/artifact.rb
CHANGED
@@ -8,7 +8,11 @@ module Dapp
|
|
8
8
|
def after_stages_build!
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def stage_should_be_introspected_before_build?(name)
|
12
|
+
dapp.options[:introspect_artifact_before] == name
|
13
|
+
end
|
14
|
+
|
15
|
+
def should_be_introspected_after_build?(name)
|
12
16
|
dapp.options[:introspect_artifact_stage] == name
|
13
17
|
end
|
14
18
|
|
@@ -16,12 +16,10 @@ module Dapp
|
|
16
16
|
group = artifact[:options][:group]
|
17
17
|
to = artifact[:options][:to]
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
command = safe_cp(cwd, artifact_dimg.container_tmp_path(artifact_dimg.name, export_folder_name).to_s, nil, nil, include_paths, exclude_paths)
|
19
|
+
command = safe_cp(cwd, artifact_dimg.container_tmp_path(artifact_dimg.name, 'data').to_s, nil, nil, include_paths, exclude_paths)
|
22
20
|
run_artifact_dimg(artifact_dimg, command)
|
23
21
|
|
24
|
-
command = safe_cp(dimg.container_tmp_path('artifact', artifact_dimg.name,
|
22
|
+
command = safe_cp(dimg.container_tmp_path('artifact', artifact_dimg.name, 'data').to_s, to, owner, group, include_paths, exclude_paths)
|
25
23
|
image.add_command command
|
26
24
|
image.add_volume "#{dimg.tmp_path('artifact', artifact_dimg.name)}:#{dimg.container_tmp_path('artifact', artifact_dimg.name)}:ro"
|
27
25
|
end
|
@@ -50,16 +50,7 @@ module Dapp
|
|
50
50
|
def build!
|
51
51
|
prev_stage.build! if prev_stage
|
52
52
|
renew if should_be_renewed?
|
53
|
-
image_build
|
54
|
-
image_introspect if image_should_be_introspected?
|
55
|
-
end
|
56
|
-
|
57
|
-
def image_introspect
|
58
|
-
if image.built?
|
59
|
-
dimg.introspect_image!(image: image.built_id, options: image.send(:prepared_options))
|
60
|
-
else
|
61
|
-
dimg.dapp.log_warning(desc: { code: :introspect_image_impossible, data: { name: name } })
|
62
|
-
end
|
53
|
+
image_build
|
63
54
|
end
|
64
55
|
|
65
56
|
def save_in_cache!
|
@@ -233,10 +224,31 @@ module Dapp
|
|
233
224
|
|
234
225
|
def image_build
|
235
226
|
prepare_image if image_should_be_prepared?
|
227
|
+
|
228
|
+
introspect_image_before_build if image_should_be_introspected_before_build?
|
229
|
+
|
236
230
|
log_image_build do
|
237
231
|
dimg.dapp.log_process(log_name,
|
238
232
|
process: dimg.dapp.t(code: 'status.process.building'),
|
239
233
|
short: should_not_be_detailed?) { image.build! }
|
234
|
+
end unless empty?
|
235
|
+
|
236
|
+
introspect_image_after_build if image_should_be_introspected_after_build?
|
237
|
+
end
|
238
|
+
|
239
|
+
def introspect_image_before_build
|
240
|
+
introspect_image_default(from_image)
|
241
|
+
end
|
242
|
+
|
243
|
+
def introspect_image_after_build
|
244
|
+
introspect_image_default(image)
|
245
|
+
end
|
246
|
+
|
247
|
+
def introspect_image_default(introspected_image)
|
248
|
+
if introspected_image.built?
|
249
|
+
dimg.introspect_image!(image: introspected_image.built_id, options: image.send(:prepared_options))
|
250
|
+
else
|
251
|
+
dimg.dapp.log_warning(desc: { code: :introspect_image_impossible, data: { name: name } })
|
240
252
|
end
|
241
253
|
end
|
242
254
|
|
@@ -11,14 +11,19 @@ module Dapp
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def dependencies
|
14
|
-
@dependencies ||= [dimg.git_artifacts.map(&:paramshash).join, reset_commits]
|
14
|
+
@dependencies ||= [dimg.git_artifacts.map(&:paramshash).join, reset_commits, dev_mode_dependencies]
|
15
|
+
end
|
16
|
+
|
17
|
+
def dev_mode_dependencies
|
18
|
+
return unless dimg.dev_mode?
|
19
|
+
dimg.git_artifacts.map(&:latest_commit)
|
15
20
|
end
|
16
21
|
|
17
22
|
protected
|
18
23
|
|
19
24
|
def reset_commits
|
20
25
|
regex = Regexp.union(RESET_COMMIT_MESSAGES)
|
21
|
-
dimg.git_artifacts.map { |git_artifact| git_artifact.repo.find_commit_id_by_message(regex) }.
|
26
|
+
dimg.git_artifacts.map { |git_artifact| git_artifact.repo.find_commit_id_by_message(regex) }.sort.uniq.compact
|
22
27
|
end
|
23
28
|
|
24
29
|
def apply_command_method
|
@@ -81,7 +81,15 @@ module Dapp
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def image_should_be_introspected?
|
84
|
-
|
84
|
+
image_should_be_introspected_after_build? || image_should_be_introspected_before_build?
|
85
|
+
end
|
86
|
+
|
87
|
+
def image_should_be_introspected_before_build?
|
88
|
+
dimg.stage_should_be_introspected_before_build?(name) && !dimg.dapp.dry_run?
|
89
|
+
end
|
90
|
+
|
91
|
+
def image_should_be_introspected_after_build?
|
92
|
+
dimg.stage_should_be_introspected_after_build?(name) && !dimg.dapp.dry_run?
|
85
93
|
end
|
86
94
|
end
|
87
95
|
end # Mod
|
data/lib/dapp/dimg/cli/cli.rb
CHANGED
@@ -15,18 +15,7 @@ BANNER
|
|
15
15
|
|
16
16
|
# build options
|
17
17
|
|
18
|
-
|
19
|
-
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
20
|
-
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
21
|
-
:g_a_pre_setup_patch, :setup, :g_a_post_setup_patch, :after_setup_artifact, :g_a_latest_patch, :docker_instructions
|
22
|
-
]
|
23
|
-
artifact_introspected_stages = [
|
24
|
-
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
25
|
-
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
26
|
-
:g_a_pre_setup_patch, :setup, :after_setup_artifact, :g_a_artifact_patch, :build_artifact
|
27
|
-
]
|
28
|
-
|
29
|
-
extend ::Dapp::CLI::Options::Ssh
|
18
|
+
extend ::Dapp::Dimg::CLI::Options::Introspection
|
30
19
|
|
31
20
|
option :tmp_dir_prefix,
|
32
21
|
long: '--tmp-dir-prefix PREFIX',
|
@@ -41,25 +30,12 @@ BANNER
|
|
41
30
|
long: '--git-artifact-branch BRANCH',
|
42
31
|
description: 'Default branch to archive artifacts from'
|
43
32
|
|
44
|
-
option :
|
45
|
-
long: '--
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
long: '--introspect-before-error',
|
51
|
-
boolean: true,
|
52
|
-
default: false
|
53
|
-
|
54
|
-
option :introspect_stage,
|
55
|
-
long: '--introspect-stage STAGE',
|
56
|
-
description: "Introspect one of the following stages (#{list_msg_format(introspected_stages)})",
|
57
|
-
proc: proc { |val| val.to_sym.tap { |v| in_validate!(v, introspected_stages) } }
|
58
|
-
|
59
|
-
option :introspect_artifact_stage,
|
60
|
-
long: '--introspect-artifact-stage STAGE',
|
61
|
-
description: "Introspect one of the following stages (#{list_msg_format(artifact_introspected_stages)})",
|
62
|
-
proc: proc { |val| val.to_sym.tap { |v| in_validate!(v, artifact_introspected_stages) } }
|
33
|
+
option :ssh_key,
|
34
|
+
long: '--ssh-key SSH_KEY',
|
35
|
+
description: ['Enable only specified ssh keys ',
|
36
|
+
'(use system ssh-agent by default)'].join,
|
37
|
+
default: nil,
|
38
|
+
proc: ->(v) { composite_options(:ssh_key) << v }
|
63
39
|
|
64
40
|
option :build_context_directory,
|
65
41
|
long: '--build-context-directory DIR_PATH',
|
@@ -77,7 +53,7 @@ BANNER
|
|
77
53
|
|
78
54
|
# push options
|
79
55
|
|
80
|
-
extend ::Dapp::CLI::
|
56
|
+
extend ::Dapp::CLI::Options::Tag
|
81
57
|
|
82
58
|
option :with_stages,
|
83
59
|
long: '--with-stages',
|
@@ -11,21 +11,8 @@ Usage:
|
|
11
11
|
|
12
12
|
Options:
|
13
13
|
BANNER
|
14
|
-
artifact_stages = [
|
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, :after_setup_artifact, :g_a_artifact_patch, :build_artifact
|
18
|
-
]
|
19
14
|
|
20
|
-
|
21
|
-
proc do |val|
|
22
|
-
val_sym = val.to_sym
|
23
|
-
STAGE_PROC.call(stages[1..-1]).call(val_sym)
|
24
|
-
stages[stages.index(val_sym) - 1]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
extend ::Dapp::CLI::Options::Ssh
|
15
|
+
extend ::Dapp::Dimg::CLI::Options::Introspection
|
29
16
|
|
30
17
|
option :tmp_dir_prefix,
|
31
18
|
long: '--tmp-dir-prefix PREFIX',
|
@@ -40,35 +27,12 @@ BANNER
|
|
40
27
|
long: '--git-artifact-branch BRANCH',
|
41
28
|
description: 'Default branch to archive artifacts from'
|
42
29
|
|
43
|
-
option :
|
44
|
-
long: '--
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
long: '--introspect-before-error',
|
50
|
-
boolean: true,
|
51
|
-
default: false
|
52
|
-
|
53
|
-
option :introspect_stage,
|
54
|
-
long: '--introspect-stage STAGE',
|
55
|
-
description: "Introspect one of the following stages (#{list_msg_format(DIMG_STAGES)})",
|
56
|
-
proc: STAGE_PROC.call(DIMG_STAGES)
|
57
|
-
|
58
|
-
option :introspect_before,
|
59
|
-
long: '--introspect-before STAGE',
|
60
|
-
description: "Introspect stage before one of the following stages (#{list_msg_format(DIMG_STAGES[1..-1])})",
|
61
|
-
proc: before_stage_proc.call(DIMG_STAGES)
|
62
|
-
|
63
|
-
option :introspect_artifact_stage,
|
64
|
-
long: '--introspect-artifact-stage STAGE',
|
65
|
-
description: "Introspect one of the following stages (#{list_msg_format(artifact_stages)})",
|
66
|
-
proc: STAGE_PROC.call(artifact_stages)
|
67
|
-
|
68
|
-
option :introspect_artifact_before,
|
69
|
-
long: '--introspect-artifact-before STAGE',
|
70
|
-
description: "Introspect stage before one of the following stages (#{list_msg_format(artifact_stages[1..-1])})",
|
71
|
-
proc: before_stage_proc.call(artifact_stages)
|
30
|
+
option :ssh_key,
|
31
|
+
long: '--ssh-key SSH_KEY',
|
32
|
+
description: ['Enable only specified ssh keys ',
|
33
|
+
'(use system ssh-agent by default)'].join,
|
34
|
+
default: nil,
|
35
|
+
proc: ->(v) { composite_options(:ssh_key) << v }
|
72
36
|
|
73
37
|
option :build_context_directory,
|
74
38
|
long: '--build-context-directory DIR_PATH',
|
@@ -83,13 +47,6 @@ BANNER
|
|
83
47
|
long: '--force-save-cache',
|
84
48
|
boolean: true,
|
85
49
|
default: false
|
86
|
-
|
87
|
-
def cli_options(**kwargs)
|
88
|
-
super.tap do |config|
|
89
|
-
config[:introspect_stage] ||= config[:introspect_before]
|
90
|
-
config[:introspect_artifact_stage] ||= config[:introspect_artifact_before]
|
91
|
-
end
|
92
|
-
end
|
93
50
|
end
|
94
51
|
end
|
95
52
|
end
|
@@ -12,14 +12,18 @@ Usage:
|
|
12
12
|
|
13
13
|
Options:
|
14
14
|
BANNER
|
15
|
-
|
16
|
-
extend ::Dapp::CLI::Options::Ssh
|
17
|
-
|
18
15
|
option :stage,
|
19
16
|
long: '--stage STAGE',
|
20
17
|
description: "Run one of the following stages (#{list_msg_format(DIMG_STAGES)})",
|
21
18
|
proc: STAGE_PROC.call(DIMG_STAGES)
|
22
19
|
|
20
|
+
option :ssh_key,
|
21
|
+
long: '--ssh-key SSH_KEY',
|
22
|
+
description: ['Enable only specified ssh keys ',
|
23
|
+
'(use system ssh-agent by default)'].join,
|
24
|
+
default: nil,
|
25
|
+
proc: ->(v) { composite_options(:ssh_key) << v }
|
26
|
+
|
23
27
|
def read_options(args)
|
24
28
|
self.class.cli_wrapper(self) do
|
25
29
|
args.each_with_index do |arg, i|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Dapp::Dimg::CLI
|
2
|
+
module Options
|
3
|
+
module Introspection
|
4
|
+
def self.extended(klass)
|
5
|
+
artifact_stages = [
|
6
|
+
:from, :before_install, :before_install_artifact, :g_a_archive, :g_a_pre_install_patch, :install,
|
7
|
+
:g_a_post_install_patch, :after_install_artifact, :before_setup, :before_setup_artifact,
|
8
|
+
:g_a_pre_setup_patch, :setup, :after_setup_artifact, :g_a_artifact_patch, :build_artifact
|
9
|
+
]
|
10
|
+
|
11
|
+
klass.class_eval do
|
12
|
+
option :introspect_error,
|
13
|
+
long: '--introspect-error',
|
14
|
+
boolean: true,
|
15
|
+
default: false
|
16
|
+
|
17
|
+
option :introspect_before_error,
|
18
|
+
long: '--introspect-before-error',
|
19
|
+
boolean: true,
|
20
|
+
default: false
|
21
|
+
|
22
|
+
option :introspect_stage,
|
23
|
+
long: '--introspect-stage STAGE',
|
24
|
+
description: "Introspect one of the following stages (#{list_msg_format(klass.const_get(:DIMG_STAGES))})",
|
25
|
+
proc: klass.const_get(:STAGE_PROC).call(klass.const_get(:DIMG_STAGES))
|
26
|
+
|
27
|
+
option :introspect_before,
|
28
|
+
long: '--introspect-before STAGE',
|
29
|
+
description: "Introspect stage before one of the following stages (#{list_msg_format(klass.const_get(:DIMG_STAGES))})",
|
30
|
+
proc: klass.const_get(:STAGE_PROC).call(klass.const_get(:DIMG_STAGES))
|
31
|
+
|
32
|
+
option :introspect_artifact_stage,
|
33
|
+
long: '--introspect-artifact-stage STAGE',
|
34
|
+
description: "Introspect one of the following stages (#{list_msg_format(artifact_stages)})",
|
35
|
+
proc: klass.const_get(:STAGE_PROC).call(artifact_stages)
|
36
|
+
|
37
|
+
option :introspect_artifact_before,
|
38
|
+
long: '--introspect-artifact-before STAGE',
|
39
|
+
description: "Introspect stage before one of the following stages (#{list_msg_format(artifact_stages)})",
|
40
|
+
proc: klass.const_get(:STAGE_PROC).call(artifact_stages)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -150,9 +150,15 @@ module Dapp
|
|
150
150
|
@kube_images ||= namespaces['items'].map do |item|
|
151
151
|
item['metadata']['name']
|
152
152
|
end.map do |ns|
|
153
|
-
|
154
|
-
client.
|
155
|
-
|
153
|
+
[].tap do |arr|
|
154
|
+
client.with_namespace(ns) do
|
155
|
+
arr << pod_images(client)
|
156
|
+
arr << cronjob_images(client)
|
157
|
+
arr << daemonset_images(client)
|
158
|
+
arr << deployment_images(client)
|
159
|
+
arr << job_images(client)
|
160
|
+
arr << replicaset_images(client)
|
161
|
+
arr << replicationcontroller_images(client)
|
156
162
|
end
|
157
163
|
end
|
158
164
|
end.flatten.uniq.select do |image|
|
@@ -160,6 +166,57 @@ module Dapp
|
|
160
166
|
end
|
161
167
|
end
|
162
168
|
|
169
|
+
# pod items[] spec containers[] image
|
170
|
+
def pod_images(client)
|
171
|
+
client.pod_list['items'].map do |item|
|
172
|
+
item['spec']['containers'].map{ |cont| cont['image'] }
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# cronjob items[] spec jobTemplate spec template spec containers[] image
|
177
|
+
def cronjob_images(client)
|
178
|
+
client.cronjob_list['items'].map do |item|
|
179
|
+
item['spec']['jobTemplate']['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# daemonsets items[] spec template spec containers[] image
|
184
|
+
def daemonset_images(client)
|
185
|
+
client.daemonset_list['items'].map do |item|
|
186
|
+
item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# deployment items[] spec template spec containers[] image
|
191
|
+
def deployment_images(client)
|
192
|
+
client.deployment_list['items'].map do |item|
|
193
|
+
item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
# job items[] spec template spec containers[] image
|
198
|
+
def job_images(client)
|
199
|
+
client.job_list['items'].map do |item|
|
200
|
+
item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# replicasets items[] spec template spec containers[] image
|
205
|
+
def replicaset_images(client)
|
206
|
+
client.replicaset_list['items'].map do |item|
|
207
|
+
item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
# replicationcontroller items[] spec template spec containers[] image
|
212
|
+
def replicationcontroller_images(client)
|
213
|
+
client.replicationcontroller_list['items'].map do |item|
|
214
|
+
item['spec']['template']['spec']['containers'].map{ |cont| cont['image'] }
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
|
163
220
|
def without_kube?
|
164
221
|
!!options[:without_kube]
|
165
222
|
end
|
@@ -3,6 +3,10 @@ module Dapp
|
|
3
3
|
module Dapp
|
4
4
|
module Command
|
5
5
|
module Common
|
6
|
+
def dimgstage_push_tag_format
|
7
|
+
'dimgstage-%{signature}'
|
8
|
+
end
|
9
|
+
|
6
10
|
protected
|
7
11
|
|
8
12
|
def dapp_project_dimgstages
|
@@ -203,7 +207,7 @@ module Dapp
|
|
203
207
|
end
|
204
208
|
|
205
209
|
def dimgstage_push_format
|
206
|
-
|
210
|
+
"%{repo}:#{dimgstage_push_tag_format}"
|
207
211
|
end
|
208
212
|
|
209
213
|
def with_stages?
|
@@ -6,7 +6,7 @@ module Dapp
|
|
6
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: stage_name.nil
|
9
|
+
dimg(config: build_configs.first, ignore_git_fetch: true, should_be_built: stage_name.nil?, ignore_signature_auto_calculation: true)
|
10
10
|
.run_stage(stage_name, docker_options, command)
|
11
11
|
end
|
12
12
|
end
|
@@ -7,11 +7,10 @@ module Dapp
|
|
7
7
|
protected
|
8
8
|
|
9
9
|
def repo_detailed_dimgs_images(registry)
|
10
|
-
repo_dimgs_images(registry).
|
10
|
+
repo_dimgs_images(registry).each do |dimg|
|
11
11
|
image_history = registry.image_history(dimg[:tag], dimg[:dimg])
|
12
12
|
dimg[:parent] = image_history['container_config']['Image']
|
13
|
-
dimg[:labels] = image_history['config']['Labels']
|
14
|
-
dimg[:labels]['dapp'] == name
|
13
|
+
dimg[:labels] = image_history['config']['Labels']
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
@@ -8,6 +8,9 @@ module Dapp
|
|
8
8
|
lock("#{name}.images") do
|
9
9
|
log_step_with_indent('flush stages') { remove_project_images(dapp_project_dimgstages) }
|
10
10
|
end
|
11
|
+
|
12
|
+
dapp_containers_flush_by_label("dapp=#{name}")
|
13
|
+
dapp_dangling_images_flush_by_label("dapp=#{name}")
|
11
14
|
end
|
12
15
|
end
|
13
16
|
end
|
data/lib/dapp/dimg/dapp/dimg.rb
CHANGED
@@ -3,11 +3,25 @@ module Dapp
|
|
3
3
|
module Dapp
|
4
4
|
module Dimg
|
5
5
|
def dimg(config:, **kwargs)
|
6
|
-
(
|
6
|
+
dimg_after_define_hook(config: config, **kwargs) do
|
7
|
+
(@dimg ||= {})[config._name] ||= ::Dapp::Dimg::Dimg.new(config: config, dapp: self, **kwargs)
|
8
|
+
end
|
7
9
|
end
|
8
10
|
|
9
11
|
def artifact_dimg(config:, **kwargs)
|
10
|
-
(
|
12
|
+
dimg_after_define_hook(config: config, **kwargs) do
|
13
|
+
(@artifacts_dimgs ||= {})[config._name] ||= ::Dapp::Dimg::Artifact.new(config: config, dapp: self, **kwargs)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def dimg_after_define_hook(**kwargs)
|
18
|
+
should_be_built = kwargs[:should_be_built] || false
|
19
|
+
yield.tap do |dimg|
|
20
|
+
if should_be_built && dimg.should_be_built != should_be_built
|
21
|
+
dimg.enable_should_be_built
|
22
|
+
dimg.should_be_built!
|
23
|
+
end
|
24
|
+
end
|
11
25
|
end
|
12
26
|
|
13
27
|
def dimg_layer(config:, **kwargs)
|
data/lib/dapp/dimg/dimg.rb
CHANGED
@@ -20,10 +20,18 @@ module Dapp
|
|
20
20
|
|
21
21
|
@ignore_git_fetch = ignore_git_fetch
|
22
22
|
@ignore_signature_auto_calculation = ignore_signature_auto_calculation
|
23
|
-
@should_be_built = should_be_built
|
24
23
|
|
25
24
|
@dapp._terminate_dimg_on_terminate(self)
|
26
25
|
|
26
|
+
enable_should_be_built if should_be_built
|
27
|
+
should_be_built!
|
28
|
+
end
|
29
|
+
|
30
|
+
def enable_should_be_built
|
31
|
+
@should_be_built = true
|
32
|
+
end
|
33
|
+
|
34
|
+
def should_be_built!
|
27
35
|
raise Error::Dimg, code: :dimg_not_built if should_be_built?
|
28
36
|
end
|
29
37
|
|
@@ -67,7 +75,14 @@ module Dapp
|
|
67
75
|
def export_stages!(repo, format:)
|
68
76
|
dapp.lock("#{dapp.name}.images", readonly: true) do
|
69
77
|
export_images.each do |stage_image|
|
70
|
-
|
78
|
+
signature = stage_image.name.split(':').last
|
79
|
+
image_name = format(format, repo: repo, signature: signature)
|
80
|
+
|
81
|
+
if dimgstage_should_not_be_pushed?(format(dapp.dimgstage_push_tag_format, signature: signature))
|
82
|
+
dapp.log_state(image_name, state: dapp.t(code: 'state.exist'))
|
83
|
+
next
|
84
|
+
end
|
85
|
+
|
71
86
|
export_base!(image_name, push: true) do
|
72
87
|
stage_image.export!(image_name)
|
73
88
|
end
|
@@ -101,6 +116,10 @@ module Dapp
|
|
101
116
|
end
|
102
117
|
end
|
103
118
|
|
119
|
+
def dimgstage_should_not_be_pushed?(signature)
|
120
|
+
registry_dimgstages_tags.include?(signature)
|
121
|
+
end
|
122
|
+
|
104
123
|
def tag_should_not_be_pushed?(tag)
|
105
124
|
registry_tags.include?(tag) && begin
|
106
125
|
registry_tag_parent = registry.image_history(tag, name)['container_config']['Image']
|
@@ -118,12 +137,17 @@ module Dapp
|
|
118
137
|
end
|
119
138
|
end
|
120
139
|
|
140
|
+
def registry_dimgstages_tags
|
141
|
+
@registry_dimgstages_tags ||= registry.dimgstages_tags
|
142
|
+
end
|
143
|
+
|
121
144
|
def registry
|
122
145
|
@registry ||= dapp.dimg_registry
|
123
146
|
end
|
124
147
|
|
125
148
|
def build_export_image!(image_name, scheme_name:)
|
126
149
|
Image::Dimg.image_by_name(name: image_name, from: last_stage.image, dapp: dapp).tap do |export_image|
|
150
|
+
export_image.untag! if export_image.built?
|
127
151
|
export_image.add_service_change_label(:'dapp-tag-scheme' => scheme_name)
|
128
152
|
export_image.add_service_change_label(:'dapp-dimg' => true)
|
129
153
|
export_image.build!
|
@@ -144,8 +168,15 @@ module Dapp
|
|
144
168
|
def import_stages!(repo, format:)
|
145
169
|
dapp.lock("#{dapp.name}.images", readonly: true) do
|
146
170
|
import_images.each do |image|
|
171
|
+
signature = image.name.split(':').last
|
172
|
+
image_name = format(format, repo: repo, signature:signature )
|
173
|
+
|
174
|
+
unless dimgstage_should_not_be_pushed?(format(dapp.dimgstage_push_tag_format, signature: signature))
|
175
|
+
dapp.log_state(image_name, state: dapp.t(code: 'state.not_exist'))
|
176
|
+
next
|
177
|
+
end
|
178
|
+
|
147
179
|
begin
|
148
|
-
image_name = format(format, repo: repo, signature: image.name.split(':').last)
|
149
180
|
import_base!(image, image_name)
|
150
181
|
rescue ::Dapp::Error::Shellout => e
|
151
182
|
dapp.log_info ::Dapp::Helper::NetStatus.message(e)
|
@@ -244,7 +275,11 @@ module Dapp
|
|
244
275
|
dapp.shellout! cmd
|
245
276
|
end
|
246
277
|
|
247
|
-
def
|
278
|
+
def stage_should_be_introspected_before_build?(name)
|
279
|
+
dapp.options[:introspect_before] == name
|
280
|
+
end
|
281
|
+
|
282
|
+
def stage_should_be_introspected_after_build?(name)
|
248
283
|
dapp.options[:introspect_stage] == name
|
249
284
|
end
|
250
285
|
|
@@ -31,11 +31,7 @@ module Dapp
|
|
31
31
|
def generate_git_artifacts(repo, **git_artifact_options)
|
32
32
|
[].tap do |artifacts|
|
33
33
|
artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, self, **git_artifact_options))
|
34
|
-
|
35
|
-
artifacts
|
36
|
-
else
|
37
|
-
artifacts.concat(generate_git_embedded_artifacts(artifact))
|
38
|
-
end
|
34
|
+
artifacts.concat(generate_git_embedded_artifacts(artifact))
|
39
35
|
end.select do |artifact|
|
40
36
|
!artifact.empty?
|
41
37
|
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?
|
@@ -91,7 +91,7 @@ module Dapp
|
|
91
91
|
{}.tap do |options|
|
92
92
|
options[:name] = repo.dapp.consistent_uniq_slugify("embedded-#{embedded_rel_path}")
|
93
93
|
options[:cwd] = embedded_inherit_path(cwd, embedded_rel_path).last
|
94
|
-
options[:to] =
|
94
|
+
options[:to] = File.join(to, embedded_rel_path)
|
95
95
|
options[:include_paths] = embedded_inherit_paths(include_paths, embedded_rel_path)
|
96
96
|
options[:exclude_paths] = embedded_inherit_paths(exclude_paths, embedded_rel_path)
|
97
97
|
options[:stages_dependencies] = begin
|
@@ -100,9 +100,6 @@ module Dapp
|
|
100
100
|
return {} if from.nil?
|
101
101
|
[:entrypoint, :cmd].each_with_object({}) do |option, options|
|
102
102
|
options[option] = from.config_option(option.to_s.capitalize) || []
|
103
|
-
end.tap do |options|
|
104
|
-
workdir = from.config_option('WorkingDir')
|
105
|
-
options[:workdir] = Array((workdir || '').empty? ? '/' : workdir)
|
106
103
|
end
|
107
104
|
end
|
108
105
|
|
@@ -124,7 +121,6 @@ module Dapp
|
|
124
121
|
|
125
122
|
def service_options
|
126
123
|
{
|
127
|
-
workdir: '/',
|
128
124
|
entrypoint: dapp.bash_bin,
|
129
125
|
name: container_name,
|
130
126
|
user: '0:0',
|
@@ -1,15 +1,57 @@
|
|
1
1
|
module Dapp
|
2
2
|
module Kube
|
3
3
|
module Kubernetes
|
4
|
+
# TODO endpoints can be gathered from api-server by api discovery.
|
5
|
+
K8S_API_ENDPOINTS = {
|
6
|
+
'1.6' => {
|
7
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
8
|
+
'/apis/apps/v1beta1' => [:deployment, :statefulset, ],
|
9
|
+
'/apis/extensions/v1beta1' => [:replicaset, :daemonset, ],
|
10
|
+
'/apis/batch/v1' => [:job, ],
|
11
|
+
'/apis/batch/v2aplha1' => [:cronjob, ],
|
12
|
+
},
|
13
|
+
'1.7' => {
|
14
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
15
|
+
'/apis/apps/v1beta1' => [:deployment, :statefulset, ],
|
16
|
+
'/apis/extensions/v1beta1' => [:replicaset, :daemonset, ],
|
17
|
+
'/apis/batch/v1' => [:job, ],
|
18
|
+
'/apis/batch/v2aplha1' => [:cronjob, ],
|
19
|
+
},
|
20
|
+
'1.8' => {
|
21
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
22
|
+
'/apis/apps/v1beta2' => [:daemonset, :deployment, :replicaset, :statefulset, ],
|
23
|
+
'/apis/batch/v1' => [:job, ],
|
24
|
+
'/apis/batch/v1beta1' => [:cronjob, ],
|
25
|
+
},
|
26
|
+
'1.9' => {
|
27
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
28
|
+
'/apis/apps/v1' => [:daemonset, :deployment, :replicaset, :statefulset, ],
|
29
|
+
'/apis/batch/v1' => [:job, ],
|
30
|
+
'/apis/batch/v1beta1' => [:cronjob, ],
|
31
|
+
},
|
32
|
+
'1.10' => {
|
33
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
34
|
+
'/apis/apps/v1' => [:daemonset, :deployment, :replicaset, :statefulset, ],
|
35
|
+
'/apis/batch/v1' => [:job, ],
|
36
|
+
'/apis/batch/v1beta1' => [:cronjob, ],
|
37
|
+
},
|
38
|
+
'stable' => {
|
39
|
+
'/api/v1' => [:service, :replicationcontroller, :pod, :podtemplate, ],
|
40
|
+
'/apis/batch/v1' => [:job, ],
|
41
|
+
},
|
42
|
+
}
|
43
|
+
|
4
44
|
class Client
|
5
45
|
include Helper::YAML
|
6
46
|
extend Helper::YAML
|
7
47
|
|
8
48
|
::Dapp::Dapp::Shellout::Base.default_env_keys << 'KUBECONFIG'
|
9
49
|
|
50
|
+
#
|
10
51
|
def initialize(namespace: nil)
|
11
52
|
@namespace = namespace
|
12
53
|
@query_parameters = {}
|
54
|
+
@cluster_version
|
13
55
|
end
|
14
56
|
|
15
57
|
def namespace
|
@@ -42,47 +84,61 @@ module Dapp
|
|
42
84
|
# NOTICE: Название метода аналогично kind'у выдаваемого результата.
|
43
85
|
# NOTICE: В данном случае в результате kind=DeploymentList.
|
44
86
|
# NOTICE: Методы создания/обновления/удаления сущностей kubernetes заканчиваются на '!'. Например, create_deployment!.
|
87
|
+
# В каждом методе происходит выбор api на основе версии кластера
|
45
88
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
objects.each do |object|
|
52
|
-
define_method :"#{object}_list" do |**query_parameters|
|
53
|
-
request!(:get, "#{api}/namespaces/#{namespace}/#{object}s", **query_parameters)
|
54
|
-
end
|
89
|
+
def resource_endpoint_path(resource)
|
90
|
+
K8S_API_ENDPOINTS[cluster_version()].map do |path, resources|
|
91
|
+
resources.include?(resource) ? path : nil
|
92
|
+
end.compact.first
|
93
|
+
end
|
55
94
|
|
56
|
-
|
57
|
-
|
58
|
-
|
95
|
+
[
|
96
|
+
:service, :replicationcontroller, :pod, :podtemplate,
|
97
|
+
:daemonset, :deployment, :replicaset, :statefulset,
|
98
|
+
:job,
|
99
|
+
:cronjob,
|
100
|
+
].each do |resource|
|
101
|
+
define_method :"#{resource}_list" do |**query_parameters|
|
102
|
+
api_path = resource_endpoint_path(resource)
|
103
|
+
request!(:get, "#{api_path}/namespaces/#{namespace}/#{resource}s", **query_parameters)
|
104
|
+
end
|
59
105
|
|
60
|
-
|
61
|
-
|
62
|
-
|
106
|
+
define_method resource do |name, **query_parameters|
|
107
|
+
api_path = resource_endpoint_path(resource)
|
108
|
+
request!(:get, "#{api_path}/namespaces/#{namespace}/#{resource}s/#{name}", **query_parameters)
|
109
|
+
end
|
63
110
|
|
64
|
-
|
65
|
-
|
66
|
-
|
111
|
+
define_method "#{resource}_status" do |name, **query_parameters|
|
112
|
+
api_path = resource_endpoint_path(resource)
|
113
|
+
request!(:get, "#{api_path}/namespaces/#{namespace}/#{resource}s/#{name}/status", **query_parameters)
|
114
|
+
end
|
67
115
|
|
68
|
-
|
69
|
-
|
70
|
-
|
116
|
+
define_method :"create_#{resource}!" do |spec, **query_parameters|
|
117
|
+
api_path = resource_endpoint_path(resource)
|
118
|
+
request!(:post, "#{api_path}/namespaces/#{namespace}/#{resource}s", body: spec, **query_parameters)
|
119
|
+
end
|
71
120
|
|
72
|
-
|
73
|
-
|
74
|
-
|
121
|
+
define_method :"replace_#{resource}!" do |name, spec, **query_parameters|
|
122
|
+
api_path = resource_endpoint_path(resource)
|
123
|
+
request!(:put, "#{api_path}/namespaces/#{namespace}/#{resource}s/#{name}", body: spec, **query_parameters)
|
124
|
+
end
|
75
125
|
|
76
|
-
|
77
|
-
|
78
|
-
|
126
|
+
define_method :"delete_#{resource}!" do |name, **query_parameters|
|
127
|
+
api_path = resource_endpoint_path(resource)
|
128
|
+
request!(:delete, "#{api_path}/namespaces/#{namespace}/#{resource}s/#{name}", **query_parameters)
|
129
|
+
end
|
79
130
|
|
80
|
-
|
81
|
-
|
82
|
-
|
131
|
+
define_method :"delete_#{resource}s!" do |**query_parameters|
|
132
|
+
api_path = resource_endpoint_path(resource)
|
133
|
+
request!(:delete, "#{api_path}/namespaces/#{namespace}/#{resource}s", **query_parameters)
|
134
|
+
end
|
135
|
+
|
136
|
+
define_method :"#{resource}?" do |name, **query_parameters|
|
137
|
+
public_send(:"#{resource}_list", **query_parameters)['items'].map { |item| item['metadata']['name'] }.include?(name)
|
83
138
|
end
|
84
139
|
end
|
85
140
|
|
141
|
+
|
86
142
|
def namespace_list(**query_parameters)
|
87
143
|
request!(:get, '/api/v1/namespaces', **query_parameters)
|
88
144
|
end
|
@@ -99,6 +155,21 @@ module Dapp
|
|
99
155
|
request!(:delete, "/api/v1/namespaces/#{name}", **query_parameters)
|
100
156
|
end
|
101
157
|
|
158
|
+
# minikube returns empty major and minor. Fallback to stable only apis for minikube setup
|
159
|
+
def cluster_version(**query_parameters)
|
160
|
+
version_obj = request!(:get, "/version", **query_parameters)
|
161
|
+
@cluster_version ||= begin
|
162
|
+
major = version_obj['major']
|
163
|
+
minor = version_obj['minor']
|
164
|
+
k8s_version = "#{version_obj['major']}.#{version_obj['minor']}"
|
165
|
+
if K8S_API_ENDPOINTS.has_key?(k8s_version)
|
166
|
+
k8s_version
|
167
|
+
else
|
168
|
+
"stable"
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
102
173
|
def pod_log(name, follow: false, **query_parameters, &blk)
|
103
174
|
excon_parameters = follow ? { response_block: blk } : {}
|
104
175
|
request!(:get,
|
data/lib/dapp/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Stolyarov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -234,14 +234,14 @@ dependencies:
|
|
234
234
|
requirements:
|
235
235
|
- - "~>"
|
236
236
|
- !ruby/object:Gem::Version
|
237
|
-
version: '
|
237
|
+
version: '1.7'
|
238
238
|
type: :development
|
239
239
|
prerelease: false
|
240
240
|
version_requirements: !ruby/object:Gem::Requirement
|
241
241
|
requirements:
|
242
242
|
- - "~>"
|
243
243
|
- !ruby/object:Gem::Version
|
244
|
-
version: '
|
244
|
+
version: '1.7'
|
245
245
|
- !ruby/object:Gem::Dependency
|
246
246
|
name: rake
|
247
247
|
requirement: !ruby/object:Gem::Requirement
|
@@ -467,10 +467,9 @@ files:
|
|
467
467
|
- lib/dapp/cli.rb
|
468
468
|
- lib/dapp/cli/cli.rb
|
469
469
|
- lib/dapp/cli/command/base.rb
|
470
|
-
- lib/dapp/cli/command/options/tag.rb
|
471
470
|
- lib/dapp/cli/command/slug.rb
|
472
471
|
- lib/dapp/cli/command/update.rb
|
473
|
-
- lib/dapp/cli/options/
|
472
|
+
- lib/dapp/cli/options/tag.rb
|
474
473
|
- lib/dapp/config/config.rb
|
475
474
|
- lib/dapp/config/directive/base.rb
|
476
475
|
- lib/dapp/core_ext/hash.rb
|
@@ -600,6 +599,7 @@ files:
|
|
600
599
|
- lib/dapp/dimg/cli/command/dimg/stages/pull.rb
|
601
600
|
- lib/dapp/dimg/cli/command/dimg/stages/push.rb
|
602
601
|
- lib/dapp/dimg/cli/command/dimg/tag.rb
|
602
|
+
- lib/dapp/dimg/cli/options/introspection.rb
|
603
603
|
- lib/dapp/dimg/config/config.rb
|
604
604
|
- lib/dapp/dimg/config/directive/artifact.rb
|
605
605
|
- lib/dapp/dimg/config/directive/artifact_base.rb
|
@@ -1,53 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
class CLI
|
3
|
-
module Command
|
4
|
-
module Options
|
5
|
-
module Tag
|
6
|
-
def self.extended(klass)
|
7
|
-
klass.class_eval do
|
8
|
-
"Add tag (can be used one or more times), specified text will be slugified".tap do |desc|
|
9
|
-
option :tag,
|
10
|
-
long: '--tag TAG',
|
11
|
-
description: desc,
|
12
|
-
default: [],
|
13
|
-
proc: proc { |v| composite_options(:tags) << v }
|
14
|
-
|
15
|
-
option :tag_slug,
|
16
|
-
long: '--tag-slug TAG',
|
17
|
-
description: desc,
|
18
|
-
default: [],
|
19
|
-
proc: proc { |v| composite_options(:slug_tags) << v }
|
20
|
-
end
|
21
|
-
|
22
|
-
option :tag_plain,
|
23
|
-
long: '--tag-plain TAG',
|
24
|
-
description: "Add tag (can be used one or more times)",
|
25
|
-
default: [],
|
26
|
-
proc: proc { |v| composite_options(:plain_tags) << v }
|
27
|
-
|
28
|
-
option :tag_branch,
|
29
|
-
long: '--tag-branch',
|
30
|
-
description: 'Tag by git branch',
|
31
|
-
boolean: true
|
32
|
-
|
33
|
-
option :tag_build_id,
|
34
|
-
long: '--tag-build-id',
|
35
|
-
description: 'Tag by CI build id',
|
36
|
-
boolean: true
|
37
|
-
|
38
|
-
option :tag_ci,
|
39
|
-
long: '--tag-ci',
|
40
|
-
description: 'Tag by CI branch and tag',
|
41
|
-
boolean: true
|
42
|
-
|
43
|
-
option :tag_commit,
|
44
|
-
long: '--tag-commit',
|
45
|
-
description: 'Tag by git commit',
|
46
|
-
boolean: true
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/dapp/cli/options/ssh.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
class CLI
|
3
|
-
module Options
|
4
|
-
module Ssh
|
5
|
-
def self.extended(klass)
|
6
|
-
klass.class_eval do
|
7
|
-
option :ssh_key,
|
8
|
-
long: '--ssh-key SSH_KEY',
|
9
|
-
description: ['Enable only specified ssh keys ',
|
10
|
-
'(use system ssh-agent by default)'].join,
|
11
|
-
default: nil,
|
12
|
-
proc: ->(v) { composite_options(:ssh_key) << v }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|