fog-kubevirt 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/fog/kubevirt/compute/compute.rb +125 -37
- data/lib/fog/kubevirt/compute/models/networkattachmentdef.rb +25 -0
- data/lib/fog/kubevirt/compute/models/networkattachmentdefs.rb +59 -0
- data/lib/fog/kubevirt/compute/models/pvc.rb +59 -0
- data/lib/fog/kubevirt/compute/models/pvcs.rb +76 -0
- data/lib/fog/kubevirt/compute/models/server.rb +42 -0
- data/lib/fog/kubevirt/compute/models/servers.rb +32 -0
- data/lib/fog/kubevirt/compute/models/service.rb +36 -0
- data/lib/fog/kubevirt/compute/models/services.rb +83 -0
- data/lib/fog/kubevirt/compute/models/vm.rb +6 -60
- data/lib/fog/kubevirt/compute/models/vm_base.rb +75 -0
- data/lib/fog/kubevirt/compute/models/vm_data.rb +164 -0
- data/lib/fog/kubevirt/compute/models/vms.rb +59 -19
- data/lib/fog/kubevirt/compute/models/volume.rb +73 -0
- data/lib/fog/kubevirt/compute/models/volumes.rb +61 -0
- data/lib/fog/kubevirt/compute/requests/create_networkattachmentdef.rb +37 -0
- data/lib/fog/kubevirt/compute/requests/create_service.rb +18 -0
- data/lib/fog/kubevirt/compute/requests/create_vm.rb +2 -0
- data/lib/fog/kubevirt/compute/requests/create_volume.rb +19 -0
- data/lib/fog/kubevirt/compute/requests/delete_networkattachmentdef.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/delete_pvc.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/delete_service.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/delete_volume.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/get_networkattachmentdef.rb +19 -0
- data/lib/fog/kubevirt/compute/requests/get_pvc.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/get_server.rb +32 -0
- data/lib/fog/kubevirt/compute/requests/get_service.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/get_vm.rb +1 -1
- data/lib/fog/kubevirt/compute/requests/get_vminstance.rb +4 -4
- data/lib/fog/kubevirt/compute/requests/get_volume.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/list_networkattachmentdefs.rb +21 -0
- data/lib/fog/kubevirt/compute/requests/list_pvcs.rb +22 -0
- data/lib/fog/kubevirt/compute/requests/list_servers.rb +25 -0
- data/lib/fog/kubevirt/compute/requests/list_services.rb +22 -0
- data/lib/fog/kubevirt/compute/requests/list_vms.rb +4 -4
- data/lib/fog/kubevirt/compute/requests/list_volumes.rb +22 -0
- data/lib/fog/kubevirt/version.rb +1 -1
- data/spec/compute_v1alpha2_spec.rb +30 -0
- data/spec/fixtures/kubevirt/networkattachmentdefinition/networkattachmentdefinitions_crud.yml +320 -0
- data/spec/fixtures/kubevirt/pvc/pvcs_crud.yml +316 -0
- data/spec/fixtures/kubevirt/service/services_crud.yml +316 -0
- data/spec/fixtures/kubevirt/volume/volumes_crud.yml +316 -0
- data/spec/network_attachment_definition_v1alpha2_spec.rb +28 -0
- data/spec/pvcs_v1alpha2_spec.rb +52 -0
- data/spec/shared_context.rb +53 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/volumes_v1alpha2_spec.rb +45 -0
- metadata +87 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d98797096ddd6d2f4464998bcdbf56dcac2e9ab
|
4
|
+
data.tar.gz: eea11774097b4c70fe95ecbbef47847c454fa548
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2ea3b5710d1783c0e4710e625d2a8a8271afe322e196a52d59b27164dcf7f76a770fd95f5b77857a5447a6162a60bc96fbad78415d46c3511e005ce65a11aa0
|
7
|
+
data.tar.gz: 57e59e0eeb42b6542735181069436c234ca1c236fe179b44c8a45eebab6b44e682c247b7d917eacc079aa43dce2b4c18285ae54094c338d775203a8fab747451
|
@@ -1,39 +1,64 @@
|
|
1
1
|
require 'delegate'
|
2
|
+
require 'json'
|
3
|
+
require 'rest-client'
|
2
4
|
|
3
5
|
require "fog/core"
|
4
6
|
|
5
7
|
module Fog
|
6
8
|
module Kubevirt
|
7
9
|
class Compute < Fog::Service
|
8
|
-
|
9
|
-
recognizes :kubevirt_hostname, :kubevirt_port, :kubevirt_namespace, :kubevirt_log
|
10
|
+
recognizes :kubevirt_token, :kubevirt_hostname, :kubevirt_port, :kubevirt_namespace, :kubevirt_log
|
10
11
|
|
11
12
|
model_path 'fog/kubevirt/compute/models'
|
12
13
|
model :vminstance
|
13
14
|
collection :vminstances
|
15
|
+
model :networkattachmentdef
|
16
|
+
collection :networkattachmentdefs
|
14
17
|
model :node
|
15
18
|
collection :nodes
|
16
19
|
model :vm
|
17
20
|
collection :vms
|
21
|
+
model :pvc
|
22
|
+
collection :pvcs
|
23
|
+
model :server
|
24
|
+
collection :servers
|
25
|
+
model :service
|
26
|
+
collection :services
|
18
27
|
model :template
|
19
28
|
collection :templates
|
20
29
|
model :volume
|
21
30
|
collection :volumes
|
22
31
|
|
23
32
|
request_path 'fog/kubevirt/compute/requests'
|
24
|
-
|
33
|
+
request :create_networkattachmentdef
|
25
34
|
request :create_vm
|
26
35
|
request :create_vminstance
|
27
36
|
request :create_pvc
|
37
|
+
request :create_service
|
38
|
+
request :create_volume
|
39
|
+
request :delete_networkattachmentdef
|
40
|
+
request :delete_pvc
|
41
|
+
request :delete_service
|
28
42
|
request :delete_vminstance
|
29
43
|
request :delete_vm
|
44
|
+
request :delete_volume
|
30
45
|
request :get_vminstance
|
46
|
+
request :get_networkattachmentdef
|
31
47
|
request :get_node
|
48
|
+
request :get_pvc
|
32
49
|
request :get_vm
|
50
|
+
request :get_volume
|
51
|
+
request :get_server
|
52
|
+
request :get_service
|
33
53
|
request :get_template
|
34
54
|
request :list_vminstances
|
35
55
|
request :list_nodes
|
56
|
+
request :list_networkattachmentdefs
|
36
57
|
request :list_vms
|
58
|
+
request :list_pvcs
|
59
|
+
request :list_volumes
|
60
|
+
request :list_servers
|
61
|
+
request :list_services
|
37
62
|
request :list_templates
|
38
63
|
request :update_vm
|
39
64
|
|
@@ -50,8 +75,9 @@ module Fog
|
|
50
75
|
end
|
51
76
|
|
52
77
|
class ExceptionWrapper
|
53
|
-
def initialize(client)
|
78
|
+
def initialize(client, version)
|
54
79
|
@client = client
|
80
|
+
@version = version
|
55
81
|
end
|
56
82
|
|
57
83
|
def method_missing(symbol, *args)
|
@@ -71,6 +97,10 @@ module Fog
|
|
71
97
|
def respond_to_missing?(method_name, include_private = false)
|
72
98
|
@client.respond_to?(symbol, include_all) || super
|
73
99
|
end
|
100
|
+
|
101
|
+
def version
|
102
|
+
@version
|
103
|
+
end
|
74
104
|
end
|
75
105
|
|
76
106
|
#
|
@@ -122,17 +152,19 @@ module Fog
|
|
122
152
|
include Shared
|
123
153
|
|
124
154
|
#
|
125
|
-
# The API
|
155
|
+
# The API group of the Kubernetes core:
|
126
156
|
#
|
127
157
|
CORE_GROUP = ''.freeze
|
128
|
-
CORE_VERSION = 'v1'.freeze
|
129
158
|
|
130
159
|
#
|
131
|
-
# The API
|
160
|
+
# The API group of KubeVirt:
|
132
161
|
#
|
133
162
|
KUBEVIRT_GROUP = 'kubevirt.io'.freeze
|
134
|
-
|
135
|
-
|
163
|
+
|
164
|
+
#
|
165
|
+
# The API group of the Kubernetes network extention:
|
166
|
+
#
|
167
|
+
NETWORK_GROUP = 'k8s.cni.cncf.io'.freeze
|
136
168
|
|
137
169
|
def initialize(options={})
|
138
170
|
require 'kubeclient'
|
@@ -146,17 +178,6 @@ module Fog
|
|
146
178
|
|
147
179
|
@namespace = options[:kubevirt_namespace] || 'default'
|
148
180
|
|
149
|
-
# Prepare the TLS and authentication options that will be used for the standard Kubernetes API
|
150
|
-
# and also for the KubeVirt extension:
|
151
|
-
@opts = {
|
152
|
-
:ssl_options => {
|
153
|
-
:verify_ssl => OpenSSL::SSL::VERIFY_NONE,
|
154
|
-
},
|
155
|
-
:auth_options => {
|
156
|
-
:bearer_token => @kubevirt_token
|
157
|
-
}
|
158
|
-
}
|
159
|
-
|
160
181
|
# Kubeclient needs different client objects for different API groups. We will keep in this hash the
|
161
182
|
# client objects, indexed by API path/version.
|
162
183
|
@clients = {}
|
@@ -249,7 +270,7 @@ module Fog
|
|
249
270
|
populate_notice_attributes(vminstance, notice)
|
250
271
|
vminstance
|
251
272
|
end
|
252
|
-
watch = kubevirt_client.
|
273
|
+
watch = kubevirt_client.watch_virtual_machine_instances(opts)
|
253
274
|
|
254
275
|
WatchWrapper.new(watch, mapper)
|
255
276
|
end
|
@@ -296,7 +317,6 @@ module Fog
|
|
296
317
|
|
297
318
|
private
|
298
319
|
|
299
|
-
|
300
320
|
#
|
301
321
|
# Populates required notice attributes
|
302
322
|
#
|
@@ -310,47 +330,115 @@ module Fog
|
|
310
330
|
end
|
311
331
|
|
312
332
|
#
|
313
|
-
# Lazily creates the a client for the given Kubernetes API path
|
333
|
+
# Lazily creates the a client for the given Kubernetes API path.
|
314
334
|
#
|
315
335
|
# @param path [String] The Kubernetes API path.
|
316
|
-
# @
|
317
|
-
# @return [Kubeclient::Client] The client for the given path and version.
|
336
|
+
# @return [Kubeclient::Client] The client for the given path.
|
318
337
|
#
|
319
|
-
def create_client(path
|
320
|
-
# Return the client immediately if it has been created before:
|
321
|
-
key = path + '/' + version
|
322
|
-
client = @clients[key]
|
323
|
-
return client if client
|
324
|
-
|
325
|
-
# Create the client and save it:
|
338
|
+
def create_client(path)
|
326
339
|
url = URI::Generic.build(
|
327
340
|
:scheme => 'https',
|
328
341
|
:host => @host,
|
329
342
|
:port => @port,
|
330
343
|
:path => path
|
331
344
|
)
|
345
|
+
|
346
|
+
if @kubevirt_token.to_s.empty?
|
347
|
+
create_client_from_config(path)
|
348
|
+
else
|
349
|
+
create_client_from_token(url)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def create_client_from_token(url)
|
354
|
+
# Prepare the TLS and authentication options that will be used for the standard Kubernetes API
|
355
|
+
# and also for the KubeVirt extension:
|
356
|
+
@opts = {
|
357
|
+
:ssl_options => {
|
358
|
+
:verify_ssl => OpenSSL::SSL::VERIFY_NONE,
|
359
|
+
},
|
360
|
+
:auth_options => {
|
361
|
+
:bearer_token => @kubevirt_token
|
362
|
+
}
|
363
|
+
}
|
364
|
+
version = detect_version(url.to_s, @opts[:ssl_options])
|
365
|
+
key = url.path + '/' + version
|
366
|
+
|
367
|
+
client = check_client(key)
|
368
|
+
return client if client
|
369
|
+
|
332
370
|
client = Kubeclient::Client.new(
|
333
371
|
url.to_s,
|
334
372
|
version,
|
335
373
|
@opts
|
336
374
|
)
|
337
|
-
|
375
|
+
|
376
|
+
wrap_client(client, version, key)
|
377
|
+
end
|
378
|
+
|
379
|
+
def create_client_from_config(path)
|
380
|
+
config = Kubeclient::Config.read(ENV['KUBECONFIG'] || ENV['HOME']+'/.kube/config')
|
381
|
+
context = config.context
|
382
|
+
url = context.api_endpoint
|
383
|
+
version = detect_version(url + path, context.ssl_options)
|
384
|
+
key = path + '/' + version
|
385
|
+
|
386
|
+
client = check_client(key)
|
387
|
+
return client if client
|
388
|
+
|
389
|
+
client = Kubeclient::Client.new(
|
390
|
+
url + path,
|
391
|
+
version,
|
392
|
+
ssl_options: context.ssl_options,
|
393
|
+
auth_options: context.auth_options
|
394
|
+
)
|
395
|
+
|
396
|
+
wrap_client(client, version, key)
|
397
|
+
end
|
398
|
+
|
399
|
+
def check_client(key)
|
400
|
+
@clients[key]
|
401
|
+
end
|
402
|
+
|
403
|
+
def wrap_client(client, version, key)
|
404
|
+
wrapped_client = ExceptionWrapper.new(client, version)
|
338
405
|
@clients[key] = wrapped_client
|
339
406
|
|
340
|
-
# Return the client:
|
341
407
|
wrapped_client
|
342
408
|
end
|
343
409
|
|
410
|
+
def detect_version(url, ssl_options)
|
411
|
+
options = {
|
412
|
+
ssl_ca_file: ssl_options[:ca_file],
|
413
|
+
ssl_cert_store: ssl_options[:cert_store],
|
414
|
+
verify_ssl: ssl_options[:verify_ssl],
|
415
|
+
ssl_client_cert: ssl_options[:client_cert],
|
416
|
+
ssl_client_key: ssl_options[:client_key],
|
417
|
+
}
|
418
|
+
|
419
|
+
response = ::JSON.parse(RestClient::Resource.new(url, options).get)
|
420
|
+
|
421
|
+
# version detected based on
|
422
|
+
# https://github.com/kubernetes-incubator/apiserver-builder/blob/master/docs/concepts/aggregation.md#viewing-discovery-information
|
423
|
+
preferredVersion = response["preferredVersion"]
|
424
|
+
return preferredVersion["version"] if preferredVersion
|
425
|
+
response["versions"][0]
|
426
|
+
end
|
427
|
+
|
344
428
|
def openshift_client
|
345
|
-
create_client('/oapi'
|
429
|
+
create_client('/oapi')
|
346
430
|
end
|
347
431
|
|
348
432
|
def kube_client
|
349
|
-
create_client('/api'
|
433
|
+
create_client('/api')
|
350
434
|
end
|
351
435
|
|
352
436
|
def kubevirt_client
|
353
|
-
create_client('/apis/' + KUBEVIRT_GROUP
|
437
|
+
create_client('/apis/' + KUBEVIRT_GROUP)
|
438
|
+
end
|
439
|
+
|
440
|
+
def kube_net_client
|
441
|
+
create_client('/apis/' + NETWORK_GROUP)
|
354
442
|
end
|
355
443
|
|
356
444
|
def log
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
class Networkattachmentdef < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :namespace, :aliases => 'metadata_namespace'
|
8
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
9
|
+
attribute :uid, :aliases => 'metadata_uid'
|
10
|
+
attribute :config, :aliases => 'spec_config'
|
11
|
+
|
12
|
+
def self.parse(object)
|
13
|
+
metadata = object[:metadata]
|
14
|
+
{
|
15
|
+
:namespace => metadata[:namespace],
|
16
|
+
:name => metadata[:name],
|
17
|
+
:resource_version => metadata[:resourceVersion],
|
18
|
+
:uid => metadata[:uid],
|
19
|
+
:config => object[:spec][:config]
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/networkattachmentdef'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Networkattachmentdefs < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Networkattachmentdef
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
networkattachmentdefs = service.list_networkattachmentdefs(filters)
|
14
|
+
@kind = networkattachmentdefs.kind
|
15
|
+
@resource_version = networkattachmentdefs.resource_version
|
16
|
+
load networkattachmentdefs
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
new service.get_networkattachmentdef(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Creates network attachment definition using provided parameters:
|
24
|
+
# name[String] - name of the network attachment
|
25
|
+
# config[String] - the configuration of the attachment, i.e.:
|
26
|
+
# '{ :cniVersion => "0.3.1", :type => "ovs", :bridge => "red" }'
|
27
|
+
#
|
28
|
+
# @param args[Hash] contains attachment definition
|
29
|
+
def create(args = {})
|
30
|
+
name = args[:name]
|
31
|
+
config = args[:config]
|
32
|
+
|
33
|
+
net_att_def = {
|
34
|
+
:metadata => {
|
35
|
+
:name => name,
|
36
|
+
:namespace => service.namespace
|
37
|
+
},
|
38
|
+
:spec => {
|
39
|
+
:config => config
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
service.create_networkattachmentdef(net_att_def)
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete(name)
|
47
|
+
begin
|
48
|
+
net_att_def = get(name)
|
49
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
50
|
+
# the network attachment definition doesn't exist
|
51
|
+
net_att_def = nil
|
52
|
+
end
|
53
|
+
|
54
|
+
service.delete_networkattachmentdef(name, service.namespace) unless net_att_def.nil?
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
class Pvc < Fog::Model
|
5
|
+
# Metadata
|
6
|
+
identity :name
|
7
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
8
|
+
attribute :uid, :aliases => 'metadata_uid'
|
9
|
+
attribute :namespace, :aliases => 'metadata_namespace'
|
10
|
+
|
11
|
+
# Spec
|
12
|
+
attribute :access_modes, :aliases => 'spec_access_modes'
|
13
|
+
attribute :storage_class, :aliases => 'spec_storage_class'
|
14
|
+
attribute :volume_mode, :aliases => 'spec_volume_mode'
|
15
|
+
attribute :volume_name, :aliases => 'spec_volume_name'
|
16
|
+
|
17
|
+
# Spec - selector
|
18
|
+
attribute :match_expressions, :aliases => 'spec_match_expressions'
|
19
|
+
attribute :match_labels, :aliases => 'spec_match_labels'
|
20
|
+
|
21
|
+
# Spec - resources
|
22
|
+
attribute :limits, :aliases => 'spec_limits'
|
23
|
+
attribute :requests, :aliases => 'spec_requests'
|
24
|
+
|
25
|
+
# Status
|
26
|
+
attribute :phase, :aliases => 'status_phase'
|
27
|
+
attribute :reason, :aliases => 'status_reason'
|
28
|
+
attribute :message, :aliases => 'status_message'
|
29
|
+
|
30
|
+
def self.parse(object)
|
31
|
+
metadata = object[:metadata]
|
32
|
+
spec = object[:spec]
|
33
|
+
status = object[:status]
|
34
|
+
|
35
|
+
{
|
36
|
+
:name => metadata[:name],
|
37
|
+
:resource_version => metadata[:resourceVersion],
|
38
|
+
:uid => metadata[:uid],
|
39
|
+
:namespace => metadata[:namespace],
|
40
|
+
|
41
|
+
:access_modes => spec[:accessModes],
|
42
|
+
:storage_class => spec[:storageClassName],
|
43
|
+
:volume_mode => spec[:volumeMode],
|
44
|
+
:volume_name => spec[:volumeName],
|
45
|
+
|
46
|
+
:match_expressions => spec.dig(:selector, :matchExpressions),
|
47
|
+
:match_labels => spec.dig(:selector, :matchLabels),
|
48
|
+
:limits => spec.dig(:resources, :limits),
|
49
|
+
:requests => spec.dig(:resources, :requests),
|
50
|
+
|
51
|
+
:phase => status[:phase],
|
52
|
+
:reason => status[:reason],
|
53
|
+
:message => status[:message]
|
54
|
+
}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/pvc'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Pvcs < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Pvc
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
pvcs = service.list_pvcs(filters)
|
14
|
+
@kind = pvcs.kind
|
15
|
+
@resource_version = pvcs.resource_version
|
16
|
+
load pvcs
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
new service.get_pvc(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Creates a pvc using provided paramters:
|
24
|
+
# https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims
|
25
|
+
# :name [String] - name of a pvc
|
26
|
+
# :namespace [String] - the namespace of the PVC, should be the same as POD's pvc
|
27
|
+
# :storage_class [String] - the storage class name of the pvc
|
28
|
+
# :volume_name [String] - The volume name to
|
29
|
+
# :volume_mode [String] - Filesystem or block device
|
30
|
+
# :accessModes [Arr] - the access modes for the volume, values are specified here:
|
31
|
+
# :requests [Hash] - the request for storage resource, i.e. { :storage => "20Gi" }
|
32
|
+
# :limits [Hash] - the maximum amount of storage to consume, i.e. { :storage => "20Gi" }
|
33
|
+
# :match_labels [Hash] - label query over volumes for binding
|
34
|
+
# :match_expressions [Hash] - list of label selector requirements
|
35
|
+
# @param [Hash] attributes containing details about pvc to be created.
|
36
|
+
def create(args = {})
|
37
|
+
name = args[:name]
|
38
|
+
|
39
|
+
pvc = {
|
40
|
+
:apiVersion => "v1",
|
41
|
+
:kind => "PersistentVolumeClaim",
|
42
|
+
:metadata => {
|
43
|
+
:name => name,
|
44
|
+
:namespace => args[:namespace]
|
45
|
+
},
|
46
|
+
:spec => {
|
47
|
+
:storageClassName => args[:storage_class],
|
48
|
+
:resources => {},
|
49
|
+
:selector => {},
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
pvc[:spec][:resources].merge!(:requests => args[:requests]) if args[:requests]
|
54
|
+
pvc[:spec][:resources].merge!(:limits => args[:limits]) if args[:limits]
|
55
|
+
pvc[:spec][:selector].merge!(:matchLabels => args[:match_labels]) if args[:match_labels]
|
56
|
+
pvc[:spec][:selector].merge!(:matchExpressions => args[:match_expressions]) if args[:match_expressions]
|
57
|
+
pvc[:spec][:accessModes] = args[:access_modes] if args[:access_modes]
|
58
|
+
pvc[:spec][:volumeMode] = args[:volume_mode] if args[:volume_mode]
|
59
|
+
pvc[:spec][:volumeName] = args[:volume_name] if args[:volume_name]
|
60
|
+
service.create_pvc(pvc)
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete(name)
|
64
|
+
begin
|
65
|
+
pvc = get(name)
|
66
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
67
|
+
# the pvc doesn't exist
|
68
|
+
pvc = nil
|
69
|
+
end
|
70
|
+
|
71
|
+
service.delete_pvc(name) unless pvc.nil?
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|