dapp 0.12.8 → 0.13.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/bin/dapp +0 -4
- data/config/en/common.yml +1 -0
- data/config/en/net_status.yml +5 -0
- data/lib/dapp.rb +20 -8
- data/lib/dapp/cli.rb +2 -5
- data/lib/dapp/cli/command/base.rb +1 -5
- data/lib/dapp/dapp.rb +0 -22
- data/lib/dapp/dapp/shellout/streaming.rb +2 -2
- data/lib/dapp/deployment/cli/command/deployment.rb +1 -3
- data/lib/dapp/deployment/cli/command/deployment/apply.rb +1 -1
- data/lib/dapp/deployment/dapp/dapp.rb +0 -2
- 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/dimg.rb +1 -0
- data/lib/dapp/dimg/dimg/path.rb +0 -6
- data/lib/dapp/helper/trivia.rb +4 -0
- data/lib/dapp/kube.rb +1 -0
- data/lib/dapp/kube/cli/cli.rb +1 -0
- data/lib/dapp/kube/cli/command/base.rb +14 -0
- data/lib/dapp/kube/cli/command/kube.rb +21 -0
- data/lib/dapp/kube/cli/command/kube/deploy.rb +30 -0
- data/lib/dapp/kube/cli/command/kube/dismiss.rb +21 -0
- data/lib/dapp/kube/cli/command/kube/secret_file_encrypt.rb +23 -0
- data/lib/dapp/kube/cli/command/kube/secret_generate.rb +13 -0
- data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +13 -0
- data/lib/dapp/kube/dapp/command/common.rb +29 -0
- data/lib/dapp/kube/dapp/command/deploy.rb +192 -0
- data/lib/dapp/kube/dapp/command/dismiss.rb +25 -0
- data/lib/dapp/kube/dapp/command/secret_file_encrypt.rb +22 -0
- data/lib/dapp/{deployment → kube}/dapp/command/secret_generate.rb +3 -3
- data/lib/dapp/{deployment → kube}/dapp/command/secret_key_generate.rb +2 -2
- data/lib/dapp/kube/dapp/dapp.rb +16 -0
- data/lib/dapp/kube/error/base.rb +7 -0
- data/lib/dapp/kube/error/command.rb +7 -0
- data/lib/dapp/kube/kubernetes.rb +191 -0
- data/lib/dapp/kube/secret.rb +93 -0
- data/lib/dapp/version.rb +1 -1
- metadata +23 -37
- data/lib/dapp/dapp/sentry.rb +0 -112
- data/lib/dapp/deployment/cli/command/deployment/secret_generate.rb +0 -13
- data/lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb +0 -13
- data/lib/dapp/helper/url.rb +0 -23
@@ -0,0 +1,93 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Kube
|
3
|
+
class Secret
|
4
|
+
attr_reader :key
|
5
|
+
|
6
|
+
def initialize(key)
|
7
|
+
self.class._validate_key!(key)
|
8
|
+
@key = key
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate(value)
|
12
|
+
cipher = self.class._openssl_cipher
|
13
|
+
cipher.encrypt
|
14
|
+
cipher.key = self.class._hex_to_binary key
|
15
|
+
iv = cipher.random_iv
|
16
|
+
|
17
|
+
iv_size_prefix = [iv.bytesize].pack('S')
|
18
|
+
encrypted = cipher.update(value.to_s) + cipher.final
|
19
|
+
|
20
|
+
self.class._binary_to_hex "#{iv_size_prefix}#{iv}#{encrypted}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def extract(hexdata)
|
24
|
+
data = self.class._hex_to_binary hexdata.to_s
|
25
|
+
|
26
|
+
iv_size = data.unpack('S').first
|
27
|
+
data = data.byteslice(2..-1)
|
28
|
+
raise ExtractionError, code: :bad_data, data: {data: hexdata} unless data
|
29
|
+
|
30
|
+
iv = data.byteslice(0, iv_size)
|
31
|
+
data = data.byteslice(iv_size..-1)
|
32
|
+
raise ExtractionError, code: :bad_data, data: {data: hexdata} unless data
|
33
|
+
|
34
|
+
decipher = self.class._openssl_cipher
|
35
|
+
decipher.decrypt
|
36
|
+
decipher.key = self.class._hex_to_binary(key)
|
37
|
+
|
38
|
+
begin
|
39
|
+
decipher.iv = iv
|
40
|
+
rescue OpenSSL::Cipher::CipherError
|
41
|
+
raise ExtractionError, code: :bad_data, data: {data: hexdata}
|
42
|
+
end
|
43
|
+
|
44
|
+
begin
|
45
|
+
value = decipher.update(data) + decipher.final
|
46
|
+
rescue OpenSSL::Cipher::CipherError
|
47
|
+
raise ExtractionError, code: :bad_data, data: {data: hexdata}
|
48
|
+
end
|
49
|
+
value.force_encoding('utf-8')
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
def generate_key
|
54
|
+
_binary_to_hex _openssl_cipher.random_key
|
55
|
+
end
|
56
|
+
|
57
|
+
def _openssl_cipher
|
58
|
+
OpenSSL::Cipher::AES.new(128, :CBC)
|
59
|
+
end
|
60
|
+
|
61
|
+
def _hex_to_binary(key)
|
62
|
+
[key].pack('H*')
|
63
|
+
end
|
64
|
+
|
65
|
+
def _binary_to_hex(key)
|
66
|
+
key.unpack('H*').first
|
67
|
+
end
|
68
|
+
|
69
|
+
def _validate_key!(key)
|
70
|
+
# Требуется 128 битный ключ — это 16 байт.
|
71
|
+
# Ключ закодирован в hex кодировке для пользователя.
|
72
|
+
# 2 hex символа на 1 байт в hex кодировке.
|
73
|
+
# Поэтому требуется длина ключа в hex кодировке в 32 символа.
|
74
|
+
if key.bytesize < 32
|
75
|
+
raise InvalidKeyError, code: :key_length_too_short, data: {required_size: 32}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class Error < ::Dapp::Deployment::Error::Base
|
81
|
+
def initialize(**net_status)
|
82
|
+
super(net_status.merge(context: :secret))
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class InvalidKeyError < Error
|
87
|
+
end
|
88
|
+
|
89
|
+
class ExtractionError < Error
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
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.13.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-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -166,34 +166,6 @@ dependencies:
|
|
166
166
|
- - "~>"
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: 0.1.6
|
169
|
-
- !ruby/object:Gem::Dependency
|
170
|
-
name: sentry-raven
|
171
|
-
requirement: !ruby/object:Gem::Requirement
|
172
|
-
requirements:
|
173
|
-
- - "~>"
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: 2.7.2
|
176
|
-
type: :runtime
|
177
|
-
prerelease: false
|
178
|
-
version_requirements: !ruby/object:Gem::Requirement
|
179
|
-
requirements:
|
180
|
-
- - "~>"
|
181
|
-
- !ruby/object:Gem::Version
|
182
|
-
version: 2.7.2
|
183
|
-
- !ruby/object:Gem::Dependency
|
184
|
-
name: toml-rb
|
185
|
-
requirement: !ruby/object:Gem::Requirement
|
186
|
-
requirements:
|
187
|
-
- - "~>"
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 1.1.1
|
190
|
-
type: :runtime
|
191
|
-
prerelease: false
|
192
|
-
version_requirements: !ruby/object:Gem::Requirement
|
193
|
-
requirements:
|
194
|
-
- - "~>"
|
195
|
-
- !ruby/object:Gem::Version
|
196
|
-
version: 1.1.1
|
197
169
|
- !ruby/object:Gem::Dependency
|
198
170
|
name: bundler
|
199
171
|
requirement: !ruby/object:Gem::Requirement
|
@@ -448,7 +420,6 @@ files:
|
|
448
420
|
- lib/dapp/dapp/logging/i18n.rb
|
449
421
|
- lib/dapp/dapp/logging/paint.rb
|
450
422
|
- lib/dapp/dapp/logging/process.rb
|
451
|
-
- lib/dapp/dapp/sentry.rb
|
452
423
|
- lib/dapp/dapp/shellout/base.rb
|
453
424
|
- lib/dapp/dapp/shellout/streaming.rb
|
454
425
|
- lib/dapp/dapp/ssh_agent.rb
|
@@ -460,8 +431,6 @@ files:
|
|
460
431
|
- lib/dapp/deployment/cli/command/deployment/apply.rb
|
461
432
|
- lib/dapp/deployment/cli/command/deployment/minikube_setup.rb
|
462
433
|
- lib/dapp/deployment/cli/command/deployment/mrproper.rb
|
463
|
-
- lib/dapp/deployment/cli/command/deployment/secret_generate.rb
|
464
|
-
- lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb
|
465
434
|
- lib/dapp/deployment/config/config.rb
|
466
435
|
- lib/dapp/deployment/config/directive/app.rb
|
467
436
|
- lib/dapp/deployment/config/directive/app/instance_methods.rb
|
@@ -479,8 +448,6 @@ files:
|
|
479
448
|
- lib/dapp/deployment/dapp/command/common.rb
|
480
449
|
- lib/dapp/deployment/dapp/command/minikube_setup.rb
|
481
450
|
- lib/dapp/deployment/dapp/command/mrproper.rb
|
482
|
-
- lib/dapp/deployment/dapp/command/secret_generate.rb
|
483
|
-
- lib/dapp/deployment/dapp/command/secret_key_generate.rb
|
484
451
|
- lib/dapp/deployment/dapp/dapp.rb
|
485
452
|
- lib/dapp/deployment/dapp/dappfile.rb
|
486
453
|
- lib/dapp/deployment/deployment.rb
|
@@ -649,7 +616,26 @@ files:
|
|
649
616
|
- lib/dapp/helper/net_status.rb
|
650
617
|
- lib/dapp/helper/sha256.rb
|
651
618
|
- lib/dapp/helper/trivia.rb
|
652
|
-
- lib/dapp/
|
619
|
+
- lib/dapp/kube.rb
|
620
|
+
- lib/dapp/kube/cli/cli.rb
|
621
|
+
- lib/dapp/kube/cli/command/base.rb
|
622
|
+
- lib/dapp/kube/cli/command/kube.rb
|
623
|
+
- lib/dapp/kube/cli/command/kube/deploy.rb
|
624
|
+
- lib/dapp/kube/cli/command/kube/dismiss.rb
|
625
|
+
- lib/dapp/kube/cli/command/kube/secret_file_encrypt.rb
|
626
|
+
- lib/dapp/kube/cli/command/kube/secret_generate.rb
|
627
|
+
- lib/dapp/kube/cli/command/kube/secret_key_generate.rb
|
628
|
+
- lib/dapp/kube/dapp/command/common.rb
|
629
|
+
- lib/dapp/kube/dapp/command/deploy.rb
|
630
|
+
- lib/dapp/kube/dapp/command/dismiss.rb
|
631
|
+
- lib/dapp/kube/dapp/command/secret_file_encrypt.rb
|
632
|
+
- lib/dapp/kube/dapp/command/secret_generate.rb
|
633
|
+
- lib/dapp/kube/dapp/command/secret_key_generate.rb
|
634
|
+
- lib/dapp/kube/dapp/dapp.rb
|
635
|
+
- lib/dapp/kube/error/base.rb
|
636
|
+
- lib/dapp/kube/error/command.rb
|
637
|
+
- lib/dapp/kube/kubernetes.rb
|
638
|
+
- lib/dapp/kube/secret.rb
|
653
639
|
- lib/dapp/prctl.rb
|
654
640
|
- lib/dapp/version.rb
|
655
641
|
homepage: https://github.com/flant/dapp
|
@@ -672,7 +658,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
672
658
|
version: 2.5.0
|
673
659
|
requirements: []
|
674
660
|
rubyforge_project:
|
675
|
-
rubygems_version: 2.
|
661
|
+
rubygems_version: 2.4.8
|
676
662
|
signing_key:
|
677
663
|
specification_version: 4
|
678
664
|
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
|