kuber_kit 0.1.6 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -2
  3. data/README.md +16 -3
  4. data/TODO.md +4 -3
  5. data/example/configurations/review.rb +2 -1
  6. data/example/images/app_sources/Dockerfile +1 -1
  7. data/example/images/ruby_app/image.rb +4 -4
  8. data/example/infrastructure/build_servers.rb +8 -0
  9. data/example/services/env_file.rb +5 -1
  10. data/example/services/ruby_app.rb +2 -1
  11. data/kuber_kit.gemspec +1 -0
  12. data/lib/kuber_kit.rb +37 -19
  13. data/lib/kuber_kit/actions/configuration_loader.rb +11 -2
  14. data/lib/kuber_kit/actions/env_file_reader.rb +5 -0
  15. data/lib/kuber_kit/actions/image_compiler.rb +16 -10
  16. data/lib/kuber_kit/actions/kubectl_applier.rb +9 -3
  17. data/lib/kuber_kit/actions/kubectl_attacher.rb +26 -0
  18. data/lib/kuber_kit/actions/service_deployer.rb +38 -0
  19. data/lib/kuber_kit/actions/service_reader.rb +6 -0
  20. data/lib/kuber_kit/actions/template_reader.rb +5 -0
  21. data/lib/kuber_kit/cli.rb +54 -20
  22. data/lib/kuber_kit/configs.rb +24 -22
  23. data/lib/kuber_kit/container.rb +21 -13
  24. data/lib/kuber_kit/core/artifacts/artifact_store.rb +12 -23
  25. data/lib/kuber_kit/core/build_servers/abstract_build_server.rb +21 -0
  26. data/lib/kuber_kit/core/build_servers/build_server.rb +24 -0
  27. data/lib/kuber_kit/core/build_servers/build_server_store.rb +18 -0
  28. data/lib/kuber_kit/core/configuration.rb +10 -4
  29. data/lib/kuber_kit/core/configuration_definition.rb +18 -1
  30. data/lib/kuber_kit/core/configuration_factory.rb +11 -1
  31. data/lib/kuber_kit/core/configuration_store.rb +14 -24
  32. data/lib/kuber_kit/core/context_helper/service_helper.rb +2 -2
  33. data/lib/kuber_kit/core/env_files/env_file_store.rb +8 -23
  34. data/lib/kuber_kit/core/image_store.rb +8 -18
  35. data/lib/kuber_kit/core/registries/registry_store.rb +8 -23
  36. data/lib/kuber_kit/core/service.rb +6 -2
  37. data/lib/kuber_kit/core/service_store.rb +13 -23
  38. data/lib/kuber_kit/core/store.rb +48 -0
  39. data/lib/kuber_kit/core/templates/template_store.rb +12 -23
  40. data/lib/kuber_kit/image_compiler/action_handler.rb +4 -3
  41. data/lib/kuber_kit/image_compiler/build_server_pool.rb +30 -0
  42. data/lib/kuber_kit/image_compiler/build_server_pool_factory.rb +13 -0
  43. data/lib/kuber_kit/image_compiler/image_build_dir_creator.rb +13 -7
  44. data/lib/kuber_kit/image_compiler/image_dependency_resolver.rb +25 -5
  45. data/lib/kuber_kit/preprocessing/file_preprocessor.rb +5 -4
  46. data/lib/kuber_kit/service_deployer/action_handler.rb +1 -1
  47. data/lib/kuber_kit/service_deployer/strategies/kubernetes.rb +10 -3
  48. data/lib/kuber_kit/shell/abstract_shell.rb +4 -0
  49. data/lib/kuber_kit/shell/{bash_commands.rb → commands/bash_commands.rb} +1 -1
  50. data/lib/kuber_kit/shell/{docker_commands.rb → commands/docker_commands.rb} +1 -1
  51. data/lib/kuber_kit/shell/{git_commands.rb → commands/git_commands.rb} +1 -1
  52. data/lib/kuber_kit/shell/commands/kubectl_commands.rb +65 -0
  53. data/lib/kuber_kit/shell/commands/rsync_commands.rb +32 -0
  54. data/lib/kuber_kit/shell/local_shell.rb +24 -5
  55. data/lib/kuber_kit/shell/ssh_session.rb +60 -0
  56. data/lib/kuber_kit/shell/ssh_shell.rb +77 -0
  57. data/lib/kuber_kit/tools/file_presence_checker.rb +6 -2
  58. data/lib/kuber_kit/ui/interactive.rb +8 -0
  59. data/lib/kuber_kit/ui/simple.rb +6 -0
  60. data/lib/kuber_kit/version.rb +2 -2
  61. metadata +34 -12
  62. data/lib/kuber_kit/preprocessing/dir_preprocessor.rb +0 -19
  63. data/lib/kuber_kit/shell/kubectl_commands.rb +0 -42
  64. data/lib/kuber_kit/shell/rsync_commands.rb +0 -20
  65. data/lib/kuber_kit/tools/files_sync.rb +0 -10
