kubecontrol 0.3.5 → 0.4.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: 16ffbd150b8509fd48aafeb8caf01321335687af651155c69737e0e931b0fa58
4
- data.tar.gz: 2c64c013191b415b3296e43fbd20a95b2ad82c76207d7a5f4ce2878914fa10ca
3
+ metadata.gz: 947d4bdb94d24c41570d476fe6a57692b26a4c04b44af915dc334c15842f586c
4
+ data.tar.gz: abd66e519fd96e3f871e6c57c0593f3fd9894d0762df6f295f4c0d399d354eda
5
5
  SHA512:
6
- metadata.gz: e4f4c1831fa2186e2b17c68c6bc2333dab39b0709c7cd887b775d62de93d1471a00cef49afb80937b62a8736b6fe5508db66dc9605a4da85d6538fc4b4b71d2c
7
- data.tar.gz: 1ebf4b5a383a8300ba99e72871abe9dd878852610ab09a9e3badaf2c30ef113e54730a313bb2af00dd5f568894ed6bbb2f88f667b3f9627fb42198357c33dc73
6
+ metadata.gz: 1c678d96f09936c328f11859639d577d7faeba1903d1267ab226f9c2bc4ccce3af168d54ea4dd5b313ee0237987c6e6ac17efbe6249954f181951ce3fff8288d
7
+ data.tar.gz: e050203e479656d5d9346611e7f7861c2de85c0102b2c620a769df5e31671febe5a261713b245b4e225a0fb608018ff4438bc6b44bb1ce83e686c0d416cfc9b2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # v0.4.5 / 02-24-2020
2
+ - [ENHANCEMENT] Kubecontrol::Resources - Move all existing resources(Pod, Deployment, Service, Secret, Stateful Set) into a 'Resources' namespace.
3
+ - [FEATURE] Kubecontrol::Secret
4
+ - [FEATURE] Kubecontrol::Client#apply
5
+
1
6
  # v0.3.5 / 02-21-2020
2
7
  - [FEATURE] Kubecontrol::Deployment
