dapp 0.17.4 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/bin/dapp +30 -59
- data/config/en/net_status.yml +1 -1
- data/lib/dapp.rb +0 -4
- data/lib/dapp/cli.rb +0 -4
- data/lib/dapp/cli/command/base.rb +1 -8
- data/lib/dapp/cli/command/update.rb +38 -4
- data/lib/dapp/dapp.rb +12 -30
- data/lib/dapp/dimg/cli/command/base.rb +4 -0
- data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +1 -3
- data/lib/dapp/dimg/git_repo/remote.rb +1 -1
- data/lib/dapp/kube/dapp/command/chart_create.rb +7 -7
- data/lib/dapp/kube/dapp/command/common.rb +6 -4
- data/lib/dapp/kube/dapp/command/deploy.rb +7 -14
- data/lib/dapp/kube/dapp/command/secret_edit.rb +1 -1
- data/lib/dapp/kube/helm/release.rb +20 -41
- data/lib/dapp/version.rb +1 -1
- metadata +3 -33
- data/lib/dapp/dapp/sentry.rb +0 -112
- data/lib/dapp/helper/url.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d6f675f931b5b79d8637e493f875973f718547a6f77978bd1d8b3e5bc6c606c3
|
4
|
+
data.tar.gz: fe73c28ca5d6962a19deb01778b420f23c5169bcf5fd1aa31a2e65c460c49bfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2589954a540ca69262a3af36ae7e7532e7830a5b59feafd2dce0b32b66798eef968aad7518610556815fe26654fb332dce94c424865b39461e297d25a82da77e
|
7
|
+
data.tar.gz: 218644c687bc41cb81977a08ffdf6ebbdc64411e9d4b34bfeb4766f2378eafbb7ffec58a71b19d9e759bbd3c7eea230a0fe5c82d694ae5d601ead60627d9b093
|
data/bin/dapp
CHANGED
@@ -2,71 +2,42 @@
|
|
2
2
|
# -*- mode: ruby -*-
|
3
3
|
# vi: set ft=ruby :
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
file = nil
|
9
|
-
|
10
|
-
begin
|
11
|
-
file = ::File.open("/tmp/dapp-running.lock", ::File::RDWR | ::File::CREAT, 0777)
|
12
|
-
|
13
|
-
if ARGV[0] == 'update'
|
14
|
-
unless file.flock(::File::LOCK_EX | ::File::LOCK_NB)
|
15
|
-
puts "There are other active dapp processes, exiting without update"
|
16
|
-
exit(0)
|
17
|
-
end
|
18
|
-
else
|
19
|
-
file.flock(::File::LOCK_SH)
|
20
|
-
end
|
21
|
-
|
22
|
-
yield
|
23
|
-
ensure
|
24
|
-
file.close if file
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
with_dapp_running_lock do
|
29
|
-
require 'rubygems'
|
30
|
-
require 'dapp'
|
5
|
+
require 'rubygems'
|
6
|
+
require 'dapp'
|
31
7
|
|
8
|
+
begin
|
32
9
|
begin
|
33
10
|
begin
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
$stderr.puts(message)
|
39
|
-
end
|
40
|
-
|
41
|
-
raise
|
42
|
-
end
|
43
|
-
rescue ::SystemExit
|
44
|
-
raise
|
45
|
-
rescue ::Exception => e
|
46
|
-
"/tmp/dapp-stacktrace-#{SecureRandom.uuid}.out".tap do |filename|
|
47
|
-
::File.open(filename, 'w') do |dapp_stacktrace|
|
48
|
-
dapp_stacktrace.write "#{e.backtrace.join("\n")}\n"
|
49
|
-
end
|
50
|
-
$stderr.puts "\033[1m\033[90mStacktrace dumped to #{filename}\033[0m"
|
51
|
-
end
|
52
|
-
|
53
|
-
if Dapp::CLI.dapp_object
|
54
|
-
Dapp::CLI.dapp_object.sentry_exception(e)
|
11
|
+
Dapp::CLI.new.run
|
12
|
+
rescue Dapp::Error::Base => e
|
13
|
+
unless (message = Dapp::Helper::NetStatus.before_error_message(e)).empty?
|
14
|
+
$stderr.puts(message)
|
55
15
|
end
|
56
16
|
|
57
17
|
raise
|
58
18
|
end
|
59
|
-
rescue
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
exit 1
|
19
|
+
rescue ::SystemExit
|
20
|
+
raise
|
21
|
+
rescue ::Exception => e
|
22
|
+
"/tmp/dapp-stacktrace-#{SecureRandom.uuid}.out".tap do |filename|
|
23
|
+
::File.open(filename, 'w') do |dapp_stacktrace|
|
24
|
+
dapp_stacktrace.write "#{e.backtrace.join("\n")}\n"
|
25
|
+
end
|
26
|
+
$stderr.puts "\033[1m\033[90mStacktrace dumped to #{filename}\033[0m"
|
27
|
+
end
|
28
|
+
|
29
|
+
raise
|
71
30
|
end
|
31
|
+
rescue Dapp::Error::Shellout => e
|
32
|
+
$stderr.puts(Dapp::Helper::NetStatus.message(e))
|
33
|
+
exit 1
|
34
|
+
rescue Dapp::Error::Base, NetStatus::Exception => e
|
35
|
+
$stderr.puts(Dapp::Dapp.paint_string(Dapp::Helper::NetStatus.message(e), :warning))
|
36
|
+
exit 1
|
37
|
+
rescue Interrupt => _e
|
38
|
+
$stderr.puts(Dapp::Dapp.paint_string('Interrupted', :warning))
|
39
|
+
exit 1
|
40
|
+
rescue Errno::EACCES => _e
|
41
|
+
$stderr.puts(Dapp::Dapp.paint_string('Permission denied!', :warning))
|
42
|
+
exit 1
|
72
43
|
end
|
data/config/en/net_status.yml
CHANGED
@@ -50,7 +50,7 @@ en:
|
|
50
50
|
cannot_run_ssh_agent: "Cannot run ssh-agent"
|
51
51
|
ssh_key_not_found: "Ssh key `%{path}` not exist!"
|
52
52
|
docker_not_found: "Docker not found!"
|
53
|
-
docker_version: "Required docker version:
|
53
|
+
docker_version: "Required docker version (`%{version}`): `%{min_version}` <= VERSION <= `%{max_version}`!"
|
54
54
|
dapp_config_file_incorrect: "%{message}"
|
55
55
|
yaml_file_incorrect: "Yaml file `%{file}`: `%{message}`"
|
56
56
|
yaml_incorrect: "`%{message}`"
|
data/lib/dapp.rb
CHANGED
@@ -24,8 +24,6 @@ require 'openssl'
|
|
24
24
|
require 'etc'
|
25
25
|
require 'zlib'
|
26
26
|
require 'slugify'
|
27
|
-
require 'sentry-raven'
|
28
|
-
require 'toml-rb'
|
29
27
|
|
30
28
|
require 'dapp/version'
|
31
29
|
require 'dapp/core_ext/hash'
|
@@ -36,7 +34,6 @@ require 'dapp/helper/sha256'
|
|
36
34
|
require 'dapp/helper/net_status'
|
37
35
|
require 'dapp/helper/tar'
|
38
36
|
require 'dapp/helper/yaml'
|
39
|
-
require 'dapp/helper/url'
|
40
37
|
require 'dapp/prctl'
|
41
38
|
require 'dapp/error/base'
|
42
39
|
require 'dapp/error/dapp'
|
@@ -52,7 +49,6 @@ require 'dapp/config/config'
|
|
52
49
|
require 'dapp/config/error/config'
|
53
50
|
require 'dapp/dapp/lock'
|
54
51
|
require 'dapp/dapp/ssh_agent'
|
55
|
-
require 'dapp/dapp/sentry'
|
56
52
|
require 'dapp/dapp/git_artifact'
|
57
53
|
require 'dapp/dapp/dappfile'
|
58
54
|
require 'dapp/dapp/chef'
|
data/lib/dapp/cli.rb
CHANGED
@@ -58,9 +58,6 @@ module Dapp
|
|
58
58
|
|
59
59
|
def run_dapp_command(run_method, *args)
|
60
60
|
dapp = ::Dapp::Dapp.new(*args)
|
61
|
-
::Dapp::CLI.dapp_object = dapp
|
62
|
-
dapp.sentry_message("Manual usage: `#{self.run_method}` command") unless ENV['CI']
|
63
|
-
|
64
61
|
begin
|
65
62
|
if block_given?
|
66
63
|
yield dapp
|
@@ -70,16 +67,12 @@ module Dapp
|
|
70
67
|
end
|
71
68
|
end
|
72
69
|
|
73
|
-
def run_method
|
74
|
-
class_to_lowercase
|
75
|
-
end
|
76
|
-
|
77
70
|
def run(_argv = ARGV)
|
78
71
|
raise
|
79
72
|
end
|
80
73
|
|
81
74
|
def cli_options(**kwargs)
|
82
|
-
config.merge(
|
75
|
+
config.merge(**kwargs)
|
83
76
|
end
|
84
77
|
end
|
85
78
|
end
|
@@ -6,14 +6,48 @@ module Dapp
|
|
6
6
|
spec = Gem::Specification.find do |s|
|
7
7
|
File.fnmatch(File.join(s.full_gem_path, '*'), __FILE__)
|
8
8
|
end
|
9
|
-
|
9
|
+
unless (latest_version = latest_beta_version(spec)).nil?
|
10
|
+
try_lock do
|
11
|
+
Gem.install(spec.name, latest_version)
|
12
|
+
end
|
13
|
+
end
|
10
14
|
rescue Gem::FilePermissionError => e
|
11
15
|
raise Errno::EACCES, e.message
|
12
16
|
end
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
def latest_beta_version(current_spec)
|
19
|
+
minor_version = current_spec.version.approximate_recommendation
|
20
|
+
url = "https://rubygems.org/api/v1/versions/#{current_spec.name}.json"
|
21
|
+
response = Excon.get(url)
|
22
|
+
if response.status == 200
|
23
|
+
JSON.parse(response.body)
|
24
|
+
.reduce([]) { |versions, spec| versions << Gem::Version.new(spec['number']) }
|
25
|
+
.reject { |spec_version| minor_version != spec_version.approximate_recommendation || current_spec.version >= spec_version }
|
26
|
+
.first
|
27
|
+
else
|
28
|
+
warn "Cannot get `#{url}`: got bad http status `#{response.status}`"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def try_lock
|
33
|
+
old_umask = File.umask(0)
|
34
|
+
file = nil
|
35
|
+
|
36
|
+
begin
|
37
|
+
begin
|
38
|
+
file = ::File.open('/tmp/dapp-update-running.lock', ::File::RDWR | ::File::CREAT, 0777)
|
39
|
+
ensure
|
40
|
+
File.umask(old_umask)
|
41
|
+
end
|
42
|
+
|
43
|
+
if file.flock(::File::LOCK_EX | ::File::LOCK_NB)
|
44
|
+
yield
|
45
|
+
else
|
46
|
+
puts 'There are other active dapp update process, exiting without update'
|
47
|
+
end
|
48
|
+
ensure
|
49
|
+
file.close unless file.nil?
|
50
|
+
end
|
17
51
|
end
|
18
52
|
end
|
19
53
|
end
|
data/lib/dapp/dapp.rb
CHANGED
@@ -12,13 +12,10 @@ module Dapp
|
|
12
12
|
include Logging::Paint
|
13
13
|
|
14
14
|
include SshAgent
|
15
|
-
include Sentry
|
16
|
-
|
17
15
|
include Helper::Sha256
|
18
|
-
extend
|
16
|
+
extend Helper::Trivia
|
19
17
|
include Helper::Trivia
|
20
18
|
include Helper::Tar
|
21
|
-
include Helper::Url
|
22
19
|
|
23
20
|
include Deps::Gitartifact
|
24
21
|
include Deps::Base
|
@@ -38,18 +35,6 @@ module Dapp
|
|
38
35
|
self.class.options
|
39
36
|
end
|
40
37
|
|
41
|
-
def settings
|
42
|
-
@settings ||= begin
|
43
|
-
settings_path = File.join(self.class.home_dir, "settings.toml")
|
44
|
-
|
45
|
-
if File.exists? settings_path
|
46
|
-
TomlRB.load_file(settings_path)
|
47
|
-
else
|
48
|
-
{}
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
38
|
def name
|
54
39
|
@name ||= begin
|
55
40
|
if git_url
|
@@ -90,18 +75,15 @@ module Dapp
|
|
90
75
|
self.class.tmp_base_dir
|
91
76
|
end
|
92
77
|
|
93
|
-
def
|
94
|
-
@
|
78
|
+
def build_path(*path)
|
79
|
+
@build_path ||= begin
|
95
80
|
if option_build_dir
|
96
81
|
Pathname.new(option_build_dir)
|
97
82
|
else
|
98
83
|
path('.dapp_build')
|
99
84
|
end.expand_path.tap(&:mkpath)
|
100
85
|
end
|
101
|
-
|
102
|
-
|
103
|
-
def build_path(*path)
|
104
|
-
make_path(build_dir, *path)
|
86
|
+
make_path(@build_path, *path)
|
105
87
|
end
|
106
88
|
|
107
89
|
def local_git_artifact_exclude_paths(&blk)
|
@@ -147,10 +129,6 @@ module Dapp
|
|
147
129
|
end
|
148
130
|
|
149
131
|
class << self
|
150
|
-
def home_dir
|
151
|
-
File.join(Dir.home, ".dapp")
|
152
|
-
end
|
153
|
-
|
154
132
|
def options
|
155
133
|
@options ||= {}
|
156
134
|
end
|
@@ -161,10 +139,14 @@ module Dapp
|
|
161
139
|
docker_bin = res.stdout.strip
|
162
140
|
|
163
141
|
current_docker_version = shellout!("#{docker_bin} --version").stdout.strip
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
142
|
+
required_min_docker_version = '1.10.0'
|
143
|
+
required_max_docker_version = '17.09.0'
|
144
|
+
|
145
|
+
if Gem::Version.new(required_min_docker_version) > Gem::Version.new(current_docker_version[/(\d+\.)+\d+/]) ||
|
146
|
+
Gem::Version.new(required_max_docker_version) < Gem::Version.new(current_docker_version[/(\d+\.)+\d+/])
|
147
|
+
raise Error::Dapp, code: :docker_version, data: { min_version: required_min_docker_version,
|
148
|
+
max_version: required_max_docker_version,
|
149
|
+
version: current_docker_version[/(\d+\.)+\d+/] }
|
168
150
|
end
|
169
151
|
|
170
152
|
[].tap do |cmd|
|
@@ -3,13 +3,11 @@ 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
|
-
@_name =
|
10
|
+
@_name = url.gsub(%r{.*?([^\/ ]+)\.git}, '\\1')
|
13
11
|
|
14
12
|
super(**kwargs, &blk)
|
15
13
|
end
|
@@ -5,20 +5,20 @@ module Dapp
|
|
5
5
|
module ChartCreate
|
6
6
|
def kube_chart_create
|
7
7
|
with_kube_tmp_chart_dir do
|
8
|
-
FileUtils.cp_r kube_chart_path,
|
8
|
+
FileUtils.cp_r kube_chart_path, kube_chart_path_for_helm(name) if kube_chart_path.directory? && !options[:force]
|
9
9
|
|
10
|
-
shellout!("helm create #{name}", cwd:
|
10
|
+
shellout!("helm create #{name}", cwd: kube_chart_path_for_helm)
|
11
11
|
kube_create_chart_samples
|
12
12
|
|
13
13
|
FileUtils.rm_rf kube_chart_path
|
14
|
-
FileUtils.mv
|
14
|
+
FileUtils.mv kube_chart_path_for_helm(name), kube_chart_path
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def kube_create_chart_samples
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
kube_chart_path_for_helm(name, 'secret-values.yaml').tap { |f| FileUtils.touch(f) unless f.file? }
|
20
|
+
kube_chart_path_for_helm(name, kube_chart_secret_dir_name).tap { |dir| FileUtils.mkdir(dir) unless dir.directory? }
|
21
|
+
kube_chart_path_for_helm(name, 'templates', '_envs.tpl').tap do |f|
|
22
22
|
f.write begin
|
23
23
|
<<-EOF
|
24
24
|
{{- define "common_envs" }}
|
@@ -39,7 +39,7 @@ module Dapp
|
|
39
39
|
EOF
|
40
40
|
end unless f.file?
|
41
41
|
end
|
42
|
-
|
42
|
+
kube_chart_path_for_helm(name, 'templates', 'backend.yaml').tap do |f|
|
43
43
|
f.write begin
|
44
44
|
<<-EOF
|
45
45
|
apiVersion: extensions/v1beta1
|
@@ -58,12 +58,14 @@ module Dapp
|
|
58
58
|
def with_kube_tmp_chart_dir
|
59
59
|
yield if block_given?
|
60
60
|
ensure
|
61
|
-
FileUtils.rm_rf(
|
61
|
+
FileUtils.rm_rf(@kube_tmp_helm_chart_dir) if @kube_tmp_helm_chart_dir
|
62
62
|
end
|
63
63
|
|
64
|
-
def
|
65
|
-
|
66
|
-
|
64
|
+
def kube_chart_path_for_helm(*path)
|
65
|
+
chart_dir = ENV['DAPP_HELM_CHART_DIR'] || begin
|
66
|
+
@kube_tmp_helm_chart_dir ||= Dir.mktmpdir('dapp-helm-chart-', tmp_base_dir)
|
67
|
+
end
|
68
|
+
make_path(chart_dir, *path).expand_path.tap { |p| p.parent.mkpath }
|
67
69
|
end
|
68
70
|
|
69
71
|
def secret
|
@@ -26,7 +26,7 @@ module Dapp
|
|
26
26
|
repo: repo,
|
27
27
|
image_version: image_version,
|
28
28
|
namespace: kube_namespace,
|
29
|
-
chart_path:
|
29
|
+
chart_path: kube_chart_path_for_helm,
|
30
30
|
set: self.options[:helm_set_options],
|
31
31
|
values: [*kube_values_paths, *kube_tmp_chart_secret_values_paths],
|
32
32
|
deploy_timeout: self.options[:timeout] || 300
|
@@ -38,7 +38,7 @@ module Dapp
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def kube_copy_chart
|
41
|
-
FileUtils.cp_r("#{kube_chart_path}/.",
|
41
|
+
FileUtils.cp_r("#{kube_chart_path}/.", kube_chart_path_for_helm)
|
42
42
|
end
|
43
43
|
|
44
44
|
def kube_helm_decode_secrets
|
@@ -89,10 +89,10 @@ module Dapp
|
|
89
89
|
{{- define "dapp_secret_file" -}}
|
90
90
|
{{- $relative_file_path := index . 0 -}}
|
91
91
|
{{- $context := index . 1 -}}
|
92
|
-
{{- $context.Files.Get (print "#{kube_tmp_chart_secret_path.subpath_of(
|
92
|
+
{{- $context.Files.Get (print "#{kube_tmp_chart_secret_path.subpath_of(kube_chart_path_for_helm)}/" $relative_file_path) -}}
|
93
93
|
{{- end -}}
|
94
94
|
EOF
|
95
|
-
|
95
|
+
kube_chart_path_for_helm('templates/_dapp_helpers.tpl').write(cont)
|
96
96
|
end
|
97
97
|
|
98
98
|
def kube_flush_hooks_jobs(release)
|
@@ -144,14 +144,7 @@ module Dapp
|
|
144
144
|
end
|
145
145
|
|
146
146
|
watch_hooks_thr = Thread.new do
|
147
|
-
watch_hooks.each {|job|
|
148
|
-
begin
|
149
|
-
Kubernetes::Manager::Job.new(self, job.name).watch_till_done!
|
150
|
-
rescue ::Exception => e
|
151
|
-
sentry_exception(e, extra: {"job-spec" => job.spec})
|
152
|
-
raise
|
153
|
-
end
|
154
|
-
}
|
147
|
+
watch_hooks.each {|job| Kubernetes::Manager::Job.new(self, job.name).watch_till_done!}
|
155
148
|
end
|
156
149
|
|
157
150
|
deployment_managers = release.deployments.values
|
@@ -180,7 +173,7 @@ module Dapp
|
|
180
173
|
end
|
181
174
|
|
182
175
|
def kube_tmp_chart_secret_path(*path)
|
183
|
-
|
176
|
+
kube_chart_path_for_helm('decoded-secret', *path).tap { |p| p.parent.mkpath }
|
184
177
|
end
|
185
178
|
|
186
179
|
def kube_values_paths
|
@@ -190,7 +183,7 @@ module Dapp
|
|
190
183
|
end
|
191
184
|
|
192
185
|
def kube_tmp_chart_secret_values_paths
|
193
|
-
@kube_tmp_chart_secret_values_paths ||= kube_secret_values_paths.map { |f|
|
186
|
+
@kube_tmp_chart_secret_values_paths ||= kube_secret_values_paths.each_with_index.map { |f, i| kube_chart_path_for_helm( "decoded-secret-values-#{i}.yaml") }
|
194
187
|
end
|
195
188
|
|
196
189
|
def kube_secret_values_paths
|
@@ -49,8 +49,8 @@ module Dapp
|
|
49
49
|
|
50
50
|
def deploy!
|
51
51
|
args = [
|
52
|
-
name, chart_path,
|
53
|
-
set_options,
|
52
|
+
name, chart_path, additional_values_options,
|
53
|
+
set_options, upgrade_extra_options
|
54
54
|
].flatten
|
55
55
|
|
56
56
|
dapp.kubernetes.create_namespace!(namespace) unless dapp.kubernetes.namespace?(namespace)
|
@@ -62,52 +62,31 @@ module Dapp
|
|
62
62
|
|
63
63
|
def evaluation_output
|
64
64
|
@evaluation_output ||= begin
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
65
|
+
cmd = dapp.shellout! [
|
66
|
+
"helm",
|
67
|
+
"template",
|
68
|
+
chart_path,
|
69
|
+
additional_values_options,
|
70
|
+
set_options,
|
71
|
+
("--namespace #{namespace}" if namespace),
|
72
|
+
].compact.join(" ")
|
73
|
+
|
74
|
+
cmd.stdout
|
71
75
|
end
|
72
76
|
end
|
73
77
|
|
74
78
|
def resources_specs
|
75
79
|
@resources_specs ||= {}.tap do |specs|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
hook_start_index = nil
|
84
|
-
if ind = evaluation_output.lines.index("HOOKS:\n")
|
85
|
-
hook_start_index = ind + 1
|
86
|
-
else
|
87
|
-
warn "[WARN][DEBUG INFO] Cannot find HOOKS section in helm dry-run output:"
|
88
|
-
end
|
89
|
-
|
90
|
-
manifest_start_index = nil
|
91
|
-
if ind = evaluation_output.lines.index("MANIFEST:\n")
|
92
|
-
manifest_start_index = ind + 1
|
93
|
-
else
|
94
|
-
warn "[WARN][DEBUG INFO] Cannot find MANIFEST section in helm dry-run output:"
|
95
|
-
end
|
96
|
-
|
97
|
-
happy_helming_start_index = evaluation_output.lines.index("Release \"#{name}\" has been upgraded. Happy Helming!\n")
|
98
|
-
|
99
|
-
generator.call(evaluation_output.lines[hook_start_index..manifest_start_index-2].join) if hook_start_index and manifest_start_index
|
100
|
-
if manifest_start_index
|
101
|
-
if happy_helming_start_index
|
102
|
-
generator.call(evaluation_output.lines[manifest_start_index..happy_helming_start_index-2].join)
|
103
|
-
else
|
104
|
-
generator.call(evaluation_output.lines[manifest_start_index..-1].join)
|
105
|
-
end
|
80
|
+
evaluation_output.split(/^---$/)
|
81
|
+
.reject {|chunk| chunk.lines.all? {|line| line.strip.empty? or line.strip.start_with? "#"}}
|
82
|
+
.map {|chunk| yaml_load(chunk)}.each do |spec|
|
83
|
+
specs[spec['kind']] ||= {}
|
84
|
+
specs[spec['kind']][(spec['metadata'] || {})['name']] = spec
|
106
85
|
end
|
107
86
|
end
|
108
87
|
end
|
109
88
|
|
110
|
-
def
|
89
|
+
def additional_values_options
|
111
90
|
[].tap do |options|
|
112
91
|
options.concat(values.map { |p| "--values #{p}" })
|
113
92
|
end
|
@@ -122,11 +101,11 @@ module Dapp
|
|
122
101
|
end
|
123
102
|
end
|
124
103
|
|
125
|
-
def
|
104
|
+
def upgrade_extra_options(dry_run: nil)
|
126
105
|
dry_run = dapp.dry_run? if dry_run.nil?
|
127
106
|
|
128
107
|
[].tap do |options|
|
129
|
-
options << "--namespace #{namespace}"
|
108
|
+
options << "--namespace #{namespace}" if namespace
|
130
109
|
options << '--install'
|
131
110
|
options << '--dry-run' if dry_run
|
132
111
|
options << '--debug' if dry_run
|
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.18.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: 2017-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -186,34 +186,6 @@ dependencies:
|
|
186
186
|
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: 1.0.6
|
189
|
-
- !ruby/object:Gem::Dependency
|
190
|
-
name: sentry-raven
|
191
|
-
requirement: !ruby/object:Gem::Requirement
|
192
|
-
requirements:
|
193
|
-
- - "~>"
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
version: 2.7.2
|
196
|
-
type: :runtime
|
197
|
-
prerelease: false
|
198
|
-
version_requirements: !ruby/object:Gem::Requirement
|
199
|
-
requirements:
|
200
|
-
- - "~>"
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
version: 2.7.2
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
name: toml-rb
|
205
|
-
requirement: !ruby/object:Gem::Requirement
|
206
|
-
requirements:
|
207
|
-
- - "~>"
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
version: 1.1.1
|
210
|
-
type: :runtime
|
211
|
-
prerelease: false
|
212
|
-
version_requirements: !ruby/object:Gem::Requirement
|
213
|
-
requirements:
|
214
|
-
- - "~>"
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
version: 1.1.1
|
217
189
|
- !ruby/object:Gem::Dependency
|
218
190
|
name: bundler
|
219
191
|
requirement: !ruby/object:Gem::Requirement
|
@@ -471,7 +443,6 @@ files:
|
|
471
443
|
- lib/dapp/dapp/logging/i18n.rb
|
472
444
|
- lib/dapp/dapp/logging/paint.rb
|
473
445
|
- lib/dapp/dapp/logging/process.rb
|
474
|
-
- lib/dapp/dapp/sentry.rb
|
475
446
|
- lib/dapp/dapp/shellout/base.rb
|
476
447
|
- lib/dapp/dapp/shellout/streaming.rb
|
477
448
|
- lib/dapp/dapp/ssh_agent.rb
|
@@ -668,7 +639,6 @@ files:
|
|
668
639
|
- lib/dapp/helper/sha256.rb
|
669
640
|
- lib/dapp/helper/tar.rb
|
670
641
|
- lib/dapp/helper/trivia.rb
|
671
|
-
- lib/dapp/helper/url.rb
|
672
642
|
- lib/dapp/helper/yaml.rb
|
673
643
|
- lib/dapp/kube.rb
|
674
644
|
- lib/dapp/kube/cli/cli.rb
|
@@ -736,7 +706,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
736
706
|
version: 2.5.0
|
737
707
|
requirements: []
|
738
708
|
rubyforge_project:
|
739
|
-
rubygems_version: 2.
|
709
|
+
rubygems_version: 2.7.0
|
740
710
|
signing_key:
|
741
711
|
specification_version: 4
|
742
712
|
summary: Build docker packaged apps using chef or shell
|
data/lib/dapp/dapp/sentry.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
class Dapp
|
3
|
-
module Sentry
|
4
|
-
def sentry_message(msg, **kwargs)
|
5
|
-
return if not ensure_sentry_configured
|
6
|
-
kwargs[:level] ||= "info"
|
7
|
-
Raven.capture_message(msg, _make_sentry_params(**kwargs))
|
8
|
-
end
|
9
|
-
|
10
|
-
def sentry_exception(exception, **kwargs)
|
11
|
-
return if not ensure_sentry_configured
|
12
|
-
(kwargs[:tags] ||= {})['error-code'] = begin
|
13
|
-
net_status = exception.net_status
|
14
|
-
[net_status[:context], net_status[:code]].compact.join('_')
|
15
|
-
end
|
16
|
-
Raven.capture_exception(exception, _make_sentry_params(**kwargs))
|
17
|
-
end
|
18
|
-
|
19
|
-
def ensure_sentry_configured
|
20
|
-
return false unless sentry_settings = settings["sentry"]
|
21
|
-
|
22
|
-
unless @sentry_settings_configured
|
23
|
-
Raven.configure do |config|
|
24
|
-
logger = ::Logger.new(STDOUT)
|
25
|
-
logger.level = ::Logger::WARN
|
26
|
-
|
27
|
-
config.logger = logger
|
28
|
-
config.dsn = sentry_settings["dsn"]
|
29
|
-
end
|
30
|
-
|
31
|
-
@sentry_settings_configured = true
|
32
|
-
end
|
33
|
-
|
34
|
-
return true
|
35
|
-
end
|
36
|
-
|
37
|
-
def _make_sentry_params(level: nil, tags: {}, extra: {}, user: {})
|
38
|
-
{
|
39
|
-
level: level,
|
40
|
-
tags: _sentry_tags_context.merge(tags),
|
41
|
-
extra: _sentry_extra_context.merge(extra),
|
42
|
-
user: _sentry_user_context.merge(user),
|
43
|
-
}
|
44
|
-
end
|
45
|
-
|
46
|
-
def _sentry_extra_context
|
47
|
-
@_sentry_extra_context ||= {
|
48
|
-
"pwd" => Dir.pwd,
|
49
|
-
"dapp-dir" => self.work_dir,
|
50
|
-
"options" => self.options,
|
51
|
-
"env-options" => {
|
52
|
-
"DAPP_FORCE_SAVE_CACHE" => ENV["DAPP_FORCE_SAVE_CACHE"],
|
53
|
-
"DAPP_BIN_DAPPFILE_YML" => ENV["DAPP_BIN_DAPPFILE_YML"],
|
54
|
-
"ANSIBLE_ARGS" => ENV["ANSIBLE_ARGS"],
|
55
|
-
"DAPP_CHEF_DEBUG" => ENV["DAPP_CHEF_DEBUG"],
|
56
|
-
},
|
57
|
-
}.tap {|extra|
|
58
|
-
extra["ci-env"] = {"CI" => ENV["CI"]}
|
59
|
-
ENV.select {|k, v| k.start_with?("CI_")}.each do |k, v|
|
60
|
-
extra["ci-env"][k] = v
|
61
|
-
end
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
def _sentry_tags_context
|
66
|
-
name = options[:name] ||
|
67
|
-
@_sentry_tags_context ||= {
|
68
|
-
"dapp-short-version" => ::Dapp::VERSION.split(".")[0..1].join("."),
|
69
|
-
"dapp-version" => ::Dapp::VERSION,
|
70
|
-
"dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
|
71
|
-
"dapp-command" => self.options[:dapp_command],
|
72
|
-
}.tap {|tags|
|
73
|
-
git_config_path = File.join(Dir.pwd, ".git/config")
|
74
|
-
|
75
|
-
tags["dapp-name"] = options[:name]
|
76
|
-
|
77
|
-
if File.exists? git_config_path
|
78
|
-
cfg = IniFile.load(File.join(Dir.pwd, ".git/config"))
|
79
|
-
remote_origin_cfg = cfg['remote "origin"']
|
80
|
-
remote_origin_url = remote_origin_cfg["url"]
|
81
|
-
if remote_origin_url
|
82
|
-
tags["dapp-name"] ||= begin
|
83
|
-
repo_name = remote_origin_url.split('/').last
|
84
|
-
repo_name = repo_name[/.*(?=\.git)/] if repo_name.end_with? '.git'
|
85
|
-
repo_name
|
86
|
-
end
|
87
|
-
|
88
|
-
tags["git-host"] = self.get_host_from_git_url(remote_origin_url)
|
89
|
-
|
90
|
-
git_name = self.git_url_to_name(remote_origin_url)
|
91
|
-
|
92
|
-
tags["git-group"] = git_name.partition("/")[0]
|
93
|
-
tags["git-name"] = git_name
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
tags["dapp-name"] ||= File.basename(Dir.pwd)
|
98
|
-
|
99
|
-
begin
|
100
|
-
ver = self.class.host_docker_minor_version
|
101
|
-
tags["docker-minor-version"] = ver.to_s
|
102
|
-
rescue ::Exception
|
103
|
-
end
|
104
|
-
}
|
105
|
-
end
|
106
|
-
|
107
|
-
def _sentry_user_context
|
108
|
-
@_sentry_user_context ||= {}
|
109
|
-
end
|
110
|
-
end # Sentry
|
111
|
-
end # Dapp
|
112
|
-
end # Dapp
|
data/lib/dapp/helper/url.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Helper
|
3
|
-
module Url
|
4
|
-
def git_url_to_name(url)
|
5
|
-
url_without_scheme = url.split("://", 2).last
|
6
|
-
# This may be broken, because "@" should delimit creds, not a ":"
|
7
|
-
url_without_creds = url_without_scheme.split(":", 2).last
|
8
|
-
url_without_creds.gsub(%r{.*?([^\/ ]+\/[^\/ ]+)\.git}, '\\1')
|
9
|
-
end
|
10
|
-
|
11
|
-
def get_host_from_git_url(url)
|
12
|
-
url_without_scheme = url.split("://", 2).last
|
13
|
-
url_without_creds = url_without_scheme.split("@", 2).last
|
14
|
-
|
15
|
-
# Split out part after ":" in this kind of url: github.com:flant/dapp.git
|
16
|
-
url_part = url_without_creds.split(":", 2).first
|
17
|
-
|
18
|
-
# Split out part after first "/": github.com/flant/dapp.git
|
19
|
-
url_part.split("/", 2).first
|
20
|
-
end
|
21
|
-
end # Url
|
22
|
-
end # Helper
|
23
|
-
end # Dapp
|