@@ -10,5 +10,11 @@ class KuberKit::Actions::ServiceReader
10
10
  result = service_reader.call(local_shell, service_name)
11
11
 
12
12
  ui.print_info(service_name.to_s, result)
13
+
14
+ true
15
+ rescue KuberKit::Error => e
16
+ ui.print_error("Error", e.message)
17
+
18
+ false
13
19
  end
14
20
  end
@@ -13,5 +13,10 @@ class KuberKit::Actions::TemplateReader
13
13
  result = reader.read(local_shell, template)
14
14
 
15
15
  ui.print_info(template_name.to_s, result)
16
+
17
+ true
18
+ rescue KuberKit::Error => e
19
+ ui.print_error("Error", e.message)
20
+ false
16
21
  end
17
22
  end
@@ -14,56 +14,90 @@ class KuberKit::CLI < Thor
14
14
 
15
15
  image_names = image_names_str.split(",").map(&:strip).map(&:to_sym)
16
16
 
17
- KuberKit::Container['actions.configuration_loader'].call(options)
18
- KuberKit::Container['actions.image_compiler'].call(image_names, options)
17
+ if KuberKit::Container['actions.configuration_loader'].call(options)
18
+ result = KuberKit::Container['actions.image_compiler'].call(image_names, options)
19
+ end
19
20
 
20
21
  logger = KuberKit::Container['tools.logger']
21
- logger.info("---------------------------")
22
- logger.info("Image compilation finished!")
23
- logger.info("---------------------------")
22
+ if result
23
+ logger.info("---------------------------")
24
+ logger.info("Image compilation finished!")
25
+ logger.info("---------------------------")
26
+ else
27
+ logger.info("-------------------------".red)
28
+ logger.info("Image compilation failed!".red)
29
+ logger.info("-------------------------".red)
30
+ end
31
+ end
32
+
33
+ desc "deploy CONTEXT_NAME", "Deploy CONTEXT_NAME with kubectl"
34
+ method_option :services, :type => :array, aliases: ["-s"]
35
+ method_option :tags, :type => :array, aliases: ["-t"]
36
+ def deploy
37
+ KuberKit.set_debug_mode(options[:debug])
38
+
39
+ if KuberKit::Container['actions.configuration_loader'].call(options)
40
+ result = KuberKit::Container['actions.service_deployer'].call(
41
+ services: options[:services] || [],
42
+ tags: options[:tags] || []
43
+ )
44
+ end
45
+
46
+ logger = KuberKit::Container['tools.logger']
47
+ if result
48
+ logger.info("---------------------------")
49
+ logger.info("Service deployment finished!")
50
+ logger.info("---------------------------")
51
+ else
52
+ logger.info("-------------------------".red)
53
+ logger.info("Service deployment failed!".red)
54
+ logger.info("-------------------------".red)
55
+ end
24
56
  end
25
57
 
26
58
  desc "env ENV_FILE_NAME", "Return content of Env File ENV_FILE_NAME"
27
59
  def env(env_file_name)
28
60
  KuberKit.set_debug_mode(options[:debug])
29
61
 
30
- KuberKit::Container['actions.configuration_loader'].call(options)
31
- KuberKit::Container['actions.env_file_reader'].call(env_file_name.to_sym, options)
62
+ if KuberKit::Container['actions.configuration_loader'].call(options)
63
+ KuberKit::Container['actions.env_file_reader'].call(env_file_name.to_sym, options)
64
+ end
32
65
  end
33
66
 
34
67
  desc "template TEMPLATE_NAME", "Return content of Template TEMPLATE_NAME"
35
68
  def template(template_name)