3
8
  - [FEATURE] Kubecontrol::StatefulSet
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kubecontrol (0.3.5)
4
+ kubecontrol (0.4.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -27,6 +27,10 @@ require 'kubecontrol'
27
27
  # create new client
28
28
  kubectl_client = Kubecontrol.client.new
29
29
 
30
+ #Exec an kubectl apply command
31
+ std_out, std_err, exit_code = kubectl_client.apply(file_path: 'path/to/deployment.yaml')
32
+ std_out, std_err, exit_code = kubectl_client.apply(kustomization_dir: 'path/to/kustomization_dir')
33
+
30
34
  #Exec an arbitrary kubectl command
31
35
  std_out, std_err, exit_code = kubectl_client.kubectl_command 'get deployments'
32
36
  ```
@@ -145,6 +149,28 @@ stateful_set.all_ready?
145
149
  stateful_set.scale(5)
146
150
  ```
147
151
 
152
+ #### Secrets
153
+
154
+ ```ruby
155
+ require 'kubecontrol'
156
+
157
+ # create new client
158
+ kubectl_client = Kubecontrol.client.new
159
+
160
+ # all secrets for namespace
161
+ secrets = kubectl_client.secrets
162
+
163
+ # find secret by name regex
164
+ secret = kubectl_client.find_secret_by_name /foo-api-.*/
165
+
166
+ # access secret information
167
+ secret.name
168
+ secret.type
169
+ secret.data
170
+ secret.age
171
+ secret.namespace
172
+ ```
173
+
148
174
  ## Development
149
175
 
150
176
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/kubecontrol.rb CHANGED
@@ -1,9 +1,6 @@
1
1
  require 'kubecontrol/version'
2
2
  require 'kubecontrol/client'
3
- require 'kubecontrol/pod'
4
- require 'kubecontrol/service'
5
- require 'kubecontrol/stateful_set'
6
- require 'kubecontrol/deployment'
3
+ require 'kubecontrol/resources'
7
4
 
8
5
  module Kubecontrol
9
6
  class Error < StandardError; end
@@ -1,8 +1,5 @@
1
1
  require 'open3'
2
- require_relative 'pod'
3
- require_relative 'deployment'
4
- require_relative 'stateful_set'
5
- require_relative 'service'
2
+ require_relative 'resources'
6
3
 
7
4
  module Kubecontrol
8
5
  class Client
@@ -14,20 +11,38 @@ module Kubecontrol
14
11
  @namespace = namespace
15
12
  end
16
13
 
14
+ def apply(file_path: nil, kustomization_dir: nil)
15
+ raise ArgumentError.new('Must pass a file_path or kustomization_dir keyword argument') if (file_path.nil? && kustomization_dir.nil?) || (file_path && kustomization_dir)
16
+
17
+ if file_path
18
+ kubectl_command("apply -f #{file_path}")
19
+ else
20
+ kubectl_command("apply -k #{kustomization_dir}")
21
+ end
22
+ end
23
+
17
24
  def pods
18
- get_resource(Pod, 5)
25
+ get_resource(Resources::Pod, 5)
19
26
  end
20
27
 
21
28
  def deployments
22
- get_resource(Deployment, 5)
29
+ get_resource(Resources::Deployment, 5)
23
30
  end
24
31
 
25
32
  def stateful_sets
26
- get_resource(StatefulSet, 3)
33
+ get_resource(Resources::StatefulSet, 3)
27
34
  end
28
35
 
29
36
  def services
30
- get_resource(Service, 6)
37
+ get_resource(Resources::Service, 6)
38
+ end
39
+
40
+ def secrets
41
+ get_resource(Resources::Secret, 4)
42
+ end
43
+
44
+ def find_secret_by_name(name_regex)
45
+ secrets.find { |secret| secret.name.match?(name_regex) }
31
46
  end
32
47
 
33
48
  def find_service_by_name(name_regex)
@@ -0,0 +1,5 @@
1
+ require_relative 'resources/deployment'
2
+ require_relative 'resources/pod'
3
+ require_relative 'resources/secret'
4
+ require_relative 'resources/service'
5
+ require_relative 'resources/stateful_set'
@@ -0,0 +1,40 @@
1
+ module Kubecontrol
2
+ module Resources
3
+ class Deployment
4
+ RESOURCE_NAME = 'deployments'.freeze
5
+
6
+ attr_reader :name, :ready, :up_to_date, :available, :age, :namespace, :client
7
+
8
+ def initialize(name, ready, up_to_date, available, age, namespace, client)
9
+ @name = name
10
+ @ready = ready
11
+ @up_to_date = up_to_date
12
+ @available = available
13
+ @age = age
14
+ @namespace = namespace
15
+ @client = client
16
+ end
17
+
18
+ def ready?
19
+ @ready.split('/').first != '0'
20
+ end
21
+
22
+ def all_ready?
23
+ max_pods = @ready.split('/').last
24
+ @ready == "#{max_pods}/#{max_pods}"
25
+ end
26
+
27
+ def available?
28
+ @available.to_i > 1
29
+ end
30
+
31
+ def up_to_date?
32
+ @up_to_date.to_i > 1
33
+ end
34
+
35
+ def scale(count)
36
+ @client.kubectl_command("scale deployment #{@name} --replicas=#{count}")
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ module Kubecontrol
2
+ module Resources
3
+ class Pod
4
+ RESOURCE_NAME = 'pods'.freeze
5
+ RUNNING = 'Running'.freeze
6
+
7
+ attr_reader :name, :ready, :status, :restarts, :age, :namespace, :client
8
+
9
+ def initialize(name, ready, status, restarts, age, namespace, client)
10
+ @name = name
11
+ @ready = ready
12
+ @status = status
13
+ @restarts = restarts
14
+ @age = age
15
+ @namespace = namespace
16
+ @client = client
17
+ end
18
+
19
+ def stopped?
20
+ @status != RUNNING
21
+ end
22
+
23
+ def running?
24
+ @status == RUNNING
25
+ end
26
+
27
+ def ready?
28
+ pod_containers = @ready.split('/').last
29
+ @ready == "#{pod_containers}/#{pod_containers}"
30
+ end
31
+
32
+ def exec(command)
33
+ @client.kubectl_command("exec -i #{name} -- sh -c \"#{command.gsub('"', '\"')}\"")
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ module Kubecontrol
2
+ module Resources
3
+ class Secret
4
+ RESOURCE_NAME = 'secrets'.freeze
5
+
6
+ attr_reader :name, :type, :data, :age, :namespace, :client
7
+
8
+ def initialize(name, type, data, age, namespace, client)
9
+ @name = name
10
+ @type = type
11
+ @data = data
12
+ @age = age
13
+ @namespace = namespace
14
+ @client = client
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Kubecontrol
2
+ module Resources
3
+ class Service
4
+ RESOURCE_NAME = 'services'.freeze
5
+
6
+ attr_reader :name, :age, :type, :cluster_ip, :external_ip, :ports, :namespace, :client
7
+
8
+ def initialize(name, type, cluster_ip, external_ip, ports, age, namespace, client)
9
+ @name = name
10
+ @age = age
11
+ @type = type
12
+ @cluster_ip = cluster_ip
13
+ @external_ip = external_ip
14
+ @ports = ports
15
+ @namespace = namespace
16
+ @client = client
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,30 @@
1
+ module Kubecontrol
2
+ module Resources
3
+ class StatefulSet
4
+ RESOURCE_NAME = 'statefulsets'.freeze
5
+
6
+ attr_reader :name, :ready, :age, :namespace, :client
7
+
8
+ def initialize(name, ready, age, namespace, client)
9
+ @name = name
10
+ @ready = ready
11
+ @age = age
12
+ @namespace = namespace
13
+ @client = client
14
+ end
15
+
16
+ def ready?
17
+ @ready.split('/').first != '0'
18
+ end
19
+
20
+ def all_ready?
21
+ max_pods = @ready.split('/').last
22
+ @ready == "#{max_pods}/#{max_pods}"
23
+ end
24
+
25
+ def scale(count)
26
+ @client.kubectl_command("scale statefulset #{@name} --replicas=#{count}")
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module Kubecontrol
2
- VERSION = '0.3.5'.freeze
2
+ VERSION = '0.4.5'.freeze
3
3
  end
@@ -54,6 +54,17 @@ RSpec.describe Kubecontrol::Client do
54
54
  let(:get_stateful_sets_std_err) { '' }
55
55
  let(:get_stateful_sets_response) { [get_stateful_sets_std_out, get_stateful_sets_std_err, process_status] }
56
56
 
57
+ let(:secret_type) { 'Opaque' }
58
+ let(:secret_data) { '5' }
59
+ let(:get_secrets_std_out) do
60
+ <<~RUBY
61
+ NAME TYPE DATA AGE
62
+ #{name} #{secret_type} #{secret_data} #{age}
63
+ RUBY
64
+ end
65
+ let(:get_secrets_std_err) { '' }
66
+ let(:get_secrets_response) { [get_secrets_std_out, get_secrets_std_err, process_status] }
67
+
57
68
  describe '#initialize' do
58
69
  subject { Kubecontrol::Client }
59
70
 
@@ -83,6 +94,90 @@ RSpec.describe Kubecontrol::Client do
83
94
  end
84
95
  end
85
96
 
97
+ describe '#kubectl_command' do
98
+ let(:command) { 'get pods' }
99
+
100
+ subject { Kubecontrol::Client.new.kubectl_command(command) }
101
+
102
+ before do
103
+ allow(Open3).to receive(:capture3).and_return get_pods_response
104
+ end
105
+
106
+ it 'sends a kubectl request to the command line' do
107
+ expect(Open3).to receive(:capture3).with("kubectl -n default #{command}").and_return get_pods_response
108
+ subject
109
+ end
110
+
111
+ it 'returns an array of std_out, std_err, and status code' do
112
+ std_out_response, std_err_response, status_code_response = subject
113
+ expect(std_out_response).to eq get_pods_std_out
114
+ expect(std_err_response).to eq get_pods_std_err
115
+ expect(status_code_response).to eq process_status
116
+ end
117
+ end
118
+
119
+ describe '#apply' do
120
+ let(:std_out) { 'deployment.extensions/deployment configured' }
121
+ let(:std_err) { '' }
122
+ let(:apply_response) { ['deployment.extensions/deployment configured', '', process_status] }
123
+
124
+ before do
125
+ allow(Open3).to receive(:capture3).and_return apply_response
126
+ end
127
+
128
+ context 'missing file path or kustomization dir keyword arguments' do
129
+ subject { Kubecontrol::Client.new.apply }
130
+
131
+ it 'raises an ArgumentError' do
132
+ expect{subject}.to raise_error(ArgumentError)
133
+ end
134
+ end
135
+
136
+ context 'with both file path and kustomization dir keyword arguments' do
137
+ subject { Kubecontrol::Client.new.apply(file_path: 'foo', kustomization_dir: 'bar') }
138
+
139
+ it 'raises an ArgumentError' do
140
+ expect{subject}.to raise_error(ArgumentError)
141
+ end
142
+ end
143
+
144
+ context 'with a file path' do
145
+ let(:file_path) { 'foo/bar/deployment.yaml' }
146
+
147
+ subject { Kubecontrol::Client.new.apply(file_path: file_path) }
148
+
149
+ it 'send a kubectl request to the command line' do
150
+ expect(Open3).to receive(:capture3).with("kubectl -n default apply -f #{file_path}").and_return apply_response
151
+ subject
152
+ end
153
+
154
+ it 'returns an array of std_out, std_err, and status code' do
155
+ std_out_response, std_err_response, status_code_response = subject
156
+ expect(std_out_response).to eq std_out
157
+ expect(std_err_response).to eq std_err
158
+ expect(status_code_response).to eq process_status
159
+ end
160
+ end
161
+
162
+ context 'with a kustomization directory' do
163
+ let(:kustomization_dir) { 'foo/bar/kustomization' }
164
+
165
+ subject { Kubecontrol::Client.new.apply(kustomization_dir: kustomization_dir) }
166
+
167
+ it 'send a kubectl request to the command line' do
168
+ expect(Open3).to receive(:capture3).with("kubectl -n default apply -k #{kustomization_dir}").and_return apply_response
169
+ subject
170
+ end
171
+
172
+ it 'returns an array of std_out, std_err, and status code' do
173
+ std_out_response, std_err_response, status_code_response = subject
174
+ expect(std_out_response).to eq std_out
175
+ expect(std_err_response).to eq std_err
176
+ expect(status_code_response).to eq process_status
177
+ end
178
+ end
179
+ end
180
+
86
181
  describe '#pods' do
87
182
  subject { Kubecontrol::Client.new.pods }
88
183
 
@@ -96,7 +191,7 @@ RSpec.describe Kubecontrol::Client do
96
191
  result = subject
97
192
  expect(result).to be_an_instance_of Array
98
193
  expect(result.length).to eq 1
99
- expect(result.first).to be_an_instance_of Kubecontrol::Pod
194
+ expect(result.first).to be_an_instance_of Kubecontrol::Resources::Pod
100
195
  end
101
196
 
102
197
  context 'no pods found' do
@@ -117,7 +212,7 @@ RSpec.describe Kubecontrol::Client do
117
212
  allow(Open3).to receive(:capture3).and_return get_pods_response
118
213
  end
119
214
 
120
- it { is_expected.to be_an_instance_of Kubecontrol::Pod }
215
+ it { is_expected.to be_an_instance_of Kubecontrol::Resources::Pod }
121
216
 
122
217
  it 'returns the correct pod' do
123
218
  expect(subject.name).to eq name
@@ -143,7 +238,7 @@ RSpec.describe Kubecontrol::Client do
143
238
  result = subject
144
239
  expect(result).to be_an_instance_of Array
145
240
  expect(result.length).to eq 1
146
- expect(result.first).to be_an_instance_of Kubecontrol::Service
241
+ expect(result.first).to be_an_instance_of Kubecontrol::Resources::Service
147
242
  end
148
243
 
149
244
  context 'no services found' do
@@ -164,7 +259,7 @@ RSpec.describe Kubecontrol::Client do
164
259
  allow(Open3).to receive(:capture3).and_return get_services_response
165
260
  end
166
261
 
167
- it { is_expected.to be_an_instance_of Kubecontrol::Service }
262
+ it { is_expected.to be_an_instance_of Kubecontrol::Resources::Service }
168
263
 
169
264
  it 'returns the correct service' do
170
265
  expect(subject.name).to eq name
@@ -190,7 +285,7 @@ RSpec.describe Kubecontrol::Client do
190
285
  result = subject
191
286
  expect(result).to be_an_instance_of Array
192
287
  expect(result.length).to eq 1
193
- expect(result.first).to be_an_instance_of Kubecontrol::Deployment
288
+ expect(result.first).to be_an_instance_of Kubecontrol::Resources::Deployment
194
289
  end
195
290
 
196
291
  context 'no deployments found' do
@@ -211,7 +306,7 @@ RSpec.describe Kubecontrol::Client do
211
306
  allow(Open3).to receive(:capture3).and_return get_deployments_response
212
307
  end
213
308
 
214
- it { is_expected.to be_an_instance_of Kubecontrol::Deployment }
309
+ it { is_expected.to be_an_instance_of Kubecontrol::Resources::Deployment }
215
310
 
216
311
  it 'returns the correct deployment' do
217
312
  expect(subject.name).to eq name
@@ -237,7 +332,7 @@ RSpec.describe Kubecontrol::Client do
237
332
  result = subject
238
333
  expect(result).to be_an_instance_of Array
239
334
  expect(result.length).to eq 1
240
- expect(result.first).to be_an_instance_of Kubecontrol::StatefulSet
335
+ expect(result.first).to be_an_instance_of Kubecontrol::Resources::StatefulSet
241
336
  end
242
337
 
243
338
  context 'no stateful_sets found' do
@@ -258,7 +353,7 @@ RSpec.describe Kubecontrol::Client do
258
353
  allow(Open3).to receive(:capture3).and_return get_stateful_sets_response
259
354
  end
260
355
 
261
- it { is_expected.to be_an_instance_of Kubecontrol::StatefulSet }
356
+ it { is_expected.to be_an_instance_of Kubecontrol::Resources::StatefulSet }
262
357
 
263
358
  it 'returns the correct stateful_sets' do
264
359
  expect(subject.name).to eq name
@@ -270,4 +365,51 @@ RSpec.describe Kubecontrol::Client do
270
365
  it { is_expected.to be_nil }
271
366
  end
272
367
  end
368
+
369
+ describe '#secrets' do
370
+ subject { Kubecontrol::Client.new.secrets }
371
+
372
+ it 'send a kubectl request to the command line' do
373
+ expect(Open3).to receive(:capture3).with('kubectl -n default get secrets').and_return get_secrets_response
374
+ subject
375
+ end
376
+
377
+ it 'returns an array of Kubecontrol::Secret' do
378
+ allow(Open3).to receive(:capture3).and_return get_secrets_response
379
+ result = subject
380
+ expect(result).to be_an_instance_of Array
381
+ expect(result.length).to eq 1
382
+ expect(result.first).to be_an_instance_of Kubecontrol::Resources::Secret
383
+ end
384
+
385
+ context 'no secrets found' do
386
+ let(:get_secrets_std_out) { '' }
387
+
388
+ before do
389
+ allow(Open3).to receive(:capture3).and_return get_secrets_response
390
+ end
391
+
392
+ it { is_expected.to be_empty }
393
+ end
394
+ end
395
+
396
+ describe '#find_secret_by_name' do
397
+ subject { Kubecontrol::Client.new.find_secret_by_name(name) }
398
+
399
+ before do
400
+ allow(Open3).to receive(:capture3).and_return get_secrets_response
401
+ end
402
+
403
+ it { is_expected.to be_an_instance_of Kubecontrol::Resources::Secret }
404
+
405
+ it 'returns the correct secrets' do
406
+ expect(subject.name).to eq name
407
+ end
408
+
409
+ context 'secret does not exist' do
410
+ let(:get_secrets_std_out) { '' }
411
+
412
+ it { is_expected.to be_nil }
413
+ end
414
+ end
273
415
  end
@@ -1,7 +1,7 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/kubecontrol/deployment'
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/kubecontrol/resources/deployment'
3
3
 
4
- RSpec.describe Kubecontrol::Deployment do
4
+ RSpec.describe Kubecontrol::Resources::Deployment do
5
5
  let(:deployment_name) { 'foo_deployment' }
6
6
  let(:deployment_age) { '2d' }
7
7
  let(:deployment_ready) { '1/1' }
@@ -9,7 +9,7 @@ RSpec.describe Kubecontrol::Deployment do
9
9
  let(:deployment_available) { '1' }
10
10
  let(:namespace) { 'default' }
11
11
  let(:client) { Kubecontrol::Client.new }
12
- let(:deployment) { Kubecontrol::Deployment.new(deployment_name, deployment_ready, deployment_up_to_date, deployment_available, deployment_age, namespace, client) }
12
+ let(:deployment) { Kubecontrol::Resources::Deployment.new(deployment_name, deployment_ready, deployment_up_to_date, deployment_available, deployment_age, namespace, client) }
13
13
 
14
14
  describe '#initialize' do
15
15
  subject { deployment }
@@ -1,7 +1,7 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/kubecontrol/pod'
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/kubecontrol/resources/pod'
3
3
 
4
- RSpec.describe Kubecontrol::Pod do
4
+ RSpec.describe Kubecontrol::Resources::Pod do
5
5
  let(:pod_name) { 'foo_pod' }
6
6
  let(:pod_ready) { '1/1' }
7
7
  let(:pod_status) { 'Running' }
@@ -11,7 +11,7 @@ RSpec.describe Kubecontrol::Pod do
11
11
  let(:client) { Kubecontrol::Client.new }
12
12
 
13
13
  describe '#initialize' do
14
- subject { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client) }
14
+ subject { Kubecontrol::Resources::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client) }
15
15
 
