kuber_kit 0.3.3 → 0.3.8
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -6
- data/TODO.md +2 -2
- data/lib/kuber_kit.rb +2 -0
- data/lib/kuber_kit/actions/kubectl_attacher.rb +7 -1
- data/lib/kuber_kit/actions/kubectl_console.rb +32 -0
- data/lib/kuber_kit/actions/kubectl_logs.rb +37 -0
- data/lib/kuber_kit/actions/service_deployer.rb +5 -4
- data/lib/kuber_kit/cli.rb +32 -6
- data/lib/kuber_kit/container.rb +8 -0
- data/lib/kuber_kit/core/context_helper/base_helper.rb +7 -0
- data/lib/kuber_kit/service_deployer/strategies/docker.rb +7 -1
- data/lib/kuber_kit/service_deployer/strategies/docker_compose.rb +5 -3
- data/lib/kuber_kit/shell/commands/docker_commands.rb +2 -1
- data/lib/kuber_kit/shell/commands/docker_compose_commands.rb +8 -3
- data/lib/kuber_kit/shell/commands/kubectl_commands.rb +29 -6
- data/lib/kuber_kit/ui/interactive.rb +7 -1
- data/lib/kuber_kit/ui/simple.rb +2 -1
- data/lib/kuber_kit/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdefb838f103f417001c7ff0167d95bc985a1db8b8b97b505426e5f2b98db7f3
|
4
|
+
data.tar.gz: 13f8f1103796553e56a874064e36a33e66931e73917a141e6fad049c5ced73da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbd45f1537f9ecc3b2d29a090f85921b47ffda91093aefa7f150d5101ff3bc147f30966febdb37352e6dfb3f7e245a84423a649a0f9d9cdd586dd597634be96c
|
7
|
+
data.tar.gz: 947ced5481b927993ed9462255fcf7ed656c718e9642fc0f8888b14a41aa630947b89d96f56d9b5a571956c5475c6e711c3a1b604e333b617a5208292e39e9ca
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kuber_kit (0.3.
|
4
|
+
kuber_kit (0.3.8)
|
5
5
|
cli-ui
|
6
6
|
contracts-lite
|
7
7
|
dry-auto_inject
|
@@ -19,16 +19,14 @@ GEM
|
|
19
19
|
docile (1.3.2)
|
20
20
|
dry-auto_inject (0.7.0)
|
21
21
|
dry-container (>= 0.3.4)
|
22
|
-
dry-configurable (0.
|
22
|
+
dry-configurable (0.12.0)
|
23
23
|
concurrent-ruby (~> 1.0)
|
24
|
-
dry-core (~> 0.
|
25
|
-
dry-equalizer (~> 0.2)
|
24
|
+
dry-core (~> 0.5, >= 0.5.0)
|
26
25
|
dry-container (0.7.2)
|
27
26
|
concurrent-ruby (~> 1.0)
|
28
27
|
dry-configurable (~> 0.1, >= 0.1.3)
|
29
|
-
dry-core (0.
|
28
|
+
dry-core (0.5.0)
|
30
29
|
concurrent-ruby (~> 1.0)
|
31
|
-
dry-equalizer (0.3.0)
|
32
30
|
method_source (1.0.0)
|
33
31
|
net-ssh (6.1.0)
|
34
32
|
pry (0.13.1)
|
data/TODO.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
+
- https://ttytoolkit.org/
|
2
|
+
- kit status should show the list of services and their status, with ability to select & view logs
|
1
3
|
- list services and require confirmation before deployment
|
2
|
-
- kit attach should list available deployments/pods, and ask for specific container if it has multiple containers
|
3
4
|
- add kit logs support, should work similar to kit attach
|
4
5
|
- allow deploying only services enabled for specific configuration
|
5
6
|
- find a way to always deploy some service, e.g. for migrations and env_files
|
6
|
-
- add ability to set container health checks
|
7
7
|
- template should be able to set default attributes
|
8
8
|
- template should be able to depend on image?
|
data/lib/kuber_kit.rb
CHANGED
@@ -166,6 +166,8 @@ module KuberKit
|
|
166
166
|
autoload :ConfigurationLoader, 'actions/configuration_loader'
|
167
167
|
autoload :KubectlApplier, 'actions/kubectl_applier'
|
168
168
|
autoload :KubectlAttacher, 'actions/kubectl_attacher'
|
169
|
+
autoload :KubectlConsole, 'actions/kubectl_console'
|
170
|
+
autoload :KubectlLogs, 'actions/kubectl_logs'
|
169
171
|
end
|
170
172
|
|
171
173
|
module Extensions
|
@@ -5,11 +5,17 @@ class KuberKit::Actions::KubectlAttacher
|
|
5
5
|
"ui"
|
6
6
|
]
|
7
7
|
|
8
|
-
Contract String, Hash => Any
|
8
|
+
Contract Maybe[String], Hash => Any
|
9
9
|
def call(pod_name, options)
|
10
10
|
kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
|
11
11
|
deployer_namespace = KuberKit.current_configuration.deployer_namespace
|
12
12
|
|
13
|
+
if !pod_name
|
14
|
+
resources = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
|
15
|
+
options = resources.split(" ").map{|d| "deploy/#{d}" }
|
16
|
+
pod_name = ui.prompt("Please select deployment to attach", options)
|
17
|
+
end
|
18
|
+
|
13
19
|
kubectl_commands.exec(
|
14
20
|
local_shell, pod_name, "bash", args: "-it",
|
15
21
|
kubeconfig_path: kubeconfig_path,
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class KuberKit::Actions::KubectlConsole
|
2
|
+
include KuberKit::Import[
|
3
|
+
"shell.kubectl_commands",
|
4
|
+
"shell.local_shell",
|
5
|
+
"ui"
|
6
|
+
]
|
7
|
+
|
8
|
+
Contract Maybe[String], Hash => Any
|
9
|
+
def call(pod_name, options)
|
10
|
+
kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
|
11
|
+
deployer_namespace = KuberKit.current_configuration.deployer_namespace
|
12
|
+
|
13
|
+
if !pod_name
|
14
|
+
resources = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
|
15
|
+
options = resources.split(" ").map{|d| "deploy/#{d}" }
|
16
|
+
pod_name = ui.prompt("Please select deployment to attach", options)
|
17
|
+
end
|
18
|
+
|
19
|
+
kubectl_commands.exec(
|
20
|
+
local_shell, pod_name, "bin/console", args: "-it",
|
21
|
+
kubeconfig_path: kubeconfig_path,
|
22
|
+
interactive: true,
|
23
|
+
namespace: deployer_namespace
|
24
|
+
)
|
25
|
+
|
26
|
+
true
|
27
|
+
rescue KuberKit::Error => e
|
28
|
+
ui.print_error("Error", e.message)
|
29
|
+
|
30
|
+
false
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class KuberKit::Actions::KubectlLogs
|
2
|
+
include KuberKit::Import[
|
3
|
+
"shell.kubectl_commands",
|
4
|
+
"shell.local_shell",
|
5
|
+
"ui"
|
6
|
+
]
|
7
|
+
|
8
|
+
Contract Maybe[String], Hash => Any
|
9
|
+
def call(pod_name, options)
|
10
|
+
kubeconfig_path = KuberKit.current_configuration.kubeconfig_path
|
11
|
+
deployer_namespace = KuberKit.current_configuration.deployer_namespace
|
12
|
+
|
13
|
+
if !pod_name
|
14
|
+
deployments = kubectl_commands.get_resources(local_shell, "deployments", jsonpath: ".items[*].metadata.name")
|
15
|
+
deploy_options = deployments.split(" ").map{|d| "deploy/#{d}" }
|
16
|
+
pod_name = ui.prompt("Please select deployment to attach", deploy_options)
|
17
|
+
end
|
18
|
+
|
19
|
+
args = nil
|
20
|
+
if options[:follow]
|
21
|
+
args = "-f"
|
22
|
+
end
|
23
|
+
|
24
|
+
kubectl_commands.logs(
|
25
|
+
local_shell, pod_name,
|
26
|
+
args: args,
|
27
|
+
kubeconfig_path: kubeconfig_path,
|
28
|
+
namespace: deployer_namespace
|
29
|
+
)
|
30
|
+
|
31
|
+
true
|
32
|
+
rescue KuberKit::Error => e
|
33
|
+
ui.print_error("Error", e.message)
|
34
|
+
|
35
|
+
false
|
36
|
+
end
|
37
|
+
end
|
@@ -10,10 +10,11 @@ class KuberKit::Actions::ServiceDeployer
|
|
10
10
|
]
|
11
11
|
|
12
12
|
Contract KeywordArgs[
|
13
|
-
services:
|
14
|
-
tags:
|
13
|
+
services: Maybe[ArrayOf[String]],
|
14
|
+
tags: Maybe[ArrayOf[String]],
|
15
|
+
skip_compile: Maybe[Bool],
|
15
16
|
] => Any
|
16
|
-
def call(services:, tags:)
|
17
|
+
def call(services:, tags:, skip_compile: false)
|
17
18
|
if services.empty? && tags.empty?
|
18
19
|
services, tags = show_tags_selection
|
19
20
|
end
|
@@ -33,7 +34,7 @@ class KuberKit::Actions::ServiceDeployer
|
|
33
34
|
|
34
35
|
images_names = services.map(&:images).flatten.uniq
|
35
36
|
|
36
|
-
compile_images(images_names)
|
37
|
+
compile_images(images_names) unless skip_compile
|
37
38
|
deploy_services(service_names)
|
38
39
|
|
39
40
|
true
|
data/lib/kuber_kit/cli.rb
CHANGED
@@ -31,15 +31,17 @@ class KuberKit::CLI < Thor
|
|
31
31
|
end
|
32
32
|
|
33
33
|
desc "deploy CONTEXT_NAME", "Deploy CONTEXT_NAME with kubectl"
|
34
|
-
method_option :services,
|
35
|
-
method_option :tags,
|
34
|
+
method_option :services, :type => :array, aliases: ["-s"]
|
35
|
+
method_option :tags, :type => :array, aliases: ["-t"]
|
36
|
+
method_option :skip_compile, :type => :boolean, aliases: ["-B"]
|
36
37
|
def deploy
|
37
38
|
KuberKit.set_debug_mode(options[:debug])
|
38
39
|
|
39
40
|
if KuberKit::Container['actions.configuration_loader'].call(options)
|
40
41
|
result = KuberKit::Container['actions.service_deployer'].call(
|
41
|
-
services:
|
42
|
-
tags:
|
42
|
+
services: options[:services] || [],
|
43
|
+
tags: options[:tags] || [],
|
44
|
+
skip_compile: options[:skip_compile] || false
|
43
45
|
)
|
44
46
|
end
|
45
47
|
|
@@ -91,8 +93,8 @@ class KuberKit::CLI < Thor
|
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
94
|
-
desc "attach POD_NAME", "Attach to POD_NAME
|
95
|
-
def attach(pod_name)
|
96
|
+
desc "attach POD_NAME", "Attach to POD_NAME using kubectl"
|
97
|
+
def attach(pod_name = nil)
|
96
98
|
KuberKit.set_debug_mode(options[:debug])
|
97
99
|
|
98
100
|
if KuberKit::Container['actions.configuration_loader'].call(options)
|
@@ -100,6 +102,30 @@ class KuberKit::CLI < Thor
|
|
100
102
|
end
|
101
103
|
end
|
102
104
|
|
105
|
+
desc "launch console in POD_NAME", "Attach to POD_NAME using kubectl & launch bin/console"
|
106
|
+
def console(pod_name = nil)
|
107
|
+
KuberKit.set_debug_mode(options[:debug])
|
108
|
+
|
109
|
+
if KuberKit::Container['actions.configuration_loader'].call(options)
|
110
|
+
KuberKit::Container['actions.kubectl_console'].call(pod_name, options)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
desc "show logs for POD_NAME", "Show logs for POD_NAME using kubectl"
|
115
|
+
method_option :follow, :type => :boolean, aliases: ["-f"]
|
116
|
+
def logs(pod_name = nil)
|
117
|
+
KuberKit.set_debug_mode(options[:debug])
|
118
|
+
|
119
|
+
if KuberKit::Container['actions.configuration_loader'].call(options)
|
120
|
+
KuberKit::Container['actions.kubectl_logs'].call(pod_name, options)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
desc "version", "Print current version"
|
125
|
+
def version
|
126
|
+
puts KuberKit::VERSION
|
127
|
+
end
|
128
|
+
|
103
129
|
def self.exit_on_failure?
|
104
130
|
true
|
105
131
|
end
|
data/lib/kuber_kit/container.rb
CHANGED
@@ -33,6 +33,14 @@ class KuberKit::Container
|
|
33
33
|
KuberKit::Actions::KubectlAttacher.new
|
34
34
|
end
|
35
35
|
|
36
|
+
register "actions.kubectl_console" do
|
37
|
+
KuberKit::Actions::KubectlConsole.new
|
38
|
+
end
|
39
|
+
|
40
|
+
register "actions.kubectl_logs" do
|
41
|
+
KuberKit::Actions::KubectlLogs.new
|
42
|
+
end
|
43
|
+
|
36
44
|
register "configs" do
|
37
45
|
KuberKit::Configs.new
|
38
46
|
end
|
@@ -33,6 +33,13 @@ class KuberKit::Core::ContextHelper::BaseHelper
|
|
33
33
|
KuberKit.global_build_vars
|
34
34
|
end
|
35
35
|
|
36
|
+
def global_build_args
|
37
|
+
unless KuberKit.deprecation_warnings_disabled?
|
38
|
+
puts "DEPRECATION: global_build_args is deprecated, please use global_build_vars instead"
|
39
|
+
end
|
40
|
+
global_build_vars
|
41
|
+
end
|
42
|
+
|
36
43
|
def get_binding
|
37
44
|
binding
|
38
45
|
end
|
@@ -8,6 +8,7 @@ class KuberKit::ServiceDeployer::Strategies::Docker < KuberKit::ServiceDeployer:
|
|
8
8
|
STRATEGY_OPTIONS = [
|
9
9
|
:container_name,
|
10
10
|
:image_name,
|
11
|
+
:detached,
|
11
12
|
:docker_run_args,
|
12
13
|
:docker_run_command,
|
13
14
|
:delete_if_exists
|
@@ -36,6 +37,11 @@ class KuberKit::ServiceDeployer::Strategies::Docker < KuberKit::ServiceDeployer:
|
|
36
37
|
docker_commands.delete_container(shell, container_name)
|
37
38
|
end
|
38
39
|
|
39
|
-
docker_commands.run(
|
40
|
+
docker_commands.run(
|
41
|
+
shell, image.remote_registry_url,
|
42
|
+
run_args: docker_run_args,
|
43
|
+
run_command: docker_run_command,
|
44
|
+
detached: !!strategy_options[:detached]
|
45
|
+
)
|
40
46
|
end
|
41
47
|
end
|
@@ -7,7 +7,8 @@ class KuberKit::ServiceDeployer::Strategies::DockerCompose < KuberKit::ServiceDe
|
|
7
7
|
|
8
8
|
STRATEGY_OPTIONS = [
|
9
9
|
:service_name,
|
10
|
-
:command_name
|
10
|
+
:command_name,
|
11
|
+
:detached
|
11
12
|
]
|
12
13
|
|
13
14
|
Contract KuberKit::Shell::AbstractShell, KuberKit::Core::Service => Any
|
@@ -26,8 +27,9 @@ class KuberKit::ServiceDeployer::Strategies::DockerCompose < KuberKit::ServiceDe
|
|
26
27
|
command_name = strategy_options.fetch(:command_name, "bash")
|
27
28
|
|
28
29
|
docker_compose_commands.run(shell, config_path,
|
29
|
-
service:
|
30
|
-
command:
|
30
|
+
service: service_name,
|
31
|
+
command: command_name,
|
32
|
+
detached: !!strategy_options[:detached]
|
31
33
|
)
|
32
34
|
end
|
33
35
|
end
|
@@ -14,9 +14,10 @@ class KuberKit::Shell::Commands::DockerCommands
|
|
14
14
|
shell.exec!(%Q{docker push #{tag_name}})
|
15
15
|
end
|
16
16
|
|
17
|
-
def run(shell, image_name, run_args: nil, run_command: nil)
|
17
|
+
def run(shell, image_name, run_args: nil, run_command: nil, detached: false)
|
18
18
|
command_parts = []
|
19
19
|
command_parts << "docker run"
|
20
|
+
command_parts << "-d" if detached
|
20
21
|
command_parts << run_args if run_args
|
21
22
|
command_parts << image_name
|
22
23
|
command_parts << run_command if run_command
|
@@ -1,13 +1,18 @@
|
|
1
1
|
class KuberKit::Shell::Commands::DockerComposeCommands
|
2
|
-
def run(shell, path, service:, command:, interactive: false)
|
2
|
+
def run(shell, path, service:, command:, interactive: false, detached: false)
|
3
3
|
command_parts = [
|
4
4
|
"docker-compose",
|
5
5
|
"-f #{path}",
|
6
6
|
"run",
|
7
|
-
service,
|
8
|
-
command
|
9
7
|
]
|
10
8
|
|
9
|
+
if detached
|
10
|
+
command_parts << "-d"
|
11
|
+
end
|
12
|
+
|
13
|
+
command_parts << service
|
14
|
+
command_parts << command
|
15
|
+
|
11
16
|
if interactive
|
12
17
|
shell.interactive!(command_parts.join(" "))
|
13
18
|
else
|
@@ -40,15 +40,38 @@ class KuberKit::Shell::Commands::KubectlCommands
|
|
40
40
|
kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, interactive: interactive, namespace: namespace)
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
43
|
+
def logs(shell, pod_name, args: nil, kubeconfig_path: nil, namespace: nil)
|
44
|
+
command_parts = []
|
45
|
+
command_parts << "logs"
|
46
|
+
|
47
|
+
if args
|
48
|
+
command_parts << args
|
49
|
+
end
|
50
|
+
|
51
|
+
command_parts << pod_name
|
52
|
+
kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, interactive: true, namespace: namespace)
|
46
53
|
end
|
47
54
|
|
48
|
-
def
|
49
|
-
|
55
|
+
def get_resources(shell, resource_type, field_selector: nil, jsonpath: ".items[*].metadata.name", kubeconfig_path: nil, namespace: nil)
|
56
|
+
command_parts = []
|
57
|
+
command_parts << "get #{resource_type}"
|
50
58
|
|
51
|
-
|
59
|
+
if field_selector
|
60
|
+
command_parts << "--field-selector=#{field_selector}"
|
61
|
+
end
|
62
|
+
|
63
|
+
if jsonpath
|
64
|
+
command_parts << "-o jsonpath='{#{jsonpath}}'"
|
65
|
+
end
|
66
|
+
|
67
|
+
kubectl_run(shell, command_parts, kubeconfig_path: kubeconfig_path, namespace: namespace)
|
68
|
+
end
|
69
|
+
|
70
|
+
def resource_exists?(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
|
71
|
+
result = get_resources(shell, resource_type,
|
72
|
+
field_selector: "metadata.name=#{resource_name}", kubeconfig_path: kubeconfig_path, namespace: namespace
|
73
|
+
)
|
74
|
+
result && result != ""
|
52
75
|
end
|
53
76
|
|
54
77
|
def delete_resource(shell, resource_type, resource_name, kubeconfig_path: nil, namespace: nil)
|
@@ -29,7 +29,13 @@ class KuberKit::UI::Interactive
|
|
29
29
|
def prompt(text, options, &callback)
|
30
30
|
CLI::UI::Prompt.ask(text) do |handler|
|
31
31
|
options.each do |option|
|
32
|
-
|
32
|
+
if callback
|
33
|
+
handler.option(option, &callback)
|
34
|
+
else
|
35
|
+
handler.option(option) do |selection|
|
36
|
+
selection
|
37
|
+
end
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
data/lib/kuber_kit/ui/simple.rb
CHANGED
data/lib/kuber_kit/version.rb
CHANGED
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.3.
|
4
|
+
version: 0.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Iskander Khaziev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: contracts-lite
|
@@ -191,6 +191,8 @@ files:
|
|
191
191
|
- lib/kuber_kit/actions/image_compiler.rb
|
192
192
|
- lib/kuber_kit/actions/kubectl_applier.rb
|
193
193
|
- lib/kuber_kit/actions/kubectl_attacher.rb
|
194
|
+
- lib/kuber_kit/actions/kubectl_console.rb
|
195
|
+
- lib/kuber_kit/actions/kubectl_logs.rb
|
194
196
|
- lib/kuber_kit/actions/service_deployer.rb
|
195
197
|
- lib/kuber_kit/actions/service_reader.rb
|
196
198
|
- lib/kuber_kit/actions/template_reader.rb
|