dapp 0.13.3 → 0.13.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/bin/dapp +0 -13
  3. data/config/en/common.yml +4 -2
  4. data/config/en/net_status.yml +15 -3
  5. data/lib/dapp.rb +11 -6
  6. data/lib/dapp/cli.rb +1 -1
  7. data/lib/dapp/cli/command/base.rb +4 -4
  8. data/lib/dapp/config/directive/base.rb +4 -2
  9. data/lib/dapp/core_ext/hash.rb +14 -0
  10. data/lib/dapp/dapp.rb +32 -6
  11. data/lib/dapp/dapp/dapp_config.rb +85 -0
  12. data/lib/dapp/dapp/dappfile.rb +4 -0
  13. data/lib/dapp/dapp/deps/base.rb +2 -2
  14. data/lib/dapp/dapp/deps/gitartifact.rb +2 -2
  15. data/lib/dapp/dapp/logging/base.rb +5 -5
  16. data/lib/dapp/dapp/logging/process.rb +5 -7
  17. data/lib/dapp/dapp/shellout/base.rb +16 -17
  18. data/lib/dapp/deployment/cli/command/deployment.rb +2 -3
  19. data/lib/dapp/deployment/dapp/command/apply.rb +6 -6
  20. data/lib/dapp/deployment/dapp/dapp.rb +0 -1
  21. data/lib/dapp/deployment/kube_app.rb +1 -1
  22. data/lib/dapp/deployment/kube_base.rb +1 -1
  23. data/lib/dapp/dimg/build/stage/artifact_base.rb +3 -8
  24. data/lib/dapp/dimg/build/stage/base.rb +57 -38
  25. data/lib/dapp/dimg/build/stage/docker_instructions.rb +1 -1
  26. data/lib/dapp/dimg/build/stage/from.rb +6 -2
  27. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +2 -2
  28. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  29. data/lib/dapp/dimg/build/stage/ga_base.rb +1 -14
  30. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +7 -31
  31. data/lib/dapp/dimg/build/stage/ga_related_dependencies_base.rb +21 -0
  32. data/lib/dapp/dimg/build/stage/import_artifact.rb +10 -3
  33. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +3 -3
  34. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +3 -3
  35. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  36. data/lib/dapp/dimg/build/stage/mod/logging.rb +7 -20
  37. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +1 -1
  38. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +3 -3
  39. data/lib/dapp/dimg/builder/chef.rb +2 -2
  40. data/lib/dapp/dimg/builder/chef/cookbook.rb +2 -2
  41. data/lib/dapp/dimg/cli/command/dimg.rb +1 -1
  42. data/lib/dapp/dimg/cli/command/dimg/build.rb +15 -8
  43. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -4
  44. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +1 -1
  45. data/lib/dapp/dimg/config/directive/dimg/validation.rb +6 -1
  46. data/lib/dapp/dimg/config/directive/docker/base.rb +1 -2
  47. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +3 -0
  48. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +1 -1
  49. data/lib/dapp/dimg/config/directive/mount.rb +9 -1
  50. data/lib/dapp/dimg/dapp/command/build_context/export.rb +13 -15
  51. data/lib/dapp/dimg/dapp/command/build_context/import.rb +3 -3
  52. data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
  53. data/lib/dapp/dimg/dapp/command/common.rb +17 -6
  54. data/lib/dapp/dimg/dapp/command/mrproper.rb +9 -4
  55. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +19 -17
  56. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +1 -1
  57. data/lib/dapp/dimg/dimg.rb +5 -5
  58. data/lib/dapp/dimg/dimg/git_artifact.rb +11 -6
  59. data/lib/dapp/dimg/dimg/path.rb +2 -6
  60. data/lib/dapp/dimg/git_artifact.rb +118 -66
  61. data/lib/dapp/dimg/git_repo/base.rb +1 -1
  62. data/lib/dapp/dimg/git_repo/own.rb +1 -1
  63. data/lib/dapp/dimg/git_repo/remote.rb +23 -14
  64. data/lib/dapp/dimg/image/docker.rb +11 -11
  65. data/lib/dapp/dimg/image/scratch.rb +33 -9
  66. data/lib/dapp/dimg/image/stage.rb +3 -3
  67. data/lib/dapp/helper/cli.rb +8 -0
  68. data/lib/dapp/helper/tar.rb +31 -0
  69. data/lib/dapp/kube/cli/command/kube.rb +5 -4
  70. data/lib/dapp/kube/cli/command/kube/deploy.rb +5 -0
  71. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +13 -0
  72. data/lib/dapp/kube/cli/command/kube/{secret_file_encrypt.rb → secret_extract.rb} +3 -3
  73. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +11 -1
  74. data/lib/dapp/kube/client.rb +1 -1
  75. data/lib/dapp/kube/client/error.rb +1 -1
  76. data/lib/dapp/kube/dapp/command/common.rb +29 -4
  77. data/lib/dapp/kube/dapp/command/deploy.rb +43 -21
  78. data/lib/dapp/kube/dapp/command/dismiss.rb +1 -1
  79. data/lib/dapp/{deployment → kube}/dapp/command/minikube_setup.rb +12 -12
  80. data/lib/dapp/kube/dapp/command/secret_extract.rb +46 -0
  81. data/lib/dapp/kube/dapp/command/secret_generate.rb +33 -4
  82. data/lib/dapp/kube/dapp/dapp.rb +3 -2
  83. data/lib/dapp/kube/error/kubernetes.rb +7 -0
  84. data/lib/dapp/kube/secret.rb +1 -1
  85. data/lib/dapp/version.rb +2 -2
  86. metadata +11 -7
  87. data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +0 -13
  88. data/lib/dapp/kube/dapp/command/secret_file_encrypt.rb +0 -22