16
16
  it 'sets the pod name field' do
17
17
  expect(subject.name).to eq pod_name
@@ -43,7 +43,7 @@ RSpec.describe Kubecontrol::Pod do
43
43
  end
44
44
 
45
45
  describe '#running?' do
46
- subject { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client).running? }
46
+ subject { Kubecontrol::Resources::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client).running? }
47
47
 
48
48
  context 'is running' do
49
49
  it { is_expected.to eq true }
@@ -57,7 +57,7 @@ RSpec.describe Kubecontrol::Pod do
57
57
  end
58
58
 
59
59
  describe '#stopped?' do
60
- subject { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client).stopped? }
60
+ subject { Kubecontrol::Resources::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client).stopped? }
61
61
 
62
62
  context 'is running' do
63
63
  it { is_expected.to eq false }
@@ -77,7 +77,7 @@ RSpec.describe Kubecontrol::Pod do
77
77
  let(:std_err) { '' }
78
78
  let(:status_code) { 0 }
79
79
  let(:kubectl_command_response) { [std_out, std_err, status_code] }
80
- let(:pod) { Kubecontrol::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client) }
80
+ let(:pod) { Kubecontrol::Resources::Pod.new(pod_name, pod_ready, pod_status, pod_restarts, pod_age, namespace, client) }
81
81
 
