dapp 0.29.2 → 0.30.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 +1 -23
- data/config/en/net_status.yml +5 -4
- data/lib/dapp.rb +1 -1
- data/lib/dapp/dapp/sentry.rb +11 -8
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +33 -21
- data/lib/dapp/dimg/dimg/git_artifact.rb +2 -5
- data/lib/dapp/dimg/git_artifact.rb +41 -23
- data/lib/dapp/dimg/git_repo/base.rb +19 -39
- data/lib/dapp/dimg/git_repo/local.rb +15 -14
- data/lib/dapp/dimg/git_repo/remote.rb +32 -19
- data/lib/dapp/kube/cli/command/kube/deploy.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/dismiss.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/lint.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/render.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/value_get.rb +4 -0
- data/lib/dapp/kube/dapp/command/common.rb +21 -18
- data/lib/dapp/kube/dapp/command/minikube_setup.rb +6 -2
- data/lib/dapp/kube/helm/release.rb +1 -1
- data/lib/dapp/kube/helm/values.rb +3 -3
- data/lib/dapp/kube/kubernetes/client.rb +21 -90
- data/lib/dapp/kube/kubernetes/config.rb +129 -0
- data/lib/dapp/version.rb +1 -1
- metadata +6 -44
- data/lib/dapp/deployment/app.rb +0 -120
- data/lib/dapp/deployment/cli/cli.rb +0 -1
- data/lib/dapp/deployment/cli/command/base.rb +0 -14
- data/lib/dapp/deployment/cli/command/deployment.rb +0 -18
- data/lib/dapp/deployment/cli/command/deployment/apply.rb +0 -26
- data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +0 -13
- data/lib/dapp/deployment/config/config.rb +0 -46
- data/lib/dapp/deployment/config/directive/app.rb +0 -28
- data/lib/dapp/deployment/config/directive/app/instance_methods.rb +0 -51
- data/lib/dapp/deployment/config/directive/base.rb +0 -13
- data/lib/dapp/deployment/config/directive/deployment.rb +0 -11
- data/lib/dapp/deployment/config/directive/expose.rb +0 -68
- data/lib/dapp/deployment/config/directive/group.rb +0 -27
- data/lib/dapp/deployment/config/directive/job.rb +0 -28
- data/lib/dapp/deployment/config/directive/mod/group.rb +0 -22
- data/lib/dapp/deployment/config/directive/mod/jobs.rb +0 -26
- data/lib/dapp/deployment/config/directive/namespace.rb +0 -26
- data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +0 -37
- data/lib/dapp/deployment/core_ext/hash.rb +0 -19
- data/lib/dapp/deployment/dapp/command/apply.rb +0 -71
- data/lib/dapp/deployment/dapp/command/common.rb +0 -17
- data/lib/dapp/deployment/dapp/command/mrproper.rb +0 -12
- data/lib/dapp/deployment/dapp/dapp.rb +0 -15
- data/lib/dapp/deployment/dapp/dappfile.rb +0 -23
- data/lib/dapp/deployment/deployment.rb +0 -46
- data/lib/dapp/deployment/error/app.rb +0 -7
- data/lib/dapp/deployment/error/default.rb +0 -7
- data/lib/dapp/deployment/error/deployment.rb +0 -7
- data/lib/dapp/deployment/error/kubernetes.rb +0 -7
- data/lib/dapp/deployment/kube_app.rb +0 -146
- data/lib/dapp/deployment/kube_base.rb +0 -97
- data/lib/dapp/deployment/kube_deployment.rb +0 -51
- data/lib/dapp/deployment/kubernetes.rb +0 -174
- data/lib/dapp/deployment/kubernetes/error.rb +0 -20
- data/lib/dapp/deployment/mod/jobs.rb +0 -37
- data/lib/dapp/deployment/mod/namespace.rb +0 -58
- data/lib/dapp/deployment/mod/system_environments.rb +0 -30
- data/lib/dapp/deployment/secret.rb +0 -93
- data/lib/dapp/kube/error/kubernetes.rb +0 -7
@@ -1,20 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Deployment
|
3
|
-
module Kubernetes::Error
|
4
|
-
class Default < ::Dapp::Deployment::Error::Kubernetes
|
5
|
-
def initialize(**net_status)
|
6
|
-
super(**net_status, context: :kubernetes)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
class NotFound < Default
|
11
|
-
def initialize(**net_status)
|
12
|
-
super({code: :not_found}.merge(net_status))
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Timeout < Default; end
|
17
|
-
class ConnectionRefused < Default; end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Deployment
|
3
|
-
module Mod
|
4
|
-
module Jobs
|
5
|
-
[:bootstrap, :before_apply_job].each do |job|
|
6
|
-
define_method :"to_kube_#{job}_pods" do |repo, image_version|
|
7
|
-
to_kube_default_job_pods(job, repo, image_version)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def to_kube_default_job_pods(directive, repo, image_version)
|
12
|
-
return {} if (directive_config = config.public_send("_#{directive}")).empty?
|
13
|
-
{}.tap do |hash|
|
14
|
-
hash[name(directive)] = {}.tap do |pod|
|
15
|
-
pod['metadata'] = {}.tap do |metadata|
|
16
|
-
metadata['name'] = name(directive)
|
17
|
-
metadata['labels'] = kube.labels
|
18
|
-
end
|
19
|
-
pod['spec'] = {}.tap do |spec|
|
20
|
-
spec['restartPolicy'] = 'Never'
|
21
|
-
spec['containers'] = [].tap do |containers|
|
22
|
-
containers << {}.tap do |container|
|
23
|
-
container['imagePullPolicy'] = 'Always'
|
24
|
-
container['image'] = [repo, [directive_config._dimg || config._dimg, image_version].compact.join('-')].join(':')
|
25
|
-
container['name'] = name(directive)
|
26
|
-
container['command'] = directive_config._run unless directive_config._run.empty?
|
27
|
-
container['env'] = environments unless environments.empty?
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Deployment
|
3
|
-
module Mod
|
4
|
-
module Namespace
|
5
|
-
def environment
|
6
|
-
config._environment
|
7
|
-
.merge(namespace_config_directive(:_environment) || {})
|
8
|
-
.merge(system_environments)
|
9
|
-
end
|
10
|
-
|
11
|
-
def secret_environment
|
12
|
-
return {} if secret.nil?
|
13
|
-
config._secret_environment
|
14
|
-
.merge(namespace_config_directive(:_secret_environment) || {})
|
15
|
-
.each_with_object({}) { |(k, v), environments| environments[k] = secret.extract(v) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def environments
|
19
|
-
[environment, secret_environment]
|
20
|
-
.select { |env| !env.empty? }
|
21
|
-
.map { |h| h.map { |k, v| { 'name' => k.to_s, 'value' => v.to_s } } }
|
22
|
-
.flatten
|
23
|
-
end
|
24
|
-
|
25
|
-
def scale
|
26
|
-
namespace_config_directive(:_scale) || config._scale || 1
|
27
|
-
end
|
28
|
-
|
29
|
-
def namespace_config_directive(name)
|
30
|
-
return if namespace_config.nil?
|
31
|
-
namespace_config.send(name)
|
32
|
-
end
|
33
|
-
|
34
|
-
def namespace_config
|
35
|
-
@namespace_config = begin
|
36
|
-
error_class = Error.const_get(self.class.name.to_s.split('::').last)
|
37
|
-
if config._namespace.include?(namespace)
|
38
|
-
config._namespace[namespace]
|
39
|
-
elsif namespace.nil? || namespace == 'default'
|
40
|
-
if config._namespace.one?
|
41
|
-
config._namespace.values.first
|
42
|
-
elsif config._namespace.empty?
|
43
|
-
else
|
44
|
-
if namespace.nil?
|
45
|
-
raise error_class, code: :namespace_not_defined, data: { name: name }
|
46
|
-
else
|
47
|
-
raise error_class, code: :namespace_not_found, data: { namespace: namespace, name: name }
|
48
|
-
end
|
49
|
-
end
|
50
|
-
else
|
51
|
-
raise error_class, code: :namespace_not_found, data: { namespace: namespace, name: name }
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Deployment
|
3
|
-
module Mod
|
4
|
-
module SystemEnvironments
|
5
|
-
protected
|
6
|
-
|
7
|
-
def system_environments
|
8
|
-
@system_environments ||= begin
|
9
|
-
[namespace_system_env_name_prefix, system_env_name_prefix].each_with_object({}) do |prefix, environments|
|
10
|
-
ENV.map do |k, v|
|
11
|
-
if k.start_with?(prefix)
|
12
|
-
key = k.sub(prefix, '')
|
13
|
-
environments[key] = v unless environments.key?(key)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def namespace_system_env_name_prefix
|
21
|
-
[system_env_name_prefix, namespace.to_s.tr('-', '_').upcase].join('_')
|
22
|
-
end
|
23
|
-
|
24
|
-
def system_env_name_prefix
|
25
|
-
'DAPP_DEPLOYMENT'
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,93 +0,0 @@
|
|
1
|
-
module Dapp
|
2
|
-
module Deployment
|
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::Default
|
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
|