Class: K8s::Client
- Inherits:
-
Object
- Object
- K8s::Client
- Defined in:
- lib/k8s/client.rb,
lib/k8s/client/version.rb
Constant Summary collapse
- VERSION =
"0.1.0"
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) ⇒ Array<APIClient>
- #client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
- #create_resource(resource) ⇒ K8s::Resource
- #delete_resource(resource) ⇒ K8s::Resource
- #get_resource(resource) ⇒ K8s::Resource
- #get_resources(resources) ⇒ Array<K8s::Resource, nil>
-
#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.
- #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.
23 24 25 26 27 28 |
# File 'lib/k8s/client.rb', line 23 def initialize(transport, namespace: nil) @transport = transport @namespace = namespace @api_clients = {} end |
Class Method Details
.config(config) ⇒ K8s::Client
13 14 15 |
# File 'lib/k8s/client.rb', line 13 def self.config(config) new(Transport.config(config)) end |
.in_cluster_config ⇒ K8s::Client
18 19 20 |
# File 'lib/k8s/client.rb', line 18 def self.in_cluster_config new(Transport.in_cluster_config) end |
Instance Method Details
#api(api_version = 'v1') ⇒ APIClient
40 41 42 |
# File 'lib/k8s/client.rb', line 40 def api(api_version = 'v1') @api_clients[api_version] ||= APIClient.new(@transport, api_version) end |
#api_groups ⇒ Array<String>
Cached /apis preferred group apiVersions
56 57 58 |
# File 'lib/k8s/client.rb', line 56 def api_groups @api_groups || api_groups! end |
#api_groups! ⇒ Array<String>
Force-update /apis cache. Required if creating new CRDs/apiservices.
48 49 50 51 52 |
# File 'lib/k8s/client.rb', line 48 def api_groups! @api_groups = @transport.get('/apis', response_class: K8s::API::MetaV1::APIGroupList, ).groups.map{|api_group| api_group.preferredVersion.groupVersion } end |
#apis(api_versions = nil, prefetch_resources: false) ⇒ Array<APIClient>
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/k8s/client.rb', line 62 def apis(api_versions = nil, prefetch_resources: false) api_versions ||= ['v1'] + self.api_groups if prefetch_resources # api groups that are missing their api_resources api_paths = api_versions .select{|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).each do |api_resource_list| api(api_resource_list.groupVersion).api_resources = api_resource_list.resources end end api_versions.map{|api_version| api(api_version) } end |
#client_for_resource(resource, namespace: nil) ⇒ K8s::ResourceClient
103 104 105 |
# File 'lib/k8s/client.rb', line 103 def client_for_resource(resource, namespace: nil) api(resource.apiVersion).client_for_resource(resource, namespace: namespace) end |
#create_resource(resource) ⇒ K8s::Resource
109 110 111 |
# File 'lib/k8s/client.rb', line 109 def create_resource(resource) client_for_resource(resource).create_resource(resource) end |
#delete_resource(resource) ⇒ K8s::Resource
144 145 146 |
# File 'lib/k8s/client.rb', line 144 def delete_resource(resource) client_for_resource(resource).delete_resource(resource) end |
#get_resource(resource) ⇒ K8s::Resource
115 116 117 |
# File 'lib/k8s/client.rb', line 115 def get_resource(resource) client_for_resource(resource).get_resource(resource) end |
#get_resources(resources) ⇒ Array<K8s::Resource, nil>
121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/k8s/client.rb', line 121 def get_resources(resources) # prefetch api resources apis(resources.map{|resource| resource.apiVersion }.uniq, prefetch_resources: true) resource_clients = resources.map{|resource| client_for_resource(resource) } requests = resources.zip(resource_clients).map{|resource, resource_client| { method: 'GET', path: resource_client.path(resource..name, namespace: resource..namespace), response_class: resource_client.resource_class, } } responses = @transport.requests(*requests, 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.
93 94 95 96 97 |
# File 'lib/k8s/client.rb', line 93 def list_resources(resources = nil, **) resources ||= self.resources.select{|resource| resource.list? } ResourceClient.list(resources, @transport, **) end |
#resources(namespace: nil) ⇒ Array<K8s::ResourceClient>
82 83 84 |
# File 'lib/k8s/client.rb', line 82 def resources(namespace: nil) apis(prefetch_resources: true).map { |api| api.resources(namespace: namespace) }.flatten end |
#update_resource(resource) ⇒ K8s::Resource
138 139 140 |
# File 'lib/k8s/client.rb', line 138 def update_resource(resource) client_for_resource(resource).update_resource(resource) end |
#version ⇒ K8s::API::Version
32 33 34 35 36 |
# File 'lib/k8s/client.rb', line 32 def version @transport.get('/version', response_class: K8s::API::Version, ) end |