82
82
  subject { pod.exec(command) }
83
83
 
@@ -0,0 +1,40 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/kubecontrol/resources/secret'
3
+
4
+ RSpec.describe Kubecontrol::Resources::Secret do
5
+ let(:secret_name) { 'foo_secret' }
6
+ let(:secret_type) { 'Opaque' }
7
+ let(:secret_data) { '5' }
8
+ let(:secret_age) { '2d' }
9
+ let(:namespace) { 'default' }
10
+ let(:client) { Kubecontrol::Client.new }
11
+ let(:secret) { Kubecontrol::Resources::Secret.new(secret_name, secret_type, secret_data, secret_age, namespace, client) }
12
+
13
+ describe '#initialize' do
14
+ subject { secret }
15
+
16
+ it 'sets the secret name field' do
17
+ expect(subject.name).to eq secret_name
18
+ end
19
+
20
+ it 'sets the secret type field' do
21
+ expect(subject.type).to eq secret_type
22
+ end
23
+
24
+ it 'sets the secret data field' do
25
+ expect(subject.data).to eq secret_data
26
+ end
27
+
28
+ it 'sets the secret age field' do
29
+ expect(subject.age).to eq secret_age
30
+ end
31
+
32
+ it 'sets the secret namespace' do
33
+ expect(subject.namespace).to eq namespace
34
+ end
35
+
36
+ it 'sets the client' do
37
+ expect(subject.client).to eq client
38
+ end
39
+ end
40
+ end
@@ -1,7 +1,7 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/kubecontrol/service'
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/kubecontrol/resources/service'
3
3
 
