kubecontrol 0.1.1 → 0.1.2
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/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +4 -0
- data/lib/kubecontrol/client.rb +7 -5
- data/lib/kubecontrol/pod.rb +9 -2
- data/lib/kubecontrol/version.rb +1 -1
- data/spec/kubecontrol/client_spec.rb +15 -8
- data/spec/kubecontrol/pod_spec.rb +36 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78e24714ab4e03f425c86d2391a2952e34acacda235c312dcd66e49632c9b9a9
|
4
|
+
data.tar.gz: b3e7aac86f9053f4bb266f8701a1f1b756a98011ba43f1b3e398a99f342982ea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3fb70722607a2c54b322f13c49e5960fcc428f34e9682af831f4a006ae3863196b648c174fe92ab09317ba9013dd0204de523b35cf85cf3fe9006fa647e36da
|
7
|
+
data.tar.gz: c741103c7f8f6797706f6156368b8bbef588fe8c1876f4fd44ec639b830e44d655256d3fa67a410c2ebd9374588560f86bb0c1efc21d8a3961a9e02814ac21a4
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/lib/kubecontrol/client.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'open3'
|
1
2
|
require_relative 'pod'
|
2
3
|
|
3
4
|
module Kubecontrol
|
@@ -11,13 +12,13 @@ module Kubecontrol
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def pods
|
14
|
-
get_pods_result = kubectl_command('get pods')
|
15
|
+
get_pods_result, _stderr, _exit_code = kubectl_command('get pods')
|
15
16
|
return [] if get_pods_result.empty?
|
16
17
|
|
17
18
|
pods_array = get_pods_result.split
|
18
19
|
pods_array.shift 5 # remove output table headers
|
19
20
|
pods_array.each_slice(5).map do |pod_data|
|
20
|
-
Pod.new(*pod_data)
|
21
|
+
Pod.new(*pod_data, namespace: namespace, client: self)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
@@ -25,10 +26,11 @@ module Kubecontrol
|
|
25
26
|
pods.find { |pod| pod.name.match?(name_regex) }
|
26
27
|
end
|
27
28
|
|
28
|
-
private
|
29
|
-
|
30
29
|
def kubectl_command(command)
|
31
|
-
|
30
|
+
stdout_data, stderr_data, status = Open3.capture3("kubectl -n #{namespace} #{command}")
|
31
|
+
exit_code = status.exitstatus
|
32
|
+
|
33
|
+
[stdout_data, stderr_data, exit_code]
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
data/lib/kubecontrol/pod.rb
CHANGED
@@ -2,14 +2,16 @@ module Kubecontrol
|
|
2
2
|
class Pod
|
3
3
|
RUNNING = 'Running'.freeze
|
4
4
|
|
5
|
-
attr_reader :name, :ready, :status, :restarts, :age
|
5
|
+
attr_reader :name, :ready, :status, :restarts, :age, :namespace, :client
|
6
6
|
|
7
|
-
def initialize(name, ready, status, restarts, age)
|
7
|
+
def initialize(name, ready, status, restarts, age, namespace:, client:)
|
8
8
|
@name = name
|
9
9
|
@ready = ready
|
10
10
|
@status = status
|
11
11
|
@restarts = restarts
|
12
12
|
@age = age
|
13
|
+
@namespace = namespace
|
14
|
+
@client = client
|
13
15
|
end
|
14
16
|
|
15
17
|
def stopped?
|
@@ -19,5 +21,10 @@ module Kubecontrol
|
|
19
21
|
def running?
|
20
22
|
@status == RUNNING
|
21
23
|
end
|
24
|
+
|
25
|
+
def exec(command)
|
26
|
+
stdout_data, stderr_data, exit_code = @client.kubectl_command("exec -i #{name} -- sh -c \"#{command.gsub('"', '\"')}\"")
|
27
|
+
[stdout_data, stderr_data, exit_code]
|
28
|
+
end
|
22
29
|
end
|
23
30
|
end
|
data/lib/kubecontrol/version.rb
CHANGED
@@ -7,12 +7,19 @@ RSpec.describe Kubecontrol::Client do
|
|
7
7
|
let(:pod_status) { 'Running' }
|
8
8
|
let(:pod_restarts) { '0' }
|
9
9
|
let(:pod_age) { '20d' }
|
10
|
-
|
10
|
+
|
11
|
+
let(:get_pods_std_out) do
|
11
12
|
<<~RUBY
|
12
13
|
NAME READY STATUS RESTARTS AGE
|
13
14
|
#{pod_name} #{pod_ready} #{pod_status} #{pod_restarts} #{pod_age}
|
14
15
|
RUBY
|
15
16
|
end
|
17
|
+
let(:get_pods_std_err) { '' }
|
18
|
+
let(:process_status) do
|
19
|
+
fork { exit }
|
20
|
+
$CHILD_STATUS
|
21
|
+
end
|
22
|
+
let(:get_pods_response) { [get_pods_std_out, get_pods_std_err, process_status] }
|
16
23
|
|
17
24
|
describe '#initialize' do
|
18
25
|
subject { Kubecontrol::Client }
|
@@ -47,12 +54,12 @@ RSpec.describe Kubecontrol::Client do
|
|
47
54
|
subject { Kubecontrol::Client.new.pods }
|
48
55
|
|
49
56
|
it 'send a kubectl request to the command line' do
|
50
|
-
|
57
|
+
expect(Open3).to receive(:capture3).with('kubectl -n default get pods').and_return get_pods_response
|
51
58
|
subject
|
52
59
|
end
|
53
60
|
|
54
61
|
it 'returns an array of Kubecontrol::Pods' do
|
55
|
-
|
62
|
+
allow(Open3).to receive(:capture3).and_return get_pods_response
|
56
63
|
result = subject
|
57
64
|
expect(result).to be_an_instance_of Array
|
58
65
|
expect(result.length).to eq 1
|
@@ -60,8 +67,10 @@ RSpec.describe Kubecontrol::Client do
|
|
60
67
|
end
|
61
68
|
|
62
69
|
context 'no pods found' do
|
70
|
+
let(:get_pods_std_out) { '' }
|
71
|
+
|
63
72
|
before do
|
64
|
-
|
73
|
+
allow(Open3).to receive(:capture3).and_return get_pods_response
|
65
74
|
end
|
66
75
|
|
67
76
|
it { is_expected.to be_empty }
|
@@ -72,7 +81,7 @@ RSpec.describe Kubecontrol::Client do
|
|
72
81
|
subject { Kubecontrol::Client.new.find_pod_by_name(pod_name) }
|
73
82
|
|
74
83
|
before do
|
75
|
-
|
84
|
+
allow(Open3).to receive(:capture3).and_return get_pods_response
|
76
85
|
end
|
77
86
|
|
78
87
|
it { is_expected.to be_an_instance_of Kubecontrol::Pod }
|
@@ -82,9 +91,7 @@ RSpec.describe Kubecontrol::Client do
|
|
82
91
|
end
|
83
92
|
|
84
93
|
context 'pod does not exist' do
|
85
|
-
|
86
|
-
allow_any_instance_of(Kubecontrol::Client).to receive(:`).and_return ''
|
87
|
-
end
|
94
|
+
let(:get_pods_std_out) { '' }
|
88
95
|
|
89
96
|
it { is_expected.to be_nil }
|
90
97
|
end
|
@@ -6,9 +6,11 @@ RSpec.describe Kubecontrol::Pod do
|
|
6
6
|
let(:pod_status) { 'Running' }
|
7
7
|
let(:pod_restarts) { '0' }
|
8
8
|
let(:pod_age) { '20d' }
|
9
|
+
let(:namespace) { 'default' }
|
10
|
+
let(:client) { Kubecontrol::Client.new }
|
9
11
|
|
10
12
|
describe '#initialize' do
|
11
|
-
subject { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age) }
|
13
|
+
subject { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace: namespace, client: client) }
|
12
14
|
|
13
15
|
it 'sets the pod name field' do
|
14
16
|
expect(subject.name).to eq pod_name
|
@@ -29,6 +31,14 @@ RSpec.describe Kubecontrol::Pod do
|
|
29
31
|
it 'sets the pod age field' do
|
30
32
|
expect(subject.age).to eq pod_age
|
31
33
|
end
|
34
|
+
|
35
|
+
it 'sets the pod namespace' do
|
36
|
+
expect(subject.namespace).to eq namespace
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'sets the client' do
|
40
|
+
expect(subject.client).to eq client
|
41
|
+
end
|
32
42
|
end
|
33
43
|
|
34
44
|
describe '#running?' do
|
@@ -58,4 +68,29 @@ RSpec.describe Kubecontrol::Pod do
|
|
58
68
|
it { is_expected.to eq true }
|
59
69
|
end
|
60
70
|
end
|
71
|
+
|
72
|
+
describe '#exec' do
|
73
|
+
let(:command) { 'ls' }
|
74
|
+
let(:kubectl_command) { "exec -i #{pod.name} -- sh -c \"#{command.gsub('"', '\"')}\"" }
|
75
|
+
let(:std_out) { "bin\ndev\netc\nhome\nlib" }
|
76
|
+
let(:std_err) { '' }
|
77
|
+
let(:status_code) { 0 }
|
78
|
+
let(:kubectl_command_response) { [std_out, std_err, status_code] }
|
79
|
+
let(:pod) { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace: namespace, client: client) }
|
80
|
+
|
81
|
+
subject { pod.exec(command) }
|
82
|
+
|
83
|
+
it 'sends the exec command via Kubecontrol::Client#kubectl_command' do
|
84
|
+
expect(pod.client).to receive(:kubectl_command).with(kubectl_command).and_return kubectl_command_response
|
85
|
+
subject
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'returns an array of std_out, std_err, and status code' do
|
89
|
+
allow(pod.client).to receive(:kubectl_command).with(kubectl_command).and_return kubectl_command_response
|
90
|
+
std_out_response, std_err_response, status_code_response = subject
|
91
|
+
expect(std_out_response).to eq std_out
|
92
|
+
expect(std_err_response).to eq std_err
|
93
|
+
expect(status_code_response).to eq status_code
|
94
|
+
end
|
95
|
+
end
|
61
96
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kubecontrol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Adkins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|