Class: K8s::Client
- Inherits:
-
Object
- Object
- K8s::Client
- Defined in:
- lib/k8s/client.rb,
lib/k8s/client/version.rb
Overview
Top-level client wrapper. Uses a Transport instance to talk to the kube API. Offers access to APIClient and ResourceClient instances.
Constant Summary collapse
- VERSION =
Updated on releases using semver.
"0.6.4"
Instance Attribute Summary collapse
-
#transport ⇒ Object
readonly
Returns the value of attribute transport.
Class Method Summary collapse
Instance Method Summary collapse
- #api(api_version = 'v1') ⇒ APIClient
-
#api_groups ⇒ Array<String>
Cached /apis preferred group apiVersions.
-
#api_groups! ⇒ Array<String>
Force-update /apis cache.
- #apis(api_versions = nil, prefetch_resources: false, skip_missing: false) ⇒ Array<APIClient>
- #client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
- #create_resource(resource) ⇒ K8s::Resource
- #delete_resource(resource, **options) ⇒ K8s::Resource
- #get_resource(resource) ⇒ K8s::Resource
-
#get_resources(resources) ⇒ Array<K8s::Resource, nil>
Returns nils for any resources that do not exist.
-
#initialize(transport, namespace: nil) ⇒ Client
constructor
A new instance of Client.
-
#list_resources(resources = nil, **options) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
- #patch_resource(resource, attrs) ⇒ Object
- #resources(namespace: nil) ⇒ Array<K8s::ResourceClient>
- #update_resource(resource) ⇒ K8s::Resource
- #version ⇒ K8s::API::Version
Constructor Details
#initialize(transport, namespace: nil) ⇒ Client
Returns a new instance of Client.
53 54 55 56 57 58 |
# File 'lib/k8s/client.rb', line 53 def initialize(transport, namespace: nil) @transport = transport @namespace = namespace @api_clients = {} end |
Instance Attribute Details
#transport ⇒ Object (readonly)
Returns the value of attribute transport.
49 50 51 |
# File 'lib/k8s/client.rb', line 49 def transport @transport end |
Class Method Details
.config(config, namespace: nil, **options) ⇒ K8s::Client
37 38 39 40 41 42 |
# File 'lib/k8s/client.rb', line 37 def self.config(config, namespace: nil, **) new( Transport.config(config, **), namespace: namespace ) end |
.in_cluster_config ⇒ K8s::Client
45 46 47 |
# File 'lib/k8s/client.rb', line 45 def self.in_cluster_config new(Transport.in_cluster_config) end |
Instance Method Details
#api(api_version = 'v1') ⇒ APIClient
68 69 70 |
# File 'lib/k8s/client.rb', line 68 def api(api_version = 'v1') @api_clients[api_version] ||= APIClient.new(@transport, api_version) end |
#api_groups ⇒ Array<String>
Cached /apis preferred group apiVersions
85 86 87 |
# File 'lib/k8s/client.rb', line 85 def api_groups @api_groups || api_groups! end |
#api_groups! ⇒ Array<String>
Force-update /apis cache. Required if creating new CRDs/apiservices.
76 77 78 79 80 81 |
# File 'lib/k8s/client.rb', line 76 def api_groups! @api_groups = @transport.get( '/apis', response_class: K8s::API::MetaV1::APIGroupList ).groups.map{ |api_group| api_group.versions.map(&:groupVersion) }.flatten end |
#apis(api_versions = nil, prefetch_resources: false, skip_missing: false) ⇒ Array<APIClient>
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/k8s/client.rb', line 93 def apis(api_versions = nil, prefetch_resources: false, skip_missing: false) api_versions ||= ['v1'] + api_groups if prefetch_resources # api groups that are missing their api_resources api_paths = api_versions .uniq .reject{ |api_version| api(api_version).api_resources? } .map{ |api_version| APIClient.path(api_version) } # load into APIClient.api_resources= @transport.gets(*api_paths, response_class: K8s::API::MetaV1::APIResourceList, skip_missing: skip_missing).each do |api_resource_list| api(api_resource_list.groupVersion).api_resources = api_resource_list.resources if api_resource_list end end api_versions.map{ |api_version| api(api_version) } end |
#client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
136 137 138 |
# File 'lib/k8s/client.rb', line 136 def client_for_resource(resource, namespace: nil) api(resource.apiVersion).client_for_resource(resource, namespace: namespace) end |
#create_resource(resource) ⇒ K8s::Resource
142 143 144 |
# File 'lib/k8s/client.rb', line 142 def create_resource(resource) client_for_resource(resource).create_resource(resource) end |
#delete_resource(resource, **options) ⇒ K8s::Resource
190 191 192 |
# File 'lib/k8s/client.rb', line 190 def delete_resource(resource, **) client_for_resource(resource).delete_resource(resource, **) end |
#get_resource(resource) ⇒ K8s::Resource
148 149 150 |
# File 'lib/k8s/client.rb', line 148 def get_resource(resource) client_for_resource(resource).get_resource(resource) end |
#get_resources(resources) ⇒ Array<K8s::Resource, nil>
Returns nils for any resources that do not exist. This includes custom resources that were not yet defined.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/k8s/client.rb', line 157 def get_resources(resources) # prefetch api resources, skip missing APIs resource_apis = apis(resources.map(&:apiVersion), prefetch_resources: true, skip_missing: true) # map each resource to excon request options, or nil if resource is not (yet) defined requests = resources.zip(resource_apis).map{ |resource, api_client| next nil unless api_client.api_resources? resource_client = api_client.client_for_resource(resource) { method: 'GET', path: resource_client.path(resource..name, namespace: resource..namespace), response_class: resource_client.resource_class } } # map non-nil requests to response objects, or nil for nil request options Util.compact_map(requests) { |reqs| @transport.requests(*reqs, skip_missing: true) } end |
#list_resources(resources = nil, **options) ⇒ Array<K8s::Resource>
Pipeline list requests for multiple resource types.
Returns flattened array with mixed resource kinds.
125 126 127 128 129 |
# File 'lib/k8s/client.rb', line 125 def list_resources(resources = nil, **) resources ||= self.resources.select(&:list?) ResourceClient.list(resources, @transport, **) end |
#patch_resource(resource, attrs) ⇒ Object
194 195 196 |
# File 'lib/k8s/client.rb', line 194 def patch_resource(resource, attrs) client_for_resource(resource).json_patch(resource..name, attrs) end |
#resources(namespace: nil) ⇒ Array<K8s::ResourceClient>
114 115 116 |
# File 'lib/k8s/client.rb', line 114 def resources(namespace: nil) apis(prefetch_resources: true).map { |api| api.resources(namespace: namespace) }.flatten end |
#update_resource(resource) ⇒ K8s::Resource
182 183 184 |
# File 'lib/k8s/client.rb', line 182 def update_resource(resource) client_for_resource(resource).update_resource(resource) end |
#version ⇒ K8s::API::Version
62 63 64 |
# File 'lib/k8s/client.rb', line 62 def version @version ||= @transport.version end |