4
- RSpec.describe Kubecontrol::Service do
4
+ RSpec.describe Kubecontrol::Resources::Service do
5
5
  let(:service_name) { 'foo_service' }
6
6
  let(:service_age) { '2d' }
7
7
  let(:service_type) { 'ClusterIP' }
@@ -12,7 +12,7 @@ RSpec.describe Kubecontrol::Service do
12
12
  let(:client) { Kubecontrol::Client.new }
13
13
 
14
14
  describe '#initialize' do
15
- subject { Kubecontrol::Service.new(service_name, service_type, service_cluster_ip, service_external_ip, service_ports, service_age, namespace, client) }
15
+ subject { Kubecontrol::Resources::Service.new(service_name, service_type, service_cluster_ip, service_external_ip, service_ports, service_age, namespace, client) }
16
16
 
17
17
  it 'sets the service name field' do
18
18
  expect(subject.name).to eq service_name
@@ -1,13 +1,13 @@
1
- require_relative '../spec_helper'
2
- require_relative '../../lib/kubecontrol/stateful_set'
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/kubecontrol/resources/stateful_set'
3
3
 
4
- RSpec.describe Kubecontrol::StatefulSet do
4
+ RSpec.describe Kubecontrol::Resources::StatefulSet do
5
5
  let(:stateful_set_name) { 'foo_stateful_set' }
