dapp 0.13.3 → 0.13.4

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.
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