Class: K8s::ResourceClient
- Inherits:
-
Object
- Object
- K8s::ResourceClient
show all
- Extended by:
- Utils
- Includes:
- Utils
- Defined in:
- lib/k8s/resource_client.rb
Overview
Per-APIResource type client.
Used to get/list/update/patch/delete specific types of resources, optionally in some specific namespace.
Defined Under Namespace
Modules: Utils
Instance Attribute Summary collapse
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.
-
#json_patch(name, ops, namespace: @namespace) ⇒ resource_class
-
#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.
-
#namespaced? ⇒ Bool
-
#patch? ⇒ Bool
-
#path(name = nil, subresource: @subresource, namespace: @namespace) ⇒ String
-
#process_list(list) ⇒ Array<resource_class>
-
#subresource? ⇒ Boolean
-
#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.
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/k8s/resource_client.rb', line 69
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" unless api_resource.namespaced || !namespace
end
|
Instance Attribute Details
#namespace ⇒ String?
97
98
99
|
# File 'lib/k8s/resource_client.rb', line 97
def namespace
@namespace
end
|
#resource ⇒ String
100
101
102
|
# File 'lib/k8s/resource_client.rb', line 100
def resource
@resource
end
|
#resource_class ⇒ class
116
117
118
|
# File 'lib/k8s/resource_client.rb', line 116
def resource_class
@resource_class
end
|
#subresource ⇒ String?
108
109
110
|
# File 'lib/k8s/resource_client.rb', line 108
def subresource
@subresource
end
|
Class Method Details
.list(resources, transport, namespace: nil, labelSelector: nil, fieldSelector: nil, skip_forbidden: false) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
Returns flattened array with mixed resource kinds.
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/k8s/resource_client.rb', line 50
def self.list(resources, transport, namespace: nil, labelSelector: nil, fieldSelector: nil, skip_forbidden: false)
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)
),
skip_forbidden: skip_forbidden
)
resources.zip(api_lists).map { |resource, api_list| api_list ? resource.process_list(api_list) : [] }.flatten
end
|
Instance Method Details
#api_version ⇒ String
87
88
89
|
# File 'lib/k8s/resource_client.rb', line 87
def api_version
@api_client.api_version
end
|
#create? ⇒ Bool
137
138
139
|
# File 'lib/k8s/resource_client.rb', line 137
def create?
@api_resource.verbs.include? 'create'
end
|
#create_resource(resource) ⇒ resource_class
143
144
145
146
147
148
149
150
|
# File 'lib/k8s/resource_client.rb', line 143
def create_resource(resource)
@transport.request(
method: 'POST',
path: path(namespace: resource.metadata.namespace),
request_object: resource,
response_class: @resource_class
)
end
|
#delete(name, namespace: @namespace, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
265
266
267
268
269
270
271
272
273
274
|
# File 'lib/k8s/resource_client.rb', line 265
def delete(name, namespace: @namespace, propagationPolicy: nil)
@transport.request(
method: 'DELETE',
path: path(name, namespace: namespace),
query: make_query(
'propagationPolicy' => propagationPolicy
),
response_class: @resource_class, )
end
|
#delete? ⇒ Bool
257
258
259
|
# File 'lib/k8s/resource_client.rb', line 257
def delete?
@api_resource.verbs.include? 'delete'
end
|
#delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
280
281
282
283
284
285
286
287
288
289
290
291
292
|
# File 'lib/k8s/resource_client.rb', line 280
def delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil)
list = @transport.request(
method: 'DELETE',
path: 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
|
298
299
300
|
# File 'lib/k8s/resource_client.rb', line 298
def delete_resource(resource, **options)
delete(resource.metadata.name, namespace: resource.metadata.namespace, **options)
end
|
#get(name, namespace: @namespace) ⇒ resource_class
158
159
160
161
162
163
164
|
# File 'lib/k8s/resource_client.rb', line 158
def get(name, namespace: @namespace)
@transport.request(
method: 'GET',
path: path(name, namespace: namespace),
response_class: @resource_class
)
end
|
#get? ⇒ Bool
153
154
155
|
# File 'lib/k8s/resource_client.rb', line 153
def get?
@api_resource.verbs.include? 'get'
end
|
168
169
170
171
172
173
174
|
# File 'lib/k8s/resource_client.rb', line 168
def get_resource(resource)
@transport.request(
method: 'GET',
path: path(resource.metadata.name, namespace: resource.metadata.namespace),
response_class: @resource_class
)
end
|
#json_patch(name, ops, namespace: @namespace) ⇒ resource_class
246
247
248
249
250
251
252
253
254
|
# File 'lib/k8s/resource_client.rb', line 246
def json_patch(name, ops, namespace: @namespace)
@transport.request(
method: 'PATCH',
path: path(name, namespace: namespace),
content_type: 'application/json-patch+json',
request_object: ops,
response_class: @resource_class
)
end
|
#kind ⇒ String
111
112
113
|
# File 'lib/k8s/resource_client.rb', line 111
def kind
@api_resource.kind
end
|
#list(labelSelector: nil, fieldSelector: nil, namespace: @namespace) ⇒ Array<resource_class>
193
194
195
196
197
198
199
200
201
202
203
204
|
# File 'lib/k8s/resource_client.rb', line 193
def list(labelSelector: nil, fieldSelector: nil, namespace: @namespace)
list = @transport.request(
method: 'GET',
path: 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
177
178
179
|
# File 'lib/k8s/resource_client.rb', line 177
def list?
@api_resource.verbs.include? 'list'
end
|
#merge_patch(name, obj, namespace: @namespace, strategic_merge: true) ⇒ resource_class
232
233
234
235
236
237
238
239
240
|
# File 'lib/k8s/resource_client.rb', line 232
def merge_patch(name, obj, namespace: @namespace, strategic_merge: true)
@transport.request(
method: 'PATCH',
path: 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.
92
93
94
|
# File 'lib/k8s/resource_client.rb', line 92
def name
@api_resource.name
end
|
#namespaced? ⇒ Bool
119
120
121
|
# File 'lib/k8s/resource_client.rb', line 119
def namespaced?
!!@api_resource.namespaced
end
|
#patch? ⇒ Bool
223
224
225
|
# File 'lib/k8s/resource_client.rb', line 223
def patch?
@api_resource.verbs.include? 'patch'
end
|
#path(name = nil, subresource: @subresource, namespace: @namespace) ⇒ String
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/k8s/resource_client.rb', line 124
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>
183
184
185
186
187
188
|
# File 'lib/k8s/resource_client.rb', line 183
def process_list(list)
list.items.map { |item|
@resource_class.new(item.merge('apiVersion' => list.apiVersion, 'kind' => @api_resource.kind))
}
end
|
#subresource? ⇒ Boolean
103
104
105
|
# File 'lib/k8s/resource_client.rb', line 103
def subresource?
!!@subresource
end
|
#update? ⇒ Bool
207
208
209
|
# File 'lib/k8s/resource_client.rb', line 207
def update?
@api_resource.verbs.include? 'update'
end
|
#update_resource(resource) ⇒ resource_class
213
214
215
216
217
218
219
220
|
# File 'lib/k8s/resource_client.rb', line 213
def update_resource(resource)
@transport.request(
method: 'PUT',
path: path(resource.metadata.name, namespace: resource.metadata.namespace),
request_object: resource,
response_class: @resource_class
)
end
|