6
6
  let(:stateful_set_age) { '2d' }
7
7
  let(:stateful_set_ready) { '1/1' }
8
8
  let(:namespace) { 'default' }
9
9
  let(:client) { Kubecontrol::Client.new }
10
- let(:stateful_set) { Kubecontrol::StatefulSet.new(stateful_set_name, stateful_set_ready, stateful_set_age, namespace, client) }
10
+ let(:stateful_set) { Kubecontrol::Resources::StatefulSet.new(stateful_set_name, stateful_set_ready, stateful_set_age, namespace, client) }
11
11
 
12
12
  describe '#initialize' do
13
13
  subject { stateful_set }
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.3.5
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Adkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-21 00:00:00.000000000 Z
11
+ date: 2020-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,16 +89,19 @@ files:
89
89
  - kubecontrol.gemspec
90
90
  - lib/kubecontrol.rb
91
91
  - lib/kubecontrol/client.rb
92
- - lib/kubecontrol/deployment.rb
93
- - lib/kubecontrol/pod.rb
94
- - lib/kubecontrol/service.rb
95
- - lib/kubecontrol/stateful_set.rb
92
+ - lib/kubecontrol/resources.rb
93
+ - lib/kubecontrol/resources/deployment.rb
94
+ - lib/kubecontrol/resources/pod.rb
95
+ - lib/kubecontrol/resources/secret.rb
96
+ - lib/kubecontrol/resources/service.rb
97
+ - lib/kubecontrol/resources/stateful_set.rb
96
98
  - lib/kubecontrol/version.rb
