kuber_kit 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f53003404cfe3339fb14d864f9b217dd93332d1c0d451ff34909a3a7224e2ab
4
- data.tar.gz: c603662e4f86eebe2d0b4fa114576cef1518b4ce7c879c46a3bca8753f37eed9
3
+ metadata.gz: f32cf040d33941d931b9e5fa2f67c8132f6538e4301f2f533531e2524410ee91
4
+ data.tar.gz: 2f769ec987b79ad51f594237968698515fea823cefdc0382d2631e3f7b0abbc0
5
5
  SHA512:
6
- metadata.gz: 6cc09c80cd1506066efc6ddb86b0bc01d7767fadaeab87fc5d7ca7275034505420d09c45f08566e42afe7e4bee0e89f16c298f8d3ee1010aef03c898b8c5de29
7
- data.tar.gz: 89276b25a1de67c89386c86f584c558e4becb0ae100ae8a9f34bc230be6d81a9f1948965a5aa148173d005922757de8598ef7306561a4547700433b5cbc7ca08
6
+ metadata.gz: c7f532ee9af8a02191d4a895f30647fb7d30abf63573e93b3616ee17adb657ed6f220ac0fc79a8b2a1bdc2a7f542bfc341937ef631835f0e2c4534505ce38b55
7
+ data.tar.gz: 24f8f053b3ef45ab3dc277d6d255b9334f4afa3c68490df1dd47f4fc2198aaf4b53584eb06040319e5cd87822b179d979ebaf1e7a4f9a36cf7d92170be28d5e5
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kuber_kit (0.2.0)
4
+ kuber_kit (0.2.5)
5
5
  cli-ui
6
6
  contracts-lite
7
7
  dry-auto_inject
@@ -26,7 +26,7 @@ GEM
26
26
  dry-container (0.7.2)
27
27
  concurrent-ruby (~> 1.0)
28
28
  dry-configurable (~> 0.1, >= 0.1.3)
29
- dry-core (0.4.9)
29
+ dry-core (0.4.10)
30
30
  concurrent-ruby (~> 1.0)
31
31
  dry-equalizer (0.3.0)
32
32
  method_source (1.0.0)
data/README.md CHANGED
@@ -17,13 +17,13 @@ gem 'kuber_kit'
17
17
  ### Launch compilation
18
18
 
19
19
  ```
20
- bin/kit compile ruby_app,ruby_app2 --path=./example
20
+ bundle exec bin/kit compile ruby_app,ruby_app2 --path=./example
21
21
  ```
22
22
 
23
23
  ### Launch deployment
24
24
 
25
25
  ```
26
- bin/kit compile -s ruby_app,ruby_app2 --path=./example
26
+ bundle exec bin/kit compile -s ruby_app,ruby_app2 --path=./example
27
27
  ```
28
28
 
29
29
 
data/TODO.md CHANGED
@@ -1,4 +1,8 @@
1
+ - find a way to launch job on each run, e.g. for migrations
2
+ - allow setting default configuration for kuberkit using env variable
3
+ - add ability to set container health checks
1
4
  - implement interactive shell.exec!
5
+ - allow deploying only services enabled for specific configuration
2
6
  - list services and require confirmation before deployment
3
7
  - add build vars support (use images instead of containers)
4
8
  - template should be able to set default attributes
data/bin/kit CHANGED
@@ -2,7 +2,6 @@
2
2
  # -*- encoding: utf-8 -*-
3
3
 
4
4
  require 'rubygems'
5
- require 'bundler/setup'
6
5
  require "kuber_kit"
7
6
 
8
7
  KuberKit::CLI.start(ARGV)
@@ -1,6 +1,7 @@
1
1
  KuberKit
2
2
  .define_service(:env_file)
3
3
  .template(:env_file)
4
+ .tags("env_file")
4
5
  .attributes(
5
6
  deployment_restart_enabled: false
6
7
  )
@@ -1,4 +1,5 @@
1
1
  KuberKit
2
2
  .define_service(:ruby_app)
3
3
  .template(:service)
4
- .images(:ruby_app)
4
+ .images(:ruby_app)
5
+ .tags("app")
@@ -141,6 +141,7 @@ module KuberKit
141
141
  module Strategies
142
142
  autoload :Abstract, 'service_deployer/strategies/abstract'