36
69
  KuberKit.set_debug_mode(options[:debug])
37
70
 
38
- KuberKit::Container['actions.configuration_loader'].call(options)
39
- KuberKit::Container['actions.template_reader'].call(template_name.to_sym, options)
71
+ if KuberKit::Container['actions.configuration_loader'].call(options)
72
+ KuberKit::Container['actions.template_reader'].call(template_name.to_sym, options)
73
+ end
40
74
  end
41
75
 
42
76
  desc "service SERVICE_NAME", "Return content of Service SERVICE_NAME"
43
77
  def service(service_name)
44
78
  KuberKit.set_debug_mode(options[:debug])
45
79
 
46
- KuberKit::Container['actions.configuration_loader'].call(options)
47
- KuberKit::Container['actions.service_reader'].call(service_name.to_sym, options)
80
+ if KuberKit::Container['actions.configuration_loader'].call(options)
81
+ KuberKit::Container['actions.service_reader'].call(service_name.to_sym, options)
82
+ end
48
83
  end
49
84
 
50
85
  desc "apply FILE_PATH", "Apply FILE_PATH with kubectl"
51
86
  def apply(file_path)
52
87
  KuberKit.set_debug_mode(options[:debug])
53
88
 
54
- KuberKit::Container['actions.configuration_loader'].call(options)
55
- KuberKit::Container['actions.kubectl_applier'].call(File.expand_path(file_path), options)
89
+ if KuberKit::Container['actions.configuration_loader'].call(options)
90
+ KuberKit::Container['actions.kubectl_applier'].call(File.expand_path(file_path), options)
91
+ end
56
92
  end
57
93
 
58
- desc "deploy CONTEXT_NAME", "Deploy CONTEXT_NAME with kubectl"
59
- method_option :services, :type => :array, aliases: ["-s"]
60
- method_option :tags, :type => :array, aliases: ["-t"]
61
- def deploy
94
+ desc "attach POD_NAME", "Attach to POD_NAME with kubectl"
95
+ def attach(pod_name)
62
96
  KuberKit.set_debug_mode(options[:debug])
63
97
 
64
- KuberKit::Container['actions.configuration_loader'].call(options)
65
-
66
- KuberKit::Container['actions.service_deployer'].call(services: options[:services], tags: options[:tags])
98
+ if KuberKit::Container['actions.configuration_loader'].call(options)
99
+ KuberKit::Container['actions.kubectl_attacher'].call(pod_name, options)
100
+ end
67
101
  end
68
102
 
69
103
  def self.exit_on_failure?
@@ -14,33 +14,35 @@ class KuberKit::Configs
14
14
  'tmp',
15
15
  'logs'
16
16
  ]
17
- KUBER_KIT_DIRNAME = "kuber_kit".freeze
18
- IMAGES_DIRNAME = "images".freeze
19
- SERVICES_DIRNAME = "services".freeze
20
- INFRA_DIRNAME = "infrastructure".freeze
21
- CONFIGURATIONS_DIRNAME = "configurations".freeze
22
- ARTIFACT_CLONE_DIR = "/tmp/kuber_kit/artifacts"
23
- SERVICE_CONFIG_DIR = "/tmp/kuber_kit/services"
24
- DEPLOY_STRATEGY = :kubernetes
17
+ KUBER_KIT_DIRNAME = "kuber_kit".freeze
18
+ IMAGES_DIRNAME = "images".freeze
19
+ SERVICES_DIRNAME = "services".freeze
20
+ INFRA_DIRNAME = "infrastructure".freeze
21
+ CONFIGURATIONS_DIRNAME = "configurations".freeze
22
+ ARTIFACT_CLONE_DIR = "/tmp/kuber_kit/artifacts"
23
+ SERVICE_CONFIG_DIR = "/tmp/kuber_kit/services"
24
+ DEPLOY_STRATEGY = :kubernetes
25
+ COMPILE_SIMULTANEOUS_LIMIT = 5
25
26
 
26
27
  attr_accessor :image_dockerfile_name, :image_build_context_dir, :image_tag,
27
28
  :docker_ignore_list, :image_compile_dir,
28
29
  :kuber_kit_dirname, :images_dirname, :services_dirname, :infra_dirname, :configurations_dirname,