97
99
  - spec/kubecontrol/client_spec.rb
98
- - spec/kubecontrol/deployment_spec.rb
99
- - spec/kubecontrol/pod_spec.rb
100
- - spec/kubecontrol/service_spec.rb
101
- - spec/kubecontrol/stateful_set_spec.rb
100
+ - spec/kubecontrol/resources/deployment_spec.rb
101
+ - spec/kubecontrol/resources/pod_spec.rb
102
+ - spec/kubecontrol/resources/secret_spec.rb
103
+ - spec/kubecontrol/resources/service_spec.rb
104
+ - spec/kubecontrol/resources/stateful_set_spec.rb
102
105
  - spec/kubecontrol_spec.rb
103
106
  - spec/spec_helper.rb
104
107
  homepage: https://github.com/madkin10/kubecontrol
@@ -129,9 +132,10 @@ specification_version: 4
129
132
  summary: Simple ruby wrapper for `kubectl` commands
130
133
  test_files:
131
134
  - spec/kubecontrol/client_spec.rb
132
- - spec/kubecontrol/deployment_spec.rb
133
- - spec/kubecontrol/pod_spec.rb
134
- - spec/kubecontrol/service_spec.rb
135
- - spec/kubecontrol/stateful_set_spec.rb
135
+ - spec/kubecontrol/resources/deployment_spec.rb
136
+ - spec/kubecontrol/resources/pod_spec.rb
137
+ - spec/kubecontrol/resources/secret_spec.rb
138
+ - spec/kubecontrol/resources/service_spec.rb
139
+ - spec/kubecontrol/resources/stateful_set_spec.rb
136
140
  - spec/kubecontrol_spec.rb
