Class: K8s::ResourceClient
- Inherits:
-
Object
- Object
- K8s::ResourceClient
- 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
Class Method Summary collapse
-
.list(resources, transport, namespace: nil, labelSelector: nil, fieldSelector: nil, skip_forbidden: false) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
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.
- #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
K8s::Resource.
- #subresource ⇒ String?
- #subresource? ⇒ Boolean
- #update? ⇒ Bool
- #update_resource(resource) ⇒ resource_class
Methods included from Utils
Constructor Details
#initialize(transport, api_client, api_resource, namespace: nil, resource_class: K8s::Resource) ⇒ ResourceClient
Returns a new instance of ResourceClient.
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/k8s/resource_client.rb', line 67 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, skip_forbidden: false) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
Returns flattened array with mixed resource kinds.
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/k8s/resource_client.rb', line 49 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
85 86 87 |
# File 'lib/k8s/resource_client.rb', line 85 def api_version @api_client.api_version end |
#create? ⇒ Bool
143 144 145 |
# File 'lib/k8s/resource_client.rb', line 143 def create? @api_resource.verbs.include? 'create' end |
#create_resource(resource) ⇒ resource_class
149 150 151 152 153 154 155 156 |
# File 'lib/k8s/resource_client.rb', line 149 def create_resource(resource) @transport.request( method: 'POST', path: self.path(namespace: resource..namespace), request_object: resource, response_class: @resource_class, ) end |
#delete(name, namespace: @namespace, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
271 272 273 274 275 276 277 278 279 280 |
# File 'lib/k8s/resource_client.rb', line 271 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, # XXX: documented as returning Status ) end |
#delete? ⇒ Bool
263 264 265 |
# File 'lib/k8s/resource_client.rb', line 263 def delete? @api_resource.verbs.include? 'delete' end |
#delete_collection(namespace: @namespace, labelSelector: nil, fieldSelector: nil, propagationPolicy: nil) ⇒ K8s::API::MetaV1::Status
286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/k8s/resource_client.rb', line 286 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, # XXX: documented as returning Status ) process_list(list) end |
#delete_resource(resource, **options) ⇒ K8s::API::MetaV1::Status
304 305 306 |
# File 'lib/k8s/resource_client.rb', line 304 def delete_resource(resource, **) delete(resource..name, namespace: resource..namespace, **) end |
#get(name, namespace: @namespace) ⇒ resource_class
164 165 166 167 168 169 170 |
# File 'lib/k8s/resource_client.rb', line 164 def get(name, namespace: @namespace) @transport.request( method: 'GET', path: self.path(name, namespace: namespace), response_class: @resource_class, ) end |
#get? ⇒ Bool
159 160 161 |
# File 'lib/k8s/resource_client.rb', line 159 def get? @api_resource.verbs.include? 'get' end |
#get_resource(resource) ⇒ resource_class
174 175 176 177 178 179 180 |
# File 'lib/k8s/resource_client.rb', line 174 def get_resource(resource) @transport.request( method: 'GET', path: self.path(resource..name, namespace: resource..namespace), response_class: @resource_class, ) end |
#json_patch(name, ops, namespace: @namespace) ⇒ resource_class
252 253 254 255 256 257 258 259 260 |
# File 'lib/k8s/resource_client.rb', line 252 def json_patch(name, ops, namespace: @namespace) @transport.request( method: 'PATCH', path: self.path(name, namespace: namespace), content_type: 'application/json-patch+json', request_object: ops, response_class: @resource_class, ) end |
#kind ⇒ String
115 116 117 |
# File 'lib/k8s/resource_client.rb', line 115 def kind @api_resource.kind end |
#list(labelSelector: nil, fieldSelector: nil, namespace: @namespace) ⇒ Array<resource_class>
199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/k8s/resource_client.rb', line 199 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
183 184 185 |
# File 'lib/k8s/resource_client.rb', line 183 def list? @api_resource.verbs.include? 'list' end |
#merge_patch(name, obj, namespace: @namespace, strategic_merge: true) ⇒ resource_class
238 239 240 241 242 243 244 245 246 |
# File 'lib/k8s/resource_client.rb', line 238 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.
90 91 92 |
# File 'lib/k8s/resource_client.rb', line 90 def name @api_resource.name end |
#namespace ⇒ String?
95 96 97 |
# File 'lib/k8s/resource_client.rb', line 95 def namespace @namespace end |
#namespaced? ⇒ Bool
125 126 127 |
# File 'lib/k8s/resource_client.rb', line 125 def namespaced? !!@api_resource.namespaced end |
#patch? ⇒ Bool
229 230 231 |
# File 'lib/k8s/resource_client.rb', line 229 def patch? @api_resource.verbs.include? 'patch' end |
#path(name = nil, subresource: @subresource, namespace: @namespace) ⇒ String
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/k8s/resource_client.rb', line 130 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>
189 190 191 192 193 194 |
# File 'lib/k8s/resource_client.rb', line 189 def process_list(list) list.items.map {|item| # list items omit kind/apiVersion @resource_class.new(item.merge('apiVersion' => list.apiVersion, 'kind' => @api_resource.kind)) } end |
#resource ⇒ String
100 101 102 |
# File 'lib/k8s/resource_client.rb', line 100 def resource @resource end |
#resource_class ⇒ class
Returns K8s::Resource.
120 121 122 |
# File 'lib/k8s/resource_client.rb', line 120 def resource_class @resource_class end |
#subresource ⇒ String?
110 111 112 |
# File 'lib/k8s/resource_client.rb', line 110 def subresource @subresource end |
#subresource? ⇒ Boolean
105 106 107 |
# File 'lib/k8s/resource_client.rb', line 105 def subresource? !!@subresource end |
#update? ⇒ Bool
213 214 215 |
# File 'lib/k8s/resource_client.rb', line 213 def update? @api_resource.verbs.include? 'update' end |
#update_resource(resource) ⇒ resource_class
219 220 221 222 223 224 225 226 |
# File 'lib/k8s/resource_client.rb', line 219 def update_resource(resource) @transport.request( method: 'PUT', path: self.path(resource..name, namespace: resource..namespace), request_object: resource, response_class: @resource_class, ) end |