Class: K8s::APIClient

Inherits:
Object
  • Object
show all
Defined in:
lib/k8s/api_client.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(transport, api_version) ⇒ APIClient

Returns a new instance of APIClient.

Parameters:

  • transport (K8s::Transport)
  • api_version (String)

    “group/version” or “version” (core)



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_resourcesArray<K8s::API::MetaV1::APIResource>

Cached APIResources

Returns:



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

Returns:



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

Parameters:



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?.

Returns:

  • (Bool)

    loaded yet?



29
30
31
# File 'lib/k8s/api_client.rb', line 29

def api_resources?
  !!@api_resources
end

#api_versionString

Returns:

  • (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

Parameters:

  • resource (K8s::Resource)
  • namespace (String, nil) (defaults to: nil)

    default if resource is missing namespace

Returns:

Raises:



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.

Parameters:

  • resources (Array<K8s::ResourceClient>) (defaults to: nil)

    default is all listable resources for api

  • **options

    @see [K8s::ResourceClient#list]

Returns:



103
104
105
106
107
# File 'lib/k8s/api_client.rb', line 103

def list_resources(resources = nil, **options)
  resources ||= self.resources.select{|resource| resource.list? }

  ResourceClient.list(resource, @transport, **options)
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

Parameters:

  • resource_name (String)
  • namespace (String, nil) (defaults to: nil)

Returns:

Raises:



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?

Parameters:

  • namespace (String, nil) (defaults to: nil)

Returns:



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