29
- :artifact_clone_dir, :service_config_dir, :deploy_strategy
30
+ :artifact_clone_dir, :service_config_dir, :deploy_strategy, :compile_simultaneous_limit
30
31
 
31
32
  def initialize
32
- @image_dockerfile_name = IMAGE_DOCKERFILE_NAME
33
- @image_build_context_dir = IMAGE_BUILD_CONTEXT_DIR
34
- @image_tag = IMAGE_TAG
35
- @image_compile_dir = IMAGE_COMPILE_DIR
36
- @docker_ignore_list = DOCKER_IGNORE_LIST
37
- @kuber_kit_dirname = KUBER_KIT_DIRNAME
38
- @images_dirname = IMAGES_DIRNAME
39
- @services_dirname = SERVICES_DIRNAME
40
- @infra_dirname = INFRA_DIRNAME
41
- @configurations_dirname = CONFIGURATIONS_DIRNAME
42
- @artifact_clone_dir = ARTIFACT_CLONE_DIR
43
- @service_config_dir = SERVICE_CONFIG_DIR
44
- @deploy_strategy = DEPLOY_STRATEGY
33
+ @image_dockerfile_name = IMAGE_DOCKERFILE_NAME
34
+ @image_build_context_dir = IMAGE_BUILD_CONTEXT_DIR
35
+ @image_tag = IMAGE_TAG
36
+ @image_compile_dir = IMAGE_COMPILE_DIR
37
+ @docker_ignore_list = DOCKER_IGNORE_LIST
38
+ @kuber_kit_dirname = KUBER_KIT_DIRNAME
39
+ @images_dirname = IMAGES_DIRNAME
40
+ @services_dirname = SERVICES_DIRNAME
41
+ @infra_dirname = INFRA_DIRNAME
42
+ @configurations_dirname = CONFIGURATIONS_DIRNAME
43
+ @artifact_clone_dir = ARTIFACT_CLONE_DIR
44
+ @service_config_dir = SERVICE_CONFIG_DIR
45
+ @deploy_strategy = DEPLOY_STRATEGY
46
+ @compile_simultaneous_limit = COMPILE_SIMULTANEOUS_LIMIT
45
47
  end
46
48
  end
@@ -29,6 +29,10 @@ class KuberKit::Container
29
29
  KuberKit::Actions::KubectlApplier.new
30
30
  end
31
31
 
32
+ register "actions.kubectl_attacher" do
33
+ KuberKit::Actions::KubectlAttacher.new
34
+ end
35
+
32
36
  register "configs" do
33
37
  KuberKit::Configs.new
34
38
  end
@@ -69,18 +73,22 @@ class KuberKit::Container
69
73
  KuberKit::Core::ConfigurationStore.new
70
74
  end
71
75
 
72
- register "core.registry_store" do
73
- KuberKit::Core::Registries::RegistryStore.new
74
- end
75
-
76
76
  register "core.artifact_store" do
77
77
  KuberKit::Core::Artifacts::ArtifactStore.new
78
78
  end
79
79
 
80
+ register "core.build_server_store" do
81
+ KuberKit::Core::BuildServers::BuildServerStore.new
82
+ end
83
+
80
84
  register "core.env_file_store" do
81
85
  KuberKit::Core::EnvFiles::EnvFileStore.new
82
86
  end
83
87
 
88
+ register "core.registry_store" do
89
+ KuberKit::Core::Registries::RegistryStore.new
90
+ end
91
+
84
92
  register "core.template_store" do
85
93
  KuberKit::Core::Templates::TemplateStore.new
86
94
  end
@@ -102,23 +110,23 @@ class KuberKit::Container
102
110
  end
103
111
 
104
112
  register "shell.bash_commands" do
105
- KuberKit::Shell::BashCommands.new
113
+ KuberKit::Shell::Commands::BashCommands.new
106
114
  end
107
115
 
108
116
  register "shell.docker_commands" do
109
- KuberKit::Shell::DockerCommands.new
117
+ KuberKit::Shell::Commands::DockerCommands.new
110
118
  end
111
119
 
112
120
  register "shell.git_commands" do
113
- KuberKit::Shell::GitCommands.new
121
+ KuberKit::Shell::Commands::GitCommands.new
114
122
  end
115
123
 
116
124
  register "shell.rsync_commands" do