@@ -83,7 +83,7 @@ module Dapp
83
83
  protected
84
84
 
85
85
  def git(**kwargs)
86
- @git ||= Rugged::Repository.new(path, **kwargs)
86
+ @git ||= Rugged::Repository.new(path.to_s, **kwargs)
87
87
  end
88
88
 
89
89
  private
@@ -11,7 +11,7 @@ module Dapp
11
11
  end
12
12
 
13
13
  def path
14
- @path ||= Rugged::Repository.discover(dimg.home_path.to_s).path
14
+ @path ||= Pathname(Rugged::Repository.discover(dimg.home_path.to_s).path)
15
15
  rescue Rugged::RepositoryError => _e
16
16
  raise Error::Rugged, code: :local_git_repository_does_not_exist
17
17
  end
@@ -2,6 +2,8 @@ module Dapp
2
2
  module Dimg
3
3
  module GitRepo
4
4
  class Remote < Base
5
+ attr_reader :url
6
+
5
7
  def initialize(dimg, name, url:)
6
8
  super(dimg, name)
7
9
 
@@ -9,24 +11,21 @@ module Dapp
9
11
 
10
12
  dimg.dapp.log_secondary_process(dimg.dapp.t(code: 'process.git_artifact_clone', data: { url: url }), short: true) do
11
13
  begin
12
- Rugged::Repository.clone_at(url, path, bare: true, credentials: _rugged_credentials)
14
+ if [:https, :ssh].include?(protocol) && !Rugged.features.include?(protocol)
15
+ raise Error::Rugged, code: :rugged_protocol_not_supported, data: { url: url, protocol: protocol }
16
+ end
17
+
18
+ Rugged::Repository.clone_at(url, path.to_s, bare: true, credentials: _rugged_credentials)
13
19
  rescue Rugged::NetworkError, Rugged::SslError => e
14
20
  raise Error::Rugged, code: :rugged_remote_error, data: { message: e.message, url: url }
15
21
  end
16
- end unless File.directory?(path)
22
+ end unless path.directory?
17
23
  end
18
24
 
19
25
  def _rugged_credentials
20
26
  @_rugged_credentials ||= begin
21
- ssh_url = begin
22
- URI.parse(@url)
23
- false
24
- rescue URI::InvalidURIError
25
- true
26
- end
27
-
28
- if ssh_url
29
- host_with_user = @url.split(':', 2).first
27
+ if protocol == :ssh
28
+ host_with_user = url.split(':', 2).first
30
29
  username = host_with_user.split('@', 2).reverse.last
