dapp 0.27.24 → 0.28.0
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/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
|