117
- KuberKit::Shell::RsyncCommands.new
125
+ KuberKit::Shell::Commands::RsyncCommands.new
118
126
  end
119
127
 
120
128
  register "shell.kubectl_commands" do
121
- KuberKit::Shell::KubectlCommands.new
129
+ KuberKit::Shell::Commands::KubectlCommands.new
122
130
  end
123
131
 
124
132
  register "shell.local_shell" do
@@ -137,14 +145,14 @@ class KuberKit::Container
137
145
  KuberKit::Preprocessing::FilePreprocessor.new
138
146
  end
139
147
 
140
- register "preprocessing.dir_preprocessor" do
141
- KuberKit::Preprocessing::DirPreprocessor.new
142
- end
143
-
144
148
  register "image_compiler.action_handler" do
145
149
  KuberKit::ImageCompiler::ActionHandler.new
146
150
  end
147
151
 
152
+ register "image_compiler.build_server_pool_factory" do
153
+ KuberKit::ImageCompiler::BuildServerPoolFactory.new
154
+ end
155
+
148
156
  register "image_compiler.compiler" do
149
157
  KuberKit::ImageCompiler::Compiler.new
150
158
  end
@@ -1,19 +1,6 @@
1
1
  class KuberKit::Core::Artifacts::ArtifactStore
2
- NotFoundError = Class.new(KuberKit::NotFoundError)
3
- AlreadyAddedError = Class.new(KuberKit::Error)
4
-
5
2
  def add(artifact)
6
- @@artifacts ||= {}
7
-
8
- if !artifact.is_a?(KuberKit::Core::Artifacts::AbstractArtifact)
9
- raise ArgumentError.new("should be an instance of KuberKit::Core::Artifacts::AbstractArtifact, got: #{artifact.inspect}")
10
- end
11
-
12
- unless @@artifacts[artifact.name].nil?
13
- raise AlreadyAddedError, "artifact #{artifact.name} was already added"
14
- end
15
-
16
- @@artifacts[artifact.name] = artifact
3
+ store.add(artifact.name, artifact)
17
4
  end
18
5
 
19
6
  def get(artifact_name)
@@ -24,14 +11,7 @@ class KuberKit::Core::Artifacts::ArtifactStore
24
11
  end
25
12
 
26
13
  def get_global(artifact_name)
27
- @@artifacts ||= {}
28
- artifact = @@artifacts[artifact_name]
29
-
30
- if artifact.nil?
31
- raise NotFoundError, "artifact '#{artifact_name}' not found"
32
- end
33
-
34
- artifact
14
+ store.get(artifact_name)
35
15
  end
36
16
 
37
17
  def get_from_configuration(artifact_name)
@@ -40,6 +20,15 @@ class KuberKit::Core::Artifacts::ArtifactStore
40
20
  end
41
21
 
42
22
  def reset!
43
- @@artifacts = {}
23
+ store.reset!
24
+ end
25
+
26
+ def exists?(artifact_name)
27
+ store.exists?(artifact_name)
44
28
  end
29
+
30
+ private
31
+ def store
32
+ @@store ||= KuberKit::Core::Store.new(KuberKit::Core::Artifacts::AbstractArtifact)
33
+ end
45
34
  end
@@ -0,0 +1,21 @@
1
+ class KuberKit::Core::BuildServers::AbstractBuildServer
2
+ include KuberKit::Extensions::Inspectable
3
+
4
+ attr_reader :name
5
+
6
+ def initialize(build_server_name)
7
+ @name = build_server_name
8
+ end
9
+
10
+ def host
11
+ raise KuberKit::NotImplementedError, "must be implemented"
12
+ end
13
+
14
+ def user
15
+ raise KuberKit::NotImplementedError, "must be implemented"
16
+ end
17
+
18
+ def port
19
+ raise KuberKit::NotImplementedError, "must be implemented"
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ class KuberKit::Core::BuildServers::BuildServer < KuberKit::Core::BuildServers::AbstractBuildServer
2
+ def setup(host:, user:, port:)
3
+ @host = host
4
+ @user = user
5
+ @port = port
6
+
7
+ self
8
+ end
9
+
10
+ def host
11
+ raise ArgumentError, "host is not set, please use #setup method" if @host.nil?
12
+ @host
13
+ end
14
+
15
+ def user
16
+ raise ArgumentError, "user is not set, please use #setup method" if @user.nil?
17
+ @user
18
+ end
19
+
20
+ def port
21
+ raise ArgumentError, "port is not set, please use #setup method" if @port.nil?
22
+ @port
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ class KuberKit::Core::BuildServers::BuildServerStore
2
+ def add(build_server)
3
+ store.add(build_server.name, build_server)
4
+ end
5
+
6
+ def get(build_server_name)
7
+ store.get(build_server_name)
8
+ end
9
+
10
+ def reset!
11
+ store.reset!
12
+ end
13
+
14
+ private
15
+ def store
16
+ @@store ||= KuberKit::Core::Store.new(KuberKit::Core::BuildServers::AbstractBuildServer)
17
+ end
18
+ end
@@ -1,5 +1,6 @@
1
1
  class KuberKit::Core::Configuration