31
30
  Rugged::Credentials::SshKeyFromAgent.new(username: username)
32
31
  end
@@ -34,7 +33,7 @@ module Dapp
34
33
  end
35
34
 
36
35
  def path
37
- dimg.build_path('git_repo_remote', name, Digest::MD5.hexdigest(@url)).to_s
36
+ Pathname(dimg.build_path('git_repo_remote', name, Digest::MD5.hexdigest(url)).to_s)
38
37
  end
39
38
 
40
39
  def fetch!(branch = nil)
@@ -61,8 +60,6 @@ module Dapp
61
60
 
62
61
  protected
63
62
 
64
- attr_reader :url
65
-
66
63
  def git
67
64
  super(bare: true, credentials: _rugged_credentials)
68
65
  end
@@ -72,6 +69,18 @@ module Dapp
72
69
  def branch_format(name)
73
70
  "origin/#{name.reverse.chomp('origin/'.reverse).reverse}"
74
71
  end
72
+
73
+ def protocol
74
+ @protocol ||= begin
75
+ if (scheme = URI.parse(url).scheme).nil?
76
+ :noname
77
+ else
78
+ scheme
79
+ end
80
+ rescue URI::InvalidURIError
81
+ :ssh
82
+ end
83
+ end
75
84
  end
76
85
  end
77
86
  end
@@ -22,21 +22,21 @@ module Dapp
22
22
 
23
23
  def untag!
24
24
  raise Error::Build, code: :image_already_untagged, data: { name: name } unless tagged?
25
- dapp.shellout!("docker rmi #{name}")
25
+ dapp.shellout!("#{dapp.host_docker_bin} rmi #{name}")
26
26
  cache_reset
27
27
  end
28
28
 
29
29
  def push!
30
30
  raise Error::Build, code: :image_not_exist, data: { name: name } unless tagged?
31
31
  dapp.log_secondary_process(dapp.t(code: 'process.image_push', data: { name: name })) do
32
- dapp.shellout!("docker push #{name}", log_verbose: true)
32
+ dapp.shellout!("#{dapp.host_docker_bin} push #{name}", verbose: true)
33
33
  end
34
34
  end
35
35
 
36
36
  def pull!
37
37
  return if tagged?
38
38
  dapp.log_secondary_process(dapp.t(code: 'process.image_pull', data: { name: name })) do
39
- dapp.shellout!("docker pull #{name}", log_verbose: true)
39
+ dapp.shellout!("#{dapp.host_docker_bin} pull #{name}", verbose: true)
40
40
  end
41
41
  cache_reset
42
42
  end
@@ -56,7 +56,7 @@ module Dapp
56
56
  end
57
57
 
58
58
  def self.image_config_option(image_id:, option:)
59
- output = ::Dapp::Dapp.shellout!("docker inspect --format='{{json .Config.#{option.to_s.capitalize}}}' #{image_id}").stdout.strip
59
+ output = ::Dapp::Dapp.shellout!("#{::Dapp::Dapp.host_docker_bin} inspect --format='{{json .Config.#{option.to_s.capitalize}}}' #{image_id}").stdout.strip
60
60
  output == 'null' ? [] : JSON.parse(output)
61
61
  end
62
62
 