143
143
  autoload :Kubernetes, 'service_deployer/strategies/kubernetes'
144
+ autoload :KubernetesRunner, 'service_deployer/strategies/kubernetes_runner'
144
145
  end
145
146
  end
146
147
 
@@ -7,9 +7,10 @@ class KuberKit::Actions::KubectlApplier
7
7
 
8
8
  Contract String, Hash => Any
9
9
  def call(file_path, options)
10
- kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
10
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
+ deploy_namespace = KuberKit.current_configuration.deploy_namespace
11
12
  ui.create_task("Applying file: #{file_path}") do |task|
12
- kubectl_commands.apply_file(local_shell, file_path, kubeconfig_path: kubeconfig_path)
13
+ kubectl_commands.apply_file(local_shell, file_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
13
14
  task.update_title("Applied file: #{file_path}")
14
15
  end
15
16
 
@@ -8,7 +8,14 @@ class KuberKit::Actions::KubectlAttacher
8
8
  Contract String, Hash => Any
9
9
  def call(pod_name, options)
10
10
  kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
11
- kubectl_commands.exec(local_shell, pod_name, "bash", args: "-it", kubeconfig_path: kubeconfig_path, interactive: true)
11
+ deploy_namespace = KuberKit.current_configuration.deploy_namespace
12
+
13
+ kubectl_commands.exec(
14
+ local_shell, pod_name, "bash", args: "-it",
15
+ kubeconfig_path: kubeconfig_path,
16
+ interactive: true,
17
+ namespace: deploy_namespace
18
+ )
12
19
 
13
20
  true
14
21
  rescue KuberKit::Error => e
@@ -14,6 +14,10 @@ class KuberKit::Actions::ServiceDeployer
14
14
  tags: Maybe[ArrayOf[String]],
15
15
  ] => Any
16
16
  def call(services:, tags:)
17
+ if services.empty? && tags.empty?
18
+ services, tags = show_tags_selection
19
+ end
20
+
17
21
  service_names = service_list_resolver.resolve(
18
22
  services: services || [],
19
23
  tags: tags || []
@@ -59,4 +63,41 @@ class KuberKit::Actions::ServiceDeployer
59
63
  def compile_images(images_names)
60
64
  image_compiler.call(images_names, {}) if images_names.any?
61
65
  end
66
+
67
+ def show_tags_selection()
68
+ specific_service_option = "deploy specific service"
69
+
70
+ tags = [specific_service_option]
71
+ tags += service_store
72
+ .all_definitions
73
+ .values
74
+ .map(&:to_service_attrs)
75
+ .map(&:tags)
76
+ .flatten
77
+ .uniq
78
+ .sort
79
+ .map(&:to_s)
80
+
81
+ ui.prompt("Please select which tag to deploy", tags) do |selected_tag|
82
+ if selected_tag == specific_service_option
83
+ show_service_selection
84
+ else
85
+ return [[], [selected_tag]]
86
+ end
87
+ end
88
+ end
89
+
90
+ def show_service_selection()
91
+ services = service_store
92
+ .all_definitions
93
+ .values
94
+ .map(&:service_name)
95
+ .uniq
96
+ .sort
97
+ .map(&:to_s)
98
+
99
+ ui.prompt("Please select which service to deploy", services) do |selected_service|
100
+ return [[selected_service], []]
101
+ end
102
+ end
62
103
  end
@@ -37,7 +37,10 @@ class KuberKit::CLI < Thor
37
37
  KuberKit.set_debug_mode(options[:debug])
38
38
 
39
39
  if KuberKit::Container['actions.configuration_loader'].call(options)
40
- result = KuberKit::Container['actions.service_deployer'].call(services: options[:services], tags: options[:tags])
40
+ result = KuberKit::Container['actions.service_deployer'].call(
41
+ services: options[:services] || [],
42
+ tags: options[:tags] || []
43
+ )
41
44
  end
42
45
 
43
46
  logger = KuberKit::Container['tools.logger']
@@ -1,6 +1,6 @@
1
1
  class KuberKit::Core::Configuration
2
2
  attr_reader :name, :artifacts, :registries, :env_files, :templates, :kubeconfig_path,
3
- :deploy_strategy, :services_attributes, :build_servers
3
+ :deploy_strategy, :deploy_namespace, :services_attributes, :build_servers
4
4
 
5
5
  Contract KeywordArgs[
6
6
  name: Symbol,
@@ -9,12 +9,13 @@ class KuberKit::Core::Configuration
9
9
  env_files: Hash,
10
10
  templates: Hash,
11
11
  kubeconfig_path: Maybe[String],
12
- deploy_strategy: Symbol,
12
+ deploy_strategy: Symbol,
13
+ deploy_namespace: Maybe[Symbol],
13
14
  services_attributes: HashOf[Symbol => Hash],
14
15
  build_servers: ArrayOf[KuberKit::Core::BuildServers::AbstractBuildServer]
15
16
  ] => Any
16
17
  def initialize(name:, artifacts:, registries:, env_files:, templates:, kubeconfig_path:,
17
- deploy_strategy:, services_attributes:, build_servers:)
18
+ deploy_strategy:, deploy_namespace:, services_attributes:, build_servers:)
18
19
  @name = name