2
- attr_reader :name, :artifacts, :registries, :env_files, :templates, :kubeconfig_path, :deploy_strategy, :services_attributes
2
+ attr_reader :name, :artifacts, :registries, :env_files, :templates, :kubeconfig_path,
3
+ :deploy_strategy, :deploy_namespace, :services_attributes, :build_servers
3
4
 
4
5
  Contract KeywordArgs[
5
6
  name: Symbol,
@@ -8,10 +9,13 @@ class KuberKit::Core::Configuration
8
9
  env_files: Hash,
9
10
  templates: Hash,
10
11
  kubeconfig_path: Maybe[String],
11
- deploy_strategy: Symbol,
12
- services_attributes: HashOf[Symbol => Hash]
12
+ deploy_strategy: Symbol,
13
+ deploy_namespace: Maybe[Symbol],
14
+ services_attributes: HashOf[Symbol => Hash],
15
+ build_servers: ArrayOf[KuberKit::Core::BuildServers::AbstractBuildServer]
13
16
  ] => Any
14
- def initialize(name:, artifacts:, registries:, env_files:, templates:, kubeconfig_path:, deploy_strategy:, services_attributes:)
17
+ def initialize(name:, artifacts:, registries:, env_files:, templates:, kubeconfig_path:,
18
+ deploy_strategy:, deploy_namespace:, services_attributes:, build_servers:)
15
19
  @name = name
16
20
  @artifacts = artifacts
17
21
  @registries = registries
@@ -19,7 +23,9 @@ class KuberKit::Core::Configuration
19
23
  @templates = templates
20
24
  @kubeconfig_path = kubeconfig_path
21
25
  @deploy_strategy = deploy_strategy
26
+ @deploy_namespace = deploy_namespace
22
27
  @services_attributes = services_attributes
28
+ @build_servers = build_servers
23
29
  end
24
30
 
25
31
  def service_attributes(service_name)
@@ -10,6 +10,7 @@ class KuberKit::Core::ConfigurationDefinition
10
10
  @registries = {}
11
11
  @env_files = {}
12
12
  @templates = {}
13
+ @build_servers = []
13
14
  @enabled_services = []
14
15
  @services_attributes = {}
15
16
  end
@@ -23,8 +24,10 @@ class KuberKit::Core::ConfigurationDefinition
23
24
  templates: @templates,
24
25
  kubeconfig_path: @kubeconfig_path,
25
26
  deploy_strategy: @deploy_strategy,
27
+ deploy_namespace: @deploy_namespace,
26
28
  enabled_services: @enabled_services,
27
- services_attributes: @services_attributes
29
+ build_servers: @build_servers,
30
+ services_attributes: @services_attributes,
28
31
  )
29
32
  end
30
33
 
@@ -64,12 +67,26 @@ class KuberKit::Core::ConfigurationDefinition
64
67
  self
65
68
  end
66
69
 
70
+ def use_build_server(build_server_name)
71
+ unless @build_servers.include?(build_server_name)
72
+ @build_servers.push(build_server_name)
73
+ end
74
+
75
+ self
76
+ end
77
+
67
78
  def kubeconfig_path(path)
68
79
  @kubeconfig_path = path
69
80
 
70
81
  self
71
82
  end
72
83
 
84
+ def deploy_namespace(namespace)
85
+ @deploy_namespace = namespace
86
+
87
+ self
88
+ end
89
+
73
90
  def deploy_strategy(path)
74
91
  @deploy_strategy = path
75
92