@@ -87,18 +87,18 @@ module Dapp
87
87
  !(/^#{tag_format}$/ =~ name).nil?
88
88
  end
89
89
 
90
- def tag!(id:, tag:)
91
- ::Dapp::Dapp.shellout!("docker tag #{id} #{tag}")
90
+ def tag!(id:, tag:, verbose: false, quiet: false)
91
+ ::Dapp::Dapp.shellout!("#{::Dapp::Dapp.host_docker_bin} tag #{id} #{tag}", verbose: verbose, quiet: quiet)
92
92
  cache_reset
93
93
  end
94
94
 
95
- def save!(image_or_images, file_path)
95
+ def save!(image_or_images, file_path, verbose: false, quiet: false)
96
96
  images = Array(image_or_images).join(' ')
97
- ::Dapp::Dapp.shellout!("docker save -o #{file_path} #{images}", log_verbose: true)
97
+ ::Dapp::Dapp.shellout!("#{::Dapp::Dapp.host_docker_bin} save -o #{file_path} #{images}", verbose: verbose, quiet: quiet)
98
98
  end
99
99
 
100
- def load!(file_path)
101
- ::Dapp::Dapp.shellout!("docker load -i #{file_path}", log_verbose: true)
100
+ def load!(file_path, verbose: false, quiet: false)
101
+ ::Dapp::Dapp.shellout!("#{::Dapp::Dapp.host_docker_bin} load -i #{file_path}", verbose: verbose, quiet: quiet)
102
102
  end
103
103
 
104
104
  def cache
@@ -107,7 +107,7 @@ module Dapp
107
107
 
108
108
  def cache_reset(name = '')
109
109
  cache.delete(name)
110
- ::Dapp::Dapp.shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}")
110
+ ::Dapp::Dapp.shellout!("#{::Dapp::Dapp.host_docker_bin} images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}")
111
111
  .stdout
112
112
  .lines
113
113
  .each do |l|
@@ -2,6 +2,8 @@ module Dapp
2
2
  module Dimg
3
3
  module Image
4
4
  class Scratch < Stage
5
+ include Helper::Tar
6
+
5
7
  def initialize(**_kwargs)
6
8
  super
7
9
  @from_archives = []
@@ -12,20 +14,42 @@ module Dapp
12
14
  end
13
15
 
14
16
  def build!(**_kwargs)
15
- raise
16
-
17
- # FIXME: system-shellout rejected
18
- # build_from_command = if from_archives.empty?
19
- # "#{dapp.tar_bin} c --files-from /dev/null"
20
- # else
21
- # "#{dapp.cat_bin} #{from_archives.join(' ')}"
22
- # end
23
- # @built_id = dapp.system_shellout!("#{build_from_command} | docker import #{prepared_change} - ").stdout.strip
17
+ @built_id = dapp.shellout!("docker import #{prepared_change} #{archive}").stdout.strip
18
+ ensure
19
+ FileUtils.rm_rf(tmp_path)
24
20
  end
25
21
 
26
22
  protected
27
23
 
28
24
  attr_accessor :from_archives
25
+
26
+ def archive
27
+ tmp_path('archive.tar').tap do |archive_path|
28
+ tar_write(archive_path) do |common_tar|
29
+ from_archives.each do |from_archive|
30
+ tar_gz_read(from_archive) do |tar|
31
+ tar.each_entry do |entry|
32
+ mode = entry.header.mode
33
+ path = entry.full_name
34
+
35
+ if entry.directory?
36
+ common_tar.mkdir path, mode
37
+ else
38
+ common_tar.add_file path, mode do |tf|
39
+ tf.write entry.read
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def tmp_path(*path)
50
+ @tmp_path ||= Dir.mktmpdir('dapp-scratch-', dapp.tmp_base_dir)
51
+ dapp.make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
52
+ end
29
53
  end # Stage
30
54
  end # Image
31
55
  end # Dimg
@@ -25,7 +25,7 @@ module Dapp
25
25
  run!
26
26
  @built_id = commit!
27
27
  ensure
28
- dapp.shellout("docker rm #{container_name}")
28
+ dapp.shellout("#{dapp.host_docker_bin} rm #{container_name}")
29
29
  end
30
30
 
31
31
  def built?
@@ -70,7 +70,7 @@ module Dapp
70
70
 
71
71
  def run!
72
72
  raise Error::Build, code: :built_id_not_defined if from.built_id.nil?
73
- dapp.shellout!("docker run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'", log_verbose: true)
73
+ dapp.shellout!("#{dapp.host_docker_bin} run #{prepared_options} #{from.built_id} -ec '#{prepared_bash_command}'", verbose: true)
74
74
  rescue ::Dapp::Error::Shellout => error
75
75
  dapp.log_warning(desc: { code: :launched_command, data: { command: prepared_commands.join(' && ') }, context: :container })
76
76
 
@@ -83,7 +83,7 @@ module Dapp
83
83
  end
84
84
 
85
85
  def commit!