19
20
  @artifacts = artifacts
20
21
  @registries = registries
@@ -22,6 +23,7 @@ class KuberKit::Core::Configuration
22
23
  @templates = templates
23
24
  @kubeconfig_path = kubeconfig_path
24
25
  @deploy_strategy = deploy_strategy
26
+ @deploy_namespace = deploy_namespace
25
27
  @services_attributes = services_attributes
26
28
  @build_servers = build_servers
27
29
  end
@@ -24,9 +24,10 @@ class KuberKit::Core::ConfigurationDefinition
24
24
  templates: @templates,
25
25
  kubeconfig_path: @kubeconfig_path,
26
26
  deploy_strategy: @deploy_strategy,
27
+ deploy_namespace: @deploy_namespace,
27
28
  enabled_services: @enabled_services,
28
29
  build_servers: @build_servers,
29
- services_attributes: @services_attributes
30
+ services_attributes: @services_attributes,
30
31
  )
31
32
  end
32
33
 
@@ -80,6 +81,12 @@ class KuberKit::Core::ConfigurationDefinition
80
81
  self
81
82
  end
82
83
 
84
+ def deploy_namespace(namespace)
85
+ @deploy_namespace = namespace
86
+
87
+ self
88
+ end
89
+
83
90
  def deploy_strategy(path)
84
91
  @deploy_strategy = path
85
92
 
@@ -27,6 +27,7 @@ class KuberKit::Core::ConfigurationFactory
27
27
  templates: templates,
28
28
  kubeconfig_path: configuration_attrs.kubeconfig_path,
29
29
  deploy_strategy: configuration_attrs.deploy_strategy || configs.deploy_strategy,
30
+ deploy_namespace: configuration_attrs.deploy_namespace,
30
31
  services_attributes: configuration_attrs.services_attributes,
31
32
  build_servers: build_servers
32
33
  )
@@ -1,21 +1,23 @@
1
1
  class KuberKit::Core::Service
2
2
  AttributeNotSet = Class.new(Indocker::Error)
3
3
 
4
- attr_reader :name, :template_name, :tags, :images, :attributes
4
+ attr_reader :name, :template_name, :tags, :images, :attributes, :deploy_strategy
5
5
 
6
6
  Contract KeywordArgs[
7
- name: Symbol,
8
- template_name: Symbol,
9
- tags: ArrayOf[Symbol],
10
- images: ArrayOf[Symbol],
11
- attributes: HashOf[Symbol => Any],
7
+ name: Symbol,
8
+ template_name: Symbol,
9
+ tags: ArrayOf[Symbol],
10
+ images: ArrayOf[Symbol],
11
+ attributes: HashOf[Symbol => Any],
12
+ deploy_strategy: Maybe[Symbol]
12
13
  ] => Any
13
- def initialize(name:, template_name:, tags:, images:, attributes:)
14
+ def initialize(name:, template_name:, tags:, images:, attributes:, deploy_strategy:)
14
15
  @name = name
15
16
  @template_name = template_name
16
17
  @tags = tags
17
18
  @images = images
18
19
  @attributes = attributes
20
+ @deploy_strategy = deploy_strategy
19
21
  end
20
22
 
21
23
  def uri
@@ -8,11 +8,12 @@ class KuberKit::Core::ServiceDefinition
8
8
 
9
9
  def to_service_attrs