137
141
  - spec/spec_helper.rb
@@ -1,38 +0,0 @@
1
- module Kubecontrol
2
- class Deployment
3
- RESOURCE_NAME = 'deployments'.freeze
4
-
5
- attr_reader :name, :ready, :up_to_date, :available, :age, :namespace, :client
6
-
7
- def initialize(name, ready, up_to_date, available, age, namespace, client)
8
- @name = name
9
- @ready = ready
10
- @up_to_date = up_to_date
11
- @available = available
12
- @age = age
13
- @namespace = namespace
14
- @client = client
15
- end
16
-
17
- def ready?
18
- @ready.split('/').first != '0'
19
- end
20
-
21
- def all_ready?
22
- max_pods = @ready.split('/').last
23
- @ready == "#{max_pods}/#{max_pods}"
24
- end
25
-
26
- def available?
27
- @available.to_i > 1
28
- end
29
-
30
- def up_to_date?
31
- @up_to_date.to_i > 1
32
- end
33
-
34
- def scale(count)
35
- @client.kubectl_command("scale deployment #{@name} --replicas=#{count}")
36
- end
37
- end
38
- end
@@ -1,35 +0,0 @@
1
- module Kubecontrol
2
- class Pod
3
- RESOURCE_NAME = 'pods'.freeze
4
- RUNNING = 'Running'.freeze
5
-
6
- attr_reader :name, :ready, :status, :restarts, :age, :namespace, :client
7
-
8
- def initialize(name, ready, status, restarts, age, namespace, client)
9
- @name = name
10
- @ready = ready
11
- @status = status
12
- @restarts = restarts
13
- @age = age
14
- @namespace = namespace
15
- @client = client
16
- end
17
-
18
- def stopped?
19
- @status != RUNNING
20
- end
21
-
22
- def running?
23
- @status == RUNNING
24
- end
25
-
26
- def ready?
27
- pod_containers = @ready.split('/').last
28
- @ready == "#{pod_containers}/#{pod_containers}"
29
- end
30
-
31
- def exec(command)
32
- @client.kubectl_command("exec -i #{name} -- sh -c \"#{command.gsub('"', '\"')}\"")
33
- end
34
- end
35
- end
@@ -1,18 +0,0 @@
1
- module Kubecontrol
2
- class Service
3
- RESOURCE_NAME = 'services'.freeze
4
-
5
- attr_reader :name, :age, :type, :cluster_ip, :external_ip, :ports, :namespace, :client
6
-
7
- def initialize(name, type, cluster_ip, external_ip, ports, age, namespace, client)
8
- @name = name
9
- @age = age
10
- @type = type
11
- @cluster_ip = cluster_ip
12
- @external_ip = external_ip
13
- @ports = ports
14
- @namespace = namespace
15
- @client = client
16
- end
17
- end
18
- end
@@ -1,28 +0,0 @@
1
- module Kubecontrol
2
- class StatefulSet
3
- RESOURCE_NAME = 'statefulsets'.freeze
4
-
5
- attr_reader :name, :ready, :age, :namespace, :client
6
-
7
- def initialize(name, ready, age, namespace, client)
8
- @name = name
9
- @ready = ready
10
- @age = age
11
- @namespace = namespace
12
- @client = client
13
- end
14
-
15
- def ready?
16
- @ready.split('/').first != '0'
17
- end
18
-
19
- def all_ready?
20
- max_pods = @ready.split('/').last
21
- @ready == "#{max_pods}/#{max_pods}"
22
- end
23
-
24
- def scale(count)
25
- @client.kubectl_command("scale statefulset #{@name} --replicas=#{count}")
26
- end
27
- end
28
- end