86
- dapp.shellout!("docker commit #{prepared_change} #{container_name}").stdout.strip
86
+ dapp.shellout!("#{dapp.host_docker_bin} commit #{prepared_change} #{container_name}").stdout.strip
87
87
  end
88
88
 
89
89
  def clone!(name)
@@ -69,6 +69,14 @@ module Dapp
69
69
  @composite_options ||= {}
70
70
  @composite_options[opt] ||= []
71
71
  end
72
+
73
+ def in_validate!(v, list)
74
+ raise OptionParser::InvalidArgument, "`#{v}` is not included in the list [#{list_msg_format(list)}]" unless list.include?(v)
75
+ end
76
+
77
+ def list_msg_format(list)
78
+ list.map { |s| "'#{s}'"}.join(', ')
79
+ end
72
80
  end
73
81
  end # Helper
74
82
  end # Dapp
@@ -0,0 +1,31 @@
1
+ module Dapp
2
+ module Helper
3
+ module Tar
4
+ def tar_write(path)
5
+ File.open(path, File::RDWR | File::CREAT) do |f|
6
+ Gem::Package::TarWriter.new(f) do |tar|
7
+ yield tar if block_given?
8
+ end
9
+ end
10
+ end
11
+
12
+ def tar_read(path)
13
+ File.open(path, File::RDONLY) do |f|
14
+ Gem::Package::TarReader.new(f) do |tar|
15
+ yield tar if block_given?
16
+ end
17
+ end
18
+ end
19
+
20
+ def tar_gz_read(path)
21
+ File.open(path, File::RDONLY) do |f_gz|
22
+ Zlib::GzipReader.wrap(f_gz) do |f|
23
+ Gem::Package::TarReader.new(f) do |tar|
24
+ yield tar if block_given?
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end # Tar
30
+ end # Helper
31
+ end # Dapp
@@ -1,18 +1,19 @@
1
1
  module Dapp::Kube::CLI
2
2
  module Command
3
3
  class Kube < ::Dapp::CLI
4
- SUBCOMMANDS = ['secret generate', 'secret key generate', 'secret file encrypt', 'deploy', 'dismiss'].freeze
4
+ SUBCOMMANDS = ['secret generate', 'secret key generate', 'deploy', 'dismiss', 'secret extract', 'minikube setup'].freeze
5
5
 
6
6
  banner <<BANNER.freeze
7
- Usage: dapp kube sub-command [sub-command options]
7
+ Usage: dapp kube subcommand [subcommand options]
8
8
 
9
9
  Available subcommands: (for details, dapp kube SUB-COMMAND --help)
10
10
 
11
11
  dapp kube deploy [options] REPO
12
12
  dapp kube dismiss [options]
13
- dapp kube secret generate [options]
14
13
  dapp kube secret key generate [options]
15
- dapp kube secret file encrypt FILE_PATH [options]
14
+ dapp kube secret generate [FILE_PATH] [options]
15
+ dapp kube secret extract [FILE_PATH] [options]
16
+ dapp kube minikube setup
16
17
 
17
18
  Options:
18
19
  BANNER
@@ -30,6 +30,11 @@ BANNER
30
30
  default: [],
31
31
  proc: proc { |v| composite_options(:helm_values) << v }
32
32
 
33
+ option :helm_secret_values_options,
34
+ long: '--secret-values FILE_PATH',
35
+ default: [],
36
+ proc: proc { |v| composite_options(:helm_secret_values) << v }
37
+
33
38
  def run(argv = ARGV)
34
39
  self.class.parse_options(self, argv)
35
40
  repo = self.class.required_argument(self, 'repo')
@@ -0,0 +1,13 @@
1
+ module Dapp::Kube::CLI::Command
2
+ class Kube < ::Dapp::CLI
3
+ class MinikubeSetup < Base
4
+ banner <<BANNER.freeze
5
+ Usage:
6
+
7
+ dapp kube minikube setup
8
+
9
+ Options:
10
+ BANNER
11
+ end
12
+ end
13
+ end
@@ -1,10 +1,10 @@
1
1
  module Dapp::Kube::CLI::Command
2
2
  class Kube < ::Dapp::CLI
