Class: K8s::APIClient
- Inherits:
-
Object
- Object
- K8s::APIClient
- Defined in:
- lib/k8s/api_client.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#api_resources ⇒ Array<K8s::API::MetaV1::APIResource>
Cached APIResources.
-
#api_resources! ⇒ Array<K8s::API::MetaV1::APIResource>
Force-update APIResources.
- #api_resources=(api_resources) ⇒ Object
-
#api_resources? ⇒ Bool
Loaded yet?.
- #api_version ⇒ String
- #client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
-
#initialize(transport, api_version) ⇒ APIClient
constructor
A new instance of APIClient.
-
#list_resources(resources = nil, **options) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
- #path(*path) ⇒ Object
- #resource(resource_name, namespace: nil) ⇒ K8s::ResourceClient
-
#resources(namespace: nil) ⇒ Array<K8s::ResourceClient>
TODO: skip non-namespaced resources if namespace is given, or ignore namespace?.
Constructor Details
#initialize(transport, api_version) ⇒ APIClient
Returns a new instance of APIClient.
14 15 16 17 |
# File 'lib/k8s/api_client.rb', line 14 def initialize(transport, api_version) @transport = transport @api_version = api_version end |
Class Method Details
.path(api_version) ⇒ Object
3 4 5 6 7 8 9 10 |
# File 'lib/k8s/api_client.rb', line 3 def self.path(api_version) if api_version.include? '/' File.join('/apis', api_version) else File.join('/api', api_version) end end |
Instance Method Details
#api_resources ⇒ Array<K8s::API::MetaV1::APIResource>
Cached APIResources
50 51 52 |
# File 'lib/k8s/api_client.rb', line 50 def api_resources @api_resources || api_resources! end |
#api_resources! ⇒ Array<K8s::API::MetaV1::APIResource>
Force-update APIResources
41 42 43 44 45 |
# File 'lib/k8s/api_client.rb', line 41 def api_resources! @api_resources = @transport.get(self.path, response_class: K8s::API::MetaV1::APIResourceList, ).resources end |
#api_resources=(api_resources) ⇒ Object
34 35 36 |
# File 'lib/k8s/api_client.rb', line 34 def api_resources=(api_resources) @api_resources = api_resources end |
#api_resources? ⇒ Bool
Returns loaded yet?.
29 30 31 |
# File 'lib/k8s/api_client.rb', line 29 def api_resources? !!@api_resources end |
#api_version ⇒ String
20 21 22 |
# File 'lib/k8s/api_client.rb', line 20 def api_version @api_version end |
#client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/k8s/api_client.rb', line 72 def client_for_resource(resource, namespace: nil) unless @api_version == resource.apiVersion raise K8s::Error, "Invalid apiVersion=#{resource.apiVersion} for #{@api_version} client" end unless api_resource = api_resources.find{ |api_resource| api_resource.kind == resource.kind } raise K8s::Error, "Unknown resource kind=#{api_resource.kind} for #{@api_version}" end ResourceClient.new(@transport, self, api_resource, namespace: resource..namespace || namespace, ) end |
#list_resources(resources = nil, **options) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
Returns flattened array with mixed resource kinds.
103 104 105 106 107 |
# File 'lib/k8s/api_client.rb', line 103 def list_resources(resources = nil, **) resources ||= self.resources.select{|resource| resource.list? } ResourceClient.list(resource, @transport, **) end |
#path(*path) ⇒ Object
24 25 26 |
# File 'lib/k8s/api_client.rb', line 24 def path(*path) @transport.path(self.class.path(@api_version), *path) end |
#resource(resource_name, namespace: nil) ⇒ K8s::ResourceClient
58 59 60 61 62 63 64 65 66 |
# File 'lib/k8s/api_client.rb', line 58 def resource(resource_name, namespace: nil) unless api_resource = api_resources.find{ |api_resource| api_resource.name == resource_name } raise K8s::Error, "Unknown resource #{resource_name} for #{@api_version}" end ResourceClient.new(@transport, self, api_resource, namespace: namespace, ) end |
#resources(namespace: nil) ⇒ Array<K8s::ResourceClient>
TODO: skip non-namespaced resources if namespace is given, or ignore namespace?
90 91 92 93 94 |
# File 'lib/k8s/api_client.rb', line 90 def resources(namespace: nil) api_resources.map{ |api_resource| ResourceClient.new(@transport, self, api_resource, namespace: namespace, ) } end |