10
10
  OpenStruct.new(
11
- name: @service_name,
12
- template_name: get_value(@template_name),
13
- tags: Array(get_value(@tags)).map(&:to_sym),
14
- images: Array(get_value(@images)).map(&:to_sym),
15
- attributes: get_value(@attributes),
11
+ name: @service_name,
12
+ template_name: get_value(@template_name),
13
+ tags: Array(get_value(@tags)).map(&:to_sym),
14
+ images: Array(get_value(@images)).map(&:to_sym),
15
+ attributes: get_value(@attributes),
16
+ deploy_strategy: get_value(@deploy_strategy),
16
17
  )
17
18
  end
18
19
 
@@ -40,6 +41,12 @@ class KuberKit::Core::ServiceDefinition
40
41
  self
41
42
  end
42
43
 
44
+ def deploy_strategy(value = nil, &block)
45
+ @deploy_strategy = block_given? ? block : value
46
+
47
+ self
48
+ end
49
+
43
50
  private
44
51
  def get_value(variable)
45
52
  variable.is_a?(Proc) ? variable.call : variable
@@ -12,11 +12,12 @@ class KuberKit::Core::ServiceFactory
12
12
  attributes = (service_attrs.attributes || {}).merge(configuration_attributes)
13
13
 
14
14
  KuberKit::Core::Service.new(
15
- name: service_attrs.name,
16
- template_name: service_attrs.template_name,
17
- tags: service_attrs.tags,
18
- images: service_attrs.images,
19
- attributes: attributes
15
+ name: service_attrs.name,
16
+ template_name: service_attrs.template_name,
17
+ tags: service_attrs.tags,
18
+ images: service_attrs.images,
19
+ attributes: attributes,
20
+ deploy_strategy: service_attrs.deploy_strategy,
20
21
  )
21
22
  end
22
23
  end
@@ -4,12 +4,15 @@ class KuberKit::ImageCompiler::BuildServerPool
4
4
  def initialize(local_shell:, build_servers:, ssh_shell_class:)
5
5
  @local_shell = local_shell
6
6
  @ssh_shell_class = ssh_shell_class
7
- @ssh_shells = connect_to_ssh_shells(build_servers)
7
+ @build_servers = build_servers
8
+ @ssh_shells = []
8
9
  end
9
10
 
10
11
  def get_shell
11
- if @ssh_shells.any?
12
- @ssh_shells.sample
12
+ if @build_servers.any?
13
+ shell = connect_to_ssh_shell(@build_servers.sample)
14
+ @ssh_shells << shell
15
+ shell
13
16
  else
14
17
  @local_shell
15
18
  end
@@ -20,11 +23,9 @@ class KuberKit::ImageCompiler::BuildServerPool
20
23
  end
21
24
 
22
25
  private
23
- def connect_to_ssh_shells(build_servers)
24
- build_servers.map do |bs|
25
- shell = @ssh_shell_class.new
26
- shell.connect(host: bs.host, user: bs.user, port: bs.port)
27
- shell
28
- end
26
+ def connect_to_ssh_shell(bs)
27
+ shell = @ssh_shell_class.new
28
+ shell.connect(host: bs.host, user: bs.user, port: bs.port)
29
+ shell
29
30
  end
30
31
  end
@@ -11,13 +11,15 @@ class KuberKit::ServiceDeployer::Strategies::Kubernetes < KuberKit::ServiceDeplo
11
11
  config_path = "#{configs.service_config_dir}/#{service.name}.yml"
12
12
  shell.write(config_path, service_config)
13
13
 
14
- kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
15
- kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path)
14
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
15
+ deploy_namespace = KuberKit.current_configuration.deploy_namespace
16
+
17
+ kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
16
18
 
17
19
  deployment_restart_enabled = service.attribute(:deployment_restart_enabled, default: true)
18
20
  deployment_restart_name = service.attribute(:deployment_restart_name, default: service.uri)
19
21
  if deployment_restart_enabled