3
- class SecretFileEncrypt < Base
3
+ class SecretExtract < Base
4
4
  banner <<BANNER.freeze
5
5
  Usage:
6
6
 
7
- dapp kube secret file encrypt FILE [options]
7
+ dapp kube secret extract [FILE_PATH] [options]
8
8
 
9
9
  Options:
10
10
  BANNER
@@ -15,7 +15,7 @@ BANNER
15
15
 
16
16
  def run(argv = ARGV)
17
17
  self.class.parse_options(self, argv)
18
- file_path = self.class.required_argument(self, 'file')
18
+ file_path = cli_arguments.empty? ? nil : cli_arguments.first
19
19
  ::Dapp::Dapp.new(options: cli_options).public_send(run_method, file_path)
20
20
  end
21
21
  end
@@ -4,10 +4,20 @@ module Dapp::Kube::CLI::Command
4
4
  banner <<BANNER.freeze
5
5
  Usage:
6
6
 
7
- dapp kube secret generate
7
+ dapp kube secret generate [FILE_PATH] [options]
8
8
 
9
9
  Options:
10
10
  BANNER
11
+
12
+ option :output_file_path,
13
+ short: '-o OUTPUT_FILE_PATH',
14
+ required: false
15
+
16
+ def run(argv = ARGV)
17
+ self.class.parse_options(self, argv)
18
+ file_path = cli_arguments.empty? ? nil : cli_arguments.first
19
+ ::Dapp::Dapp.new(options: cli_options).public_send(run_method, file_path)
20
+ end
11
21
  end
12
22
  end
13
23
  end
@@ -7,7 +7,7 @@ module Dapp
7
7
  end
8
8
 
9
9
  def namespace
10
- @namespace || kube_context_config['context']['namespace']
10
+ @namespace || kube_context_config['context']['namespace'] || 'default'
11
11
  end
12
12
 
13
13
  # Чтобы не перегружать методы явной передачей namespace.
@@ -1,7 +1,7 @@
1
1
  module Dapp
2
2
  module Kube
3
3
  module Client::Error
4
- class Base < ::Dapp::Deployment::Error::Kubernetes
4
+ class Base < ::Dapp::Kube::Error::Kubernetes
5
5
  def initialize(**net_status)
6
6
  super(**net_status, context: :kubernetes)
7
7
  end
@@ -12,19 +12,44 @@ module Dapp
12
12
  end
13
13
 
14
14
  def kube_namespace
15
- options[:namespace].tr('_', '-')
15
+ kubernetes.namespace
16
+ end
17
+
18
+ def secret_key_should_exist!
19
+ raise(Error::Command,
20
+ code: :secret_key_not_found,
21
+ data: {not_found_in: secret_key_not_found_in.join(', ')}
22
+ ) if secret.nil?
16
23
  end
17
24
 
18
25
  def secret
19
26
  @secret ||= begin
20
- secret_key = ENV['DAPP_SECRET_KEY']
21
- secret_key ||= path('.dapp_secret_key').read.chomp if path('.dapp_secret_key').file?
27
+ unless secret_key = ENV['DAPP_SECRET_KEY']
28
+ secret_key_not_found_in << '`DAPP_SECRET_KEY`'
29
+
30
+ if dappfile_exists?
31
+ file_path = path('.dapp_secret_key')
32
+ if file_path.file?
33
+ secret_key = path('.dapp_secret_key').read.chomp
34
+ else
35
+ secret_key_not_found_in << "`#{file_path}`"
36
+ end
37
+ end
38
+ end
39
+
22
40
  Secret.new(secret_key) if secret_key
23
41
  end
24
42
  end
25
43
 
44
+ def secret_key_not_found_in
45
+ @secret_key_not_found_in ||= []
46
+ end
47
+
26
48
  def kubernetes
27
- @kubernetes ||= Client.new(namespace: kube_namespace)
49
+ @kubernetes ||= begin
50
+ namespace = options[:namespace].nil? ? nil : options[:namespace].tr('_', '-')
51
+ Client.new(namespace: namespace)
52
+ end
28
53
  end
29
54
  end
30
55
  end