Class: K8s::ResourceClient
- Inherits:
-
Object
- Object
- K8s::ResourceClient
show all
- Extended by:
- Utils
- Includes:
- Utils
- Defined in:
- lib/k8s/resource_client.rb
Defined Under Namespace
Modules: Utils
Class Method Summary
collapse
Instance Method Summary
collapse
-
#api_version ⇒ String
-
#create? ⇒ Bool
-
#create_resource(resource) ⇒ resource_class
-
#delete(name, namespace: @namespace, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
-
#delete? ⇒ Bool
-
#delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
-
#delete_resource(resource, **options) ⇒ K8s::API::MetaV1::Status
-
#get(name, namespace: @namespace) ⇒ resource_class
-
#get? ⇒ Bool
-
#get_resource(resource) ⇒ resource_class
-
#initialize(transport, api_client, api_resource, namespace: nil, resource_class: K8s::Resource) ⇒ ResourceClient
constructor
A new instance of ResourceClient.
-
#kind ⇒ String
-
#list(labelSelector: nil, fieldSelector: nil, namespace: @namespace) ⇒ Array<resource_class>
-
#list? ⇒ Bool
-
#merge_patch(name, obj, namespace: @namespace, strategic_merge: true) ⇒ resource_class
-
#name ⇒ String
Resource or resource/subresource.
-
#namespace ⇒ String?
-
#namespaced? ⇒ Bool
-
#patch? ⇒ Bool
-
#path(name = nil, subresource: @subresource, namespace: @namespace) ⇒ String
-
#process_list(list) ⇒ Array<resource_class>
-
#resource ⇒ String
-
#resource_class ⇒ class
-
#subresource ⇒ String?
-
#update? ⇒ Bool
-
#update_resource(resource) ⇒ resource_class
Methods included from Utils
make_query, selector_query
Constructor Details
#initialize(transport, api_client, api_resource, namespace: nil, resource_class: K8s::Resource) ⇒ ResourceClient
Returns a new instance of ResourceClient.
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/k8s/resource_client.rb', line 60
def initialize(transport, api_client, api_resource, namespace: nil, resource_class: K8s::Resource)
@transport = transport
@api_client = api_client
@api_resource = api_resource
@namespace = namespace
@resource_class = resource_class
if @api_resource.name.include? '/'
@resource, @subresource = @api_resource.name.split('/', 2)
else
@resource = @api_resource.name
@subresource = nil
end
fail "Resource #{api_resource.name} is not namespaced" if namespace unless api_resource.namespaced
end
|
Class Method Details
.list(resources, transport, namespace: nil, labelSelector: nil, fieldSelector: nil) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
Returns flattened array with mixed resource kinds.
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/k8s/resource_client.rb', line 43
def self.list(resources, transport, namespace: nil, labelSelector: nil, fieldSelector: nil)
api_paths = resources.map{|resource| resource.path(namespace: namespace) }
api_lists = transport.gets(*api_paths,
response_class: K8s::API::MetaV1::List,
query: make_query(
'labelSelector' => selector_query(labelSelector),
'fieldSelector' => selector_query(fieldSelector),
),
)
resources.zip(api_lists).map {|resource, api_list| resource.process_list(api_list) }.flatten
end
|
Instance Method Details
#api_version ⇒ String
78
79
80
|
# File 'lib/k8s/resource_client.rb', line 78
def api_version
@api_client.api_version
end
|
#create? ⇒ Bool
131
132
133
|
# File 'lib/k8s/resource_client.rb', line 131
def create?
@api_resource.verbs.include? 'create'
end
|
#create_resource(resource) ⇒ resource_class
137
138
139
140
141
142
143
144
|
# File 'lib/k8s/resource_client.rb', line 137
def create_resource(resource)
@transport.request(
method: 'POST',
path: self.path(namespace: resource.metadata.namespace),
request_object: resource,
response_class: @resource_class,
)
end
|
#delete(name, namespace: @namespace, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
244
245
246
247
248
249
250
251
252
253
|
# File 'lib/k8s/resource_client.rb', line 244
def delete(name, namespace: @namespace, propagationPolicy: nil)
@transport.request(
method: 'DELETE',
path: self.path(name, namespace: namespace),
query: make_query(
'propagationPolicy' => propagationPolicy,
),
response_class: @resource_class,
)
end
|
#delete? ⇒ Bool
237
238
239
|
# File 'lib/k8s/resource_client.rb', line 237
def delete?
@api_resource.verbs.include? 'delete'
end
|
#delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
259
260
261
262
263
264
265
266
267
268
269
270
271
|
# File 'lib/k8s/resource_client.rb', line 259
def delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil)
list = @transport.request(
method: 'DELETE',
path: self.path(namespace: namespace),
query: make_query(
'labelSelector' => selector_query(labelSelector),
'fieldSelector' => selector_query(fieldSelector),
'propagationPolicy' => propagationPolicy,
),
response_class: K8s::API::MetaV1::List,
)
process_list(list)
end
|
275
276
277
|
# File 'lib/k8s/resource_client.rb', line 275
def delete_resource(resource, **options)
delete(resource.metadata.name, namespace: resource.metadata.namespace, **options)
end
|
#get(name, namespace: @namespace) ⇒ resource_class
152
153
154
155
156
157
158
|
# File 'lib/k8s/resource_client.rb', line 152
def get(name, namespace: @namespace)
@transport.request(
method: 'GET',
path: self.path(name, namespace: namespace),
response_class: @resource_class,
)
end
|
#get? ⇒ Bool
147
148
149
|
# File 'lib/k8s/resource_client.rb', line 147
def get?
@api_resource.verbs.include? 'get'
end
|
162
163
164
165
166
167
168
|
# File 'lib/k8s/resource_client.rb', line 162
def get_resource(resource)
@transport.request(
method: 'GET',
path: self.path(resource.metadata.name, namespace: resource.metadata.namespace),
response_class: @resource_class,
)
end
|
#kind ⇒ String
103
104
105
|
# File 'lib/k8s/resource_client.rb', line 103
def kind
@api_resource.kind
end
|
#list(labelSelector: nil, fieldSelector: nil, namespace: @namespace) ⇒ Array<resource_class>
187
188
189
190
191
192
193
194
195
196
197
198
|
# File 'lib/k8s/resource_client.rb', line 187
def list(labelSelector: nil, fieldSelector: nil, namespace: @namespace)
list = @transport.request(
method: 'GET',
path: self.path(namespace: namespace),
response_class: K8s::API::MetaV1::List,
query: make_query(
'labelSelector' => selector_query(labelSelector),
'fieldSelector' => selector_query(fieldSelector),
),
)
process_list(list)
end
|
#list? ⇒ Bool
171
172
173
|
# File 'lib/k8s/resource_client.rb', line 171
def list?
@api_resource.verbs.include? 'list'
end
|
#merge_patch(name, obj, namespace: @namespace, strategic_merge: true) ⇒ resource_class
226
227
228
229
230
231
232
233
234
|
# File 'lib/k8s/resource_client.rb', line 226
def merge_patch(name, obj, namespace: @namespace, strategic_merge: true)
@transport.request(
method: 'PATCH',
path: self.path(name, namespace: namespace),
content_type: strategic_merge ? 'application/strategic-merge-patch+json' : 'application/merge-patch+json',
request_object: obj,
response_class: @resource_class,
)
end
|
#name ⇒ String
Returns resource or resource/subresource.
83
84
85
|
# File 'lib/k8s/resource_client.rb', line 83
def name
@api_resource.name
end
|
#namespace ⇒ String?
88
89
90
|
# File 'lib/k8s/resource_client.rb', line 88
def namespace
@namespace
end
|
#namespaced? ⇒ Bool
113
114
115
|
# File 'lib/k8s/resource_client.rb', line 113
def namespaced?
!!@api_resource.namespaced
end
|
#patch? ⇒ Bool
217
218
219
|
# File 'lib/k8s/resource_client.rb', line 217
def patch?
@api_resource.verbs.include? 'patch'
end
|
#path(name = nil, subresource: @subresource, namespace: @namespace) ⇒ String
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/k8s/resource_client.rb', line 118
def path(name = nil, subresource: @subresource, namespace: @namespace)
namespace_part = namespace ? ['namespaces', namespace] : []
if name && subresource
@api_client.path(*namespace_part, @resource, name, subresource)
elsif name
@api_client.path(*namespace_part, @resource, name)
else
@api_client.path(*namespace_part, @resource)
end
end
|
#process_list(list) ⇒ Array<resource_class>
177
178
179
180
181
182
|
# File 'lib/k8s/resource_client.rb', line 177
def process_list(list)
list.items.map {|item|
@resource_class.new(item.merge('apiVersion' => list.apiVersion, 'kind' => @api_resource.kind))
}
end
|
#resource ⇒ String
93
94
95
|
# File 'lib/k8s/resource_client.rb', line 93
def resource
@resource
end
|
#resource_class ⇒ class
108
109
110
|
# File 'lib/k8s/resource_client.rb', line 108
def resource_class
@resource_class
end
|
#subresource ⇒ String?
98
99
100
|
# File 'lib/k8s/resource_client.rb', line 98
def subresource
@subresource
end
|
#update? ⇒ Bool
201
202
203
|
# File 'lib/k8s/resource_client.rb', line 201
def update?
@api_resource.verbs.include? 'update'
end
|
#update_resource(resource) ⇒ resource_class
207
208
209
210
211
212
213
214
|
# File 'lib/k8s/resource_client.rb', line 207
def update_resource(resource)
@transport.request(
method: 'PUT',
path: self.path(resource.metadata.name, namespace: resource.metadata.namespace),
request_object: resource,
response_class: @resource_class,
)
end
|