kubeclient 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kubeclient might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MmJlNzRjMTMwMWM0NzU3ZjlmODZmNDZmOWVmOTcxNGJkODI1MjRiMA==
5
- data.tar.gz: !binary |-
6
- OWZhYTM1ZWY1ZTViOGVmMGVkYzNiZmNjZTgyYzQwMDJjMTRlNjY1Yw==
2
+ SHA1:
3
+ metadata.gz: fbba708e9cb9c3075c713fbbeb857f1d40862e74
4
+ data.tar.gz: 6ae82fd5ed84ca5c8cb0cf4b5dc75f469673b8b7
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YzM5ZjNjN2M1YTllMWE3NmNlYjJhZTY0Mzg5NWJlOGE4MzMyZDUyNzk4ZDZj
10
- MTIyMTE1ODZmYzExMjM5NDQ2NDc0YTEyNTcyNWU1OTFkYzMyZTQzNzRjOWNj
11
- ZGI5MDM4YmVhNWM4ZjE3YmFlNDJhMjY4NmI5ZjFmODBlOTkzNDI=
12
- data.tar.gz: !binary |-
13
- YzU3MjViNjAxYTI3NDk1YzU4NjM1NTdjNWUxZjBiNDJlMzFhZDVmODI4NTU2
14
- MTdkNDE4MmVhMzY3YTg2OGI1ODBjNzU2MDk1M2VhOGZlMjBmMmZmN2M3ZDcw
15
- NzdkZTlkZmU2YTFhNmQ4Y2YzNjhkMGU0MTNmODc4OWY0ZjAzYTA=
6
+ metadata.gz: 27c5a0e7b4ffb85ba71fe6e5400dd4a31daba72dbe4448df99477268f73d1903bdcd6ff57f34cf04ec896849286e3cc7cc552833e5d3e376f97cde78469491f6
7
+ data.tar.gz: 40c6d213114e6e07605132dc8e012886c68e191319e08c5ad9016a18494f0e9f474e32fa02ed0dc839c9ede26fbb505b4338f4bfa4a5ad93ea95914fc2f2f790
data/README.md CHANGED
@@ -6,8 +6,7 @@
6
6
  [![Dependency Status](https://gemnasium.com/abonas/kubeclient.svg)](https://gemnasium.com/abonas/kubeclient)
7
7
 
8
8
  A Ruby client for Kubernetes REST api.
9
- The client supports GET, POST, PUT, DELETE on pods, services and replication controllers.
10
- Also, GET and DELETE is supported for nodes.
9
+ The client supports GET, POST, PUT, DELETE on nodes, pods, services, replication controllers and namespaces.
11
10
  The client currently supports Kubernetes REST api version v1beta1 and v1beta3.
12
11
 
13
12
  ## Installation
@@ -109,9 +108,11 @@ It is possible to interrupt the watcher from another thread with:
109
108
 
110
109
  1. Fork it ( https://github.com/[my-github-username]/kubeclient/fork )
111
110
  2. Create your feature branch (`git checkout -b my-new-feature`)
112
- 3. Commit your changes (`git commit -am 'Add some feature'`)
113
- 4. Push to the branch (`git push origin my-new-feature`)
114
- 5. Create a new Pull Request
111
+ 3. Test your changes with `rake test rubocop`, add new tests if needed.
112
+ 4. If you added a new functionality, add it to README
113
+ 5. Commit your changes (`git commit -am 'Add some feature'`)
114
+ 6. Push to the branch (`git push origin my-new-feature`)
115
+ 7. Create a new Pull Request
115
116
 
116
117
  ## Tests
117
118
 
@@ -0,0 +1,4 @@
1
+ require 'recursive_open_struct'
2
+
3
+ class Namespace < RecursiveOpenStruct
4
+ end
@@ -1,4 +1,4 @@
1
1
  # Kubernetes REST-API Client
2
2
  module Kubeclient
3
- VERSION = '0.1.4'
3
+ VERSION = '0.1.5'
4
4
  end
data/lib/kubeclient.rb CHANGED
@@ -17,7 +17,9 @@ module Kubeclient
17
17
  # Kubernetes Client
18
18
  class Client
19
19
  attr_reader :api_endpoint
20
- ENTITIES = %w(Pod Service ReplicationController Node Event Endpoint)
20
+
21
+ ENTITY_TYPES = %w(Pod Service ReplicationController Node Event Endpoint
22
+ Namespace)
21
23
 
22
24
  def initialize(uri, version)
23
25
  @api_endpoint = (uri.is_a? URI) ? uri : URI.parse(uri)
@@ -48,17 +50,98 @@ module Kubeclient
48
50
  raise KubeException.new(e.http_code, JSON.parse(e.response)['message'])
49
51
  end
50
52
 
53
+ def get_entities(entity_type)
54
+ # TODO: labels support
55
+ # TODO: namespace support?
56
+ response = handling_kube_exception do
57
+ rest_client[get_resource_name(entity_type)].get # nil, labels
58
+ end
59
+
60
+ result = JSON.parse(response)
61
+
62
+ resource_version = result.fetch('resourceVersion', nil)
63
+ if resource_version.nil?
64
+ resource_version =
65
+ result.fetch('metadata', {}).fetch('resourceVersion', nil)
66
+ end
67
+
68
+ collection = EntityList.new(entity_type, resource_version)
69
+
70
+ result['items'].each do |item|
71
+ collection.push(new_entity(item, entity_type))
72
+ end
73
+
74
+ collection
75
+ end
76
+
77
+ def watch_entities(entity_type, resource_version = nil)
78
+ resource_name = get_resource_name(entity_type.to_s)
79
+
80
+ uri = api_endpoint.merge(
81
+ File.join(api_endpoint.path, 'watch', resource_name))
82
+
83
+ unless resource_version.nil?
84
+ uri.query = URI.encode_www_form('resourceVersion' => resource_version)
85
+ end
86
+
87
+ options = {
88
+ use_ssl: uri.scheme == 'https',
89
+ ca_file: @ssl_options[:ca_file],
90
+ verify_ssl: @ssl_options[:verify_ssl],
91
+ client_cert: @ssl_options[:client_cert],
92
+ client_key: @ssl_options[:client_key]
93
+ }
94
+
95
+ WatchStream.new(uri, options)
96
+ end
97
+
98
+ def get_entity(entity_type, id)
99
+ response = handling_kube_exception do
100
+ rest_client[get_resource_name(entity_type) + "/#{id}"].get
101
+ end
102
+ result = JSON.parse(response)
103
+ new_entity(result, entity_type)
104
+ end
105
+
106
+ def delete_entity(entity_type, id)
107
+ handling_kube_exception do
108
+ rest_client[get_resource_name(entity_type) + "/#{id}"].delete
109
+ end
110
+ end
111
+
112
+ def create_entity(entity_type, entity_config)
113
+ # to_hash should be called because of issue #9 in recursive open
114
+ # struct
115
+ hash = entity_config.to_hash
116
+ handling_kube_exception do
117
+ rest_client[get_resource_name(entity_type)].post(hash.to_json)
118
+ end
119
+ end
120
+
121
+ def update_entity(entity_type, entity_config)
122
+ id = entity_config.id
123
+ # to_hash should be called because of issue #9 in recursive open
124
+ # struct
125
+ hash = entity_config.to_hash
126
+ # TODO: temporary solution to delete id till this issue is solved
127
+ # https://github.com/GoogleCloudPlatform/kubernetes/issues/3085
128
+ hash.delete(:id)
129
+ handling_kube_exception do
130
+ rest_client[get_resource_name(entity_type) + "/#{id}"].put(hash.to_json)
131
+ end
132
+ end
133
+
51
134
  protected
52
135
 
53
- def create_entity(hash, entity)
54
- entity.classify.constantize.new(hash)
136
+ def new_entity(hash, entity_type)
137
+ entity_type.classify.constantize.new(hash)
55
138
  end
56
139
 
57
- def get_resource_name(entity)
140
+ def get_resource_name(entity_type)
58
141
  if @api_version == 'v1beta1'
59
- entity.pluralize.camelize(:lower)
142
+ entity_type.pluralize.camelize(:lower)
60
143
  else
61
- entity.pluralize.downcase
144
+ entity_type.pluralize.downcase
62
145
  end
63
146
  end
64
147
 
@@ -74,100 +157,44 @@ module Kubeclient
74
157
  }
75
158
  end
76
159
 
77
- ENTITIES.each do |entity|
78
- # get all entities of a type e.g. get_nodes, get_pods, etc.
79
- define_method("get_#{entity.underscore.pluralize}") do
80
- # TODO: labels support
81
- # TODO: namespace support?
82
- response = handling_kube_exception do
83
- rest_client[get_resource_name(entity)].get # nil, labels
84
- end
85
-
86
- result = JSON.parse(response)
87
-
88
- resource_version = result.fetch('resourceVersion', nil)
89
- if resource_version.nil?
90
- resource_version =
91
- result.fetch('metadata', {}).fetch('resourceVersion', nil)
92
- end
93
-
94
- collection = EntityList.new(entity, resource_version)
160
+ ENTITY_TYPES.each do |entity_type|
161
+ entity_name = entity_type.underscore
162
+ entity_name_plural = entity_name.pluralize
95
163
 
96
- result['items'].each do |item|
97
- collection.push(create_entity(item, entity))
98
- end
99
-
100
- collection
164
+ # get all entities of a type e.g. get_nodes, get_pods, etc.
165
+ define_method("get_#{entity_name_plural}") do
166
+ get_entities(entity_type)
101
167
  end
102
168
 
103
169
  # watch all entities of a type e.g. watch_nodes, watch_pods, etc.
104
- define_method("watch_#{entity.underscore.pluralize}") \
105
- do |resourceVersion = nil|
106
- resource_name = get_resource_name(entity.to_s)
107
-
108
- uri = api_endpoint.merge(
109
- File.join(api_endpoint.path, 'watch', resource_name))
170
+ define_method("watch_#{entity_name_plural}") do |resource_version = nil|
171
+ watch_entities(entity_type, resource_version)
172
+ end
110
173
 
111
- unless resourceVersion.nil?
112
- uri.query = URI.encode_www_form(
113
- 'resourceVersion' => resourceVersion)
114
- end
174
+ # get a single entity of a specific type by id
175
+ define_method("get_#{entity_name}") do |id|
176
+ get_entity(entity_type, id)
177
+ end
115
178
 
116
- options = {
117
- use_ssl: uri.scheme == 'https',
118
- ca_file: @ssl_options[:ca_file],
119
- verify_ssl: @ssl_options[:verify_ssl],
120
- client_cert: @ssl_options[:client_cert],
121
- client_key: @ssl_options[:client_key]
122
- }
179
+ define_method("delete_#{entity_name}") do |id|
180
+ delete_entity(entity_type, id)
181
+ end
123
182
 
124
- WatchStream.new(uri, options)
183
+ define_method("create_#{entity_name}") do |entity_config|
184
+ create_entity(entity_type, entity_config)
125
185
  end
126
186
 
127
- # get a single entity of a specific type by id
128
- define_method("get_#{entity.underscore}") do |id|
129
- response = handling_kube_exception do
130
- rest_client[get_resource_name(entity) + "/#{id}"].get
131
- end
132
- result = JSON.parse(response)
133
- create_entity(result, entity)
134
- end
135
-
136
- define_method("delete_#{entity.underscore}") do |id|
137
- handling_kube_exception do
138
- rest_client[get_resource_name(entity) + "/#{id}"].delete
139
- end
140
- end
141
-
142
- define_method("create_#{entity.underscore}") do |entity_config|
143
- # to_hash should be called because of issue #9 in recursive open
144
- # struct
145
- hash = entity_config.to_hash
146
- handling_kube_exception do
147
- rest_client[get_resource_name(entity)].post(hash.to_json)
148
- end
149
- end
150
-
151
- define_method("update_#{entity.underscore}") do |entity_config|
152
- id = entity_config.id
153
- # to_hash should be called because of issue #9 in recursive open
154
- # struct
155
- hash = entity_config.to_hash
156
- # TODO: temporary solution to delete id till this issue is solved
157
- # https://github.com/GoogleCloudPlatform/kubernetes/issues/3085
158
- hash.delete(:id)
159
- handling_kube_exception do
160
- rest_client[get_resource_name(entity) + "/#{id}"].put(hash.to_json)
161
- end
187
+ define_method("update_#{entity_name}") do |entity_config|
188
+ update_entity(entity_type, entity_config)
162
189
  end
163
190
  end
164
191
 
165
192
  def all_entities
166
- ENTITIES.each_with_object({}) do |entity, result_hash|
193
+ ENTITY_TYPES.each_with_object({}) do |entity_type, result_hash|
167
194
  # method call for get each entities
168
195
  # build hash of entity name to array of the entities
169
- method_name = "get_#{entity.underscore.pluralize}"
170
- key_name = entity.underscore
196
+ method_name = "get_#{entity_type.underscore.pluralize}"
197
+ key_name = entity_type.underscore
171
198
  result_hash[key_name] = send(method_name)
172
199
  end
173
200
  end
@@ -0,0 +1,13 @@
1
+ {
2
+ "kind": "Namespace",
3
+ "apiVersion": "v1beta3",
4
+ "metadata": {
5
+ "name": "staging",
6
+ "selfLink": "/api/v1beta3/namespaces/staging",
7
+ "uid": "e388bc10-c021-11e4-a514-3c970e4a436a",
8
+ "resourceVersion": "1168",
9
+ "creationTimestamp": "2015-03-01T16:47:31+02:00"
10
+ },
11
+ "spec": {},
12
+ "status": {}
13
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "kind": "NamespaceList",
3
+ "apiVersion": "v1beta3",
4
+ "metadata": {
5
+ "selfLink": "/api/v1beta3/namespaces",
6
+ "resourceVersion": "1707"
7
+ },
8
+ "items": [
9
+ {
10
+ "metadata": {
11
+ "name": "default",
12
+ "selfLink": "/api/v1beta3/namespaces/default",
13
+ "uid": "56c3eb7c-c009-11e4-a514-3c970e4a436a",
14
+ "resourceVersion": "4",
15
+ "creationTimestamp": "2015-03-01T13:51:47+02:00"
16
+ },
17
+ "spec": {},
18
+ "status": {}
19
+ },
20
+ {
21
+ "metadata": {
22
+ "name": "staging",
23
+ "selfLink": "/api/v1beta3/namespaces/staging",
24
+ "uid": "e388bc10-c021-11e4-a514-3c970e4a436a",
25
+ "resourceVersion": "1168",
26
+ "creationTimestamp": "2015-03-01T16:47:31+02:00"
27
+ },
28
+ "spec": {},
29
+ "status": {}
30
+ }
31
+ ]
32
+ }
@@ -85,18 +85,24 @@ class KubeClientTest < MiniTest::Test
85
85
  .to_return(body: open_test_json_file('endpoint_list_b3.json'),
86
86
  status: 200)
87
87
 
88
+ stub_request(:get, /\/namespaces/)
89
+ .to_return(body: open_test_json_file('namespace_list_b3.json'),
90
+ status: 200)
91
+
88
92
  client = Kubeclient::Client.new 'http://localhost:8080/api/', 'v1beta1'
89
93
  result = client.all_entities
90
- assert_equal(6, result.keys.size)
94
+ assert_equal(7, result.keys.size)
91
95
  assert_instance_of(EntityList, result['node'])
92
96
  assert_instance_of(EntityList, result['service'])
93
97
  assert_instance_of(EntityList, result['replication_controller'])
94
98
  assert_instance_of(EntityList, result['pod'])
95
99
  assert_instance_of(EntityList, result['event'])
100
+ assert_instance_of(EntityList, result['namespace'])
96
101
  assert_instance_of(Service, result['service'][0])
97
102
  assert_instance_of(Node, result['node'][0])
98
103
  assert_instance_of(Event, result['event'][0])
99
104
  assert_instance_of(Endpoint, result['endpoint'][0])
105
+ assert_instance_of(Namespace, result['namespace'][0])
100
106
  end
101
107
 
102
108
  private
@@ -0,0 +1,34 @@
1
+ require 'minitest/autorun'
2
+ require 'webmock/minitest'
3
+ require 'kubeclient/namespace'
4
+ require 'json'
5
+ require './lib/kubeclient'
6
+
7
+ # Namespace entity tests
8
+ class NamespaceTest < MiniTest::Test
9
+ def test_get_namespace_v1beta3
10
+ stub_request(:get, /\/namespaces/)
11
+ .to_return(body: open_test_json_file('namespace_b3.json'),
12
+ status: 200)
13
+
14
+ client = Kubeclient::Client.new 'http://localhost:8080/api/', 'v1beta3'
15
+ namespace = client.get_namespace 'staging'
16
+
17
+ assert_instance_of(Namespace, namespace)
18
+ assert_equal('e388bc10-c021-11e4-a514-3c970e4a436a', namespace.metadata.uid)
19
+ assert_equal('staging', namespace.metadata.name)
20
+ assert_equal('1168', namespace.metadata.resourceVersion)
21
+ assert_equal('v1beta3', namespace.apiVersion)
22
+ end
23
+
24
+ def test_delete_namespace_v1beta3
25
+ our_namespace = Namespace.new
26
+ our_namespace.name = 'staging'
27
+
28
+ stub_request(:delete, /\/namespaces/)
29
+ .to_return(status: 200)
30
+
31
+ client = Kubeclient::Client.new 'http://localhost:8080/api/', 'v1beta3'
32
+ client.delete_namespace our_namespace.name
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubeclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alissa Bonas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-19 00:00:00.000000000 Z
11
+ date: 2015-03-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,98 +42,98 @@ dependencies:
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rest-client
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: activesupport
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: json
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: recursive-open-struct
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: A client for Kubernetes REST api
@@ -156,6 +156,7 @@ files:
156
156
  - lib/kubeclient/entity_list.rb
157
157
  - lib/kubeclient/event.rb
158
158
  - lib/kubeclient/kube_exception.rb
159
+ - lib/kubeclient/namespace.rb
159
160
  - lib/kubeclient/node.rb
160
161
  - lib/kubeclient/pod.rb
161
162
  - lib/kubeclient/replication_controller.rb
@@ -170,6 +171,8 @@ files:
170
171
  - test/json/get_all_pods_b1.json
171
172
  - test/json/get_all_replication_b1.json
172
173
  - test/json/get_all_services_b1.json
174
+ - test/json/namespace_b3.json
175
+ - test/json/namespace_list_b3.json
173
176
  - test/json/node_b1.json
174
177
  - test/json/node_b3.json
175
178
  - test/json/pod_b1.json
@@ -181,6 +184,7 @@ files:
181
184
  - test/json/service_exception_b1.json
182
185
  - test/json/watch_stream_b3.json
183
186
  - test/kubeclient_test.rb
187
+ - test/namespace_test.rb
184
188
  - test/node_test.rb
185
189
  - test/pod_test.rb
186
190
  - test/replication_controller_test.rb
@@ -196,17 +200,17 @@ require_paths:
196
200
  - lib
197
201
  required_ruby_version: !ruby/object:Gem::Requirement
198
202
  requirements:
199
- - - ! '>='
203
+ - - '>='
200
204
  - !ruby/object:Gem::Version
201
205
  version: 2.0.0
202
206
  required_rubygems_version: !ruby/object:Gem::Requirement
203
207
  requirements:
204
- - - ! '>='
208
+ - - '>='
205
209
  - !ruby/object:Gem::Version
206
210
  version: '0'
207
211
  requirements: []
208
212
  rubyforge_project:
209
- rubygems_version: 2.2.2
213
+ rubygems_version: 2.4.5
210
214
  signing_key:
211
215
  specification_version: 4
212
216
  summary: A client for Kubernetes REST api
@@ -218,6 +222,8 @@ test_files:
218
222
  - test/json/get_all_pods_b1.json
219
223
  - test/json/get_all_replication_b1.json
220
224
  - test/json/get_all_services_b1.json
225
+ - test/json/namespace_b3.json
226
+ - test/json/namespace_list_b3.json
221
227
  - test/json/node_b1.json
222
228
  - test/json/node_b3.json
223
229
  - test/json/pod_b1.json
@@ -229,6 +235,7 @@ test_files:
229
235
  - test/json/service_exception_b1.json
230
236
  - test/json/watch_stream_b3.json
231
237
  - test/kubeclient_test.rb
238
+ - test/namespace_test.rb
232
239
  - test/node_test.rb
233
240
  - test/pod_test.rb
234
241
  - test/replication_controller_test.rb