20
- kubectl_commands.rolling_restart(shell, deployment_restart_name, kubeconfig_path: kubeconfig_path)
22
+ kubectl_commands.rolling_restart(shell, deployment_restart_name, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
21
23
  end
22
24
  end
23
25
  end
@@ -0,0 +1,27 @@
1
+ class KuberKit::ServiceDeployer::Strategies::KubernetesRunner < KuberKit::ServiceDeployer::Strategies::Abstract
2
+ include KuberKit::Import[
3
+ "service_reader.reader",
4
+ "shell.kubectl_commands",
5
+ "configs",
6
+ ]
7
+
8
+ Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
9
+ def deploy(shell, service)
10
+ service_config = reader.read(shell, service)
11
+ config_path = "#{configs.service_config_dir}/#{service.name}.yml"
12
+ shell.write(config_path, service_config)
13
+
14
+ kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
15
+ deploy_namespace = KuberKit.current_configuration.deploy_namespace
16
+
17
+ deployment_resource_name = service.attribute(:deployment_resource_name, default: service.uri)
18
+ deployment_resource_type = service.attribute(:deployment_resource_type, default: "job")
19
+
20
+ deployment_delete_enabled = service.attribute(:deployment_delete_enabled, default: true)
21
+ if deployment_delete_enabled
22
+ kubectl_commands.delete_resource(shell, deployment_resource_type, deployment_resource_name, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
23
+ end
24
+
25
+ kubectl_commands.apply_file(shell, config_path, kubeconfig_path: kubeconfig_path, namespace: deploy_namespace)
26
+ end
27
+ end
@@ -1,6 +1,6 @@
1
1
  class KuberKit::ServiceDeployer::StrategyDetector
2
2
  Contract KuberKit::Core::Service => Symbol
3
3
  def call(service)
4
- KuberKit.current_configuration.deploy_strategy
4
+ service.deploy_strategy || KuberKit.current_configuration.deploy_strategy
5
5
  end
6
6
  end
@@ -2,25 +2,35 @@ require 'json'
2
2
  require 'shellwords'
3
3
 
4
4
  class KuberKit::Shell::Commands::KubectlCommands
5
- def apply_file(shell, file_path, kubeconfig_path: nil)
5
+ def kubectl_run(shell, command_list, kubeconfig_path: nil, namespace: nil, interactive: false)
6
6
  command_parts = []
7
7
  if kubeconfig_path
8
8
  command_parts << "KUBECONFIG=#{kubeconfig_path}"
9
9
  end
10
10
 
11
- command_parts << "kubectl apply -f #{file_path}"
11
+ command_parts << "kubectl"
12
12
 
13
- shell.exec!(command_parts.join(" "))
14
- end
13
+ if namespace
14
+ command_parts << "-n #{namespace}"
15
+ end
15
16
 
16
- def exec(shell, pod_name, command, args: nil, kubeconfig_path: nil, interactive: false)
17
- command_parts = []
17
+ command_parts += Array(command_list)
18
18
 
19
- if kubeconfig_path
20
- command_parts << "KUBECONFIG=#{kubeconfig_path}"
19
+ # TODO: investigate how to do it with shell.
20
+ if interactive
21
+ system(command_parts.join(" "))
22
+ else
23
+ shell.exec!(command_parts.join(" "))
21
24
  end
25
+ end
26
+
27
+ def apply_file(shell, file_path, kubeconfig_path: nil, namespace: nil)
28
+ kubectl_run(shell, "apply -f #{file_path}", kubeconfig_path: kubeconfig_path, namespace: namespace)
29
+ end
22
30
 
23
- command_parts << "kubectl exec"
31
+ def exec(shell, pod_name, command, args: nil, kubeconfig_path: nil, interactive: false, namespace: nil)
32
+ command_parts = []
33
+ command_parts << "exec"
24
34
 
25
35
  if args
26
36
  command_parts << args
@@ -28,16 +38,16 @@ class KuberKit::Shell::Commands::KubectlCommands
28
38
 
29
39
  command_parts << pod_name
30
40
  command_parts << "-- #{command}"
41
+ kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, interactive: interactive, namespace: namespace)
42
+ end
31
43
 
32
- # TODO: investigate how to do it with shell.
33
- if interactive
34
- system(command_parts.join(" "))
35
- else
36
- shell.exec!(command_parts.join(" "))
37
- end
44
+ def delete_resource(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
45
+ command = %Q{delete #{resource_type} #{resource_name}}
46
+
47
+ kubectl_run(shell, command, kubeconfig_path: kubeconfig_path, namespace: namespace)
38
48
  end
39
49
 
40
- def rolling_restart(shell, deployment_name, kubeconfig_path: nil)
50
+ def rolling_restart(shell, deployment_name, kubeconfig_path: nil, namespace: nil)
41
51
  patch_deployment(shell, deployment_name, {
42
52
  spec: {
43
53
  template: {
@@ -48,19 +58,14 @@ class KuberKit::Shell::Commands::KubectlCommands
48
58
  }
49
59
  }
50
60
  }
51
- }, kubeconfig_path: kubeconfig_path)
61
+ }, kubeconfig_path: kubeconfig_path, namespace: namespace)
52
62
  end
53
63
 
54
- def patch_deployment(shell, deployment_name, specs, kubeconfig_path: nil)
55
- command_parts = []
56
- if kubeconfig_path
57
- command_parts << "KUBECONFIG=#{kubeconfig_path}"
58
- end
59
-
64
+ def patch_deployment(shell, deployment_name, specs, kubeconfig_path: nil, namespace: nil)
60
65
  specs_json = JSON.dump(specs).gsub('"', '\"')
61
66
 
62
- command_parts << %Q{kubectl patch deployment #{deployment_name} -p "#{specs_json}"}
67
+ command = %Q{patch deployment #{deployment_name} -p "#{specs_json}"}
63
68
 
64
- shell.exec!(command_parts.join(" "))
69
+ kubectl_run(shell, command, kubeconfig_path: kubeconfig_path, namespace: namespace)
65
70
  end
66
71
  end
@@ -30,8 +30,8 @@ class KuberKit::Shell::LocalShell < KuberKit::Shell::AbstractShell
30
30
  result
31
31
  end
32
32
 
33
- def sync(local_path, remote_path, exclude: nil)
34
- rsync_commands.rsync(self, local_path, remote_path, exclude: exclude)
33
+ def sync(local_path, remote_path, exclude: nil, delete: true)
34
+ rsync_commands.rsync(self, local_path, remote_path, exclude: exclude, delete: delete)
35
35
  end
36
36
 
37
37
  def read(file_path)
@@ -56,5 +56,7 @@ class KuberKit::Shell::SshSession
56
56
  end
57
57
 
58
58
  stdout_data
59
+ rescue Net::SSH::Exception => e
60
+ raise SshSessionError, "Shell command failed: #{command}\r\n#{e.message}"
59
61
  end
60
62
  end
@@ -38,11 +38,12 @@ class KuberKit::Shell::SshShell < KuberKit::Shell::LocalShell
38
38
  raise ShellError.new(e.message)
39
39
  end
40
40
 
41
- def sync(local_path, remote_path, exclude: nil)
41
+ def sync(local_path, remote_path, exclude: nil, delete: true)
42
42
  rsync_commands.rsync(
43
43
  local_shell, local_path, remote_path,
44
44
  target_host: "#{ssh_session.user}@#{ssh_session.host}",
45
- exclude: exclude
45
+ exclude: exclude,
46
+ delete: delete
46
47
  )
47
48
  end
48
49
 
@@ -1,3 +1,3 @@
1
1
  module KuberKit
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuber_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Khaziev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2020-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: contracts-lite
@@ -257,6 +257,7 @@ files:
257
257
  - lib/kuber_kit/service_deployer/service_list_resolver.rb
258
258
  - lib/kuber_kit/service_deployer/strategies/abstract.rb
259
259
  - lib/kuber_kit/service_deployer/strategies/kubernetes.rb
260
+ - lib/kuber_kit/service_deployer/strategies/kubernetes_runner.rb
260
261
  - lib/kuber_kit/service_deployer/strategy_detector.rb
261
262
  - lib/kuber_kit/service_reader/action_handler.rb
262
263
  - lib/kuber_kit/service_reader/reader.rb
@@ -283,7 +284,7 @@ homepage: https://github.com/ArtStation/kuber_kit
283
284
  licenses:
284
285
  - MIT
285
286
  metadata: {}
286
- post_install_message:
287
+ post_install_message:
287
288
  rdoc_options: []
288
289
  require_paths:
289
290
  - lib
@@ -299,7 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
299
300
  version: '0'
300
301
  requirements: []
301
302
  rubygems_version: 3.0.8
302
- signing_key:
303
+ signing_key:
303
304
  specification_version: 4
304
305
  summary: Docker Containers Build & Deployment
305
306
  test_files: []