fog-kubevirt 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fog/kubevirt/compute/compute.rb +28 -6
- data/lib/fog/kubevirt/compute/models/persistentvolume.rb +82 -0
- data/lib/fog/kubevirt/compute/models/persistentvolumes.rb +73 -0
- data/lib/fog/kubevirt/compute/models/storageclass.rb +33 -0
- data/lib/fog/kubevirt/compute/models/storageclasses.rb +61 -0
- data/lib/fog/kubevirt/compute/models/vm_base.rb +13 -2
- data/lib/fog/kubevirt/compute/models/vm_data.rb +11 -13
- data/lib/fog/kubevirt/compute/models/vminstance.rb +11 -2
- data/lib/fog/kubevirt/compute/models/vms.rb +48 -19
- data/lib/fog/kubevirt/compute/models/volume.rb +44 -69
- data/lib/fog/kubevirt/compute/models/volumes.rb +3 -58
- data/lib/fog/kubevirt/compute/requests/{create_volume.rb → create_persistentvolume.rb} +2 -2
- data/lib/fog/kubevirt/compute/requests/create_storageclass.rb +18 -0
- data/lib/fog/kubevirt/compute/requests/{delete_volume.rb → delete_persistentvolume.rb} +2 -2
- data/lib/fog/kubevirt/compute/requests/{get_volume.rb → delete_storageclass.rb} +3 -3
- data/lib/fog/kubevirt/compute/requests/delete_vm.rb +1 -1
- data/lib/fog/kubevirt/compute/requests/delete_vminstance.rb +3 -3
- data/lib/fog/kubevirt/compute/requests/get_persistentvolume.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/get_storageclass.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/list_persistentvolumes.rb +22 -0
- data/lib/fog/kubevirt/compute/requests/list_storageclasses.rb +22 -0
- data/lib/fog/kubevirt/compute/requests/list_volumes.rb +14 -6
- data/lib/fog/kubevirt/version.rb +1 -1
- data/spec/create_vm_spec.rb +101 -0
- data/spec/fixtures/kubevirt/{volume/volumes_crud.yml → persistentvolume/persistent_volumes_crud.yml} +0 -0
- data/spec/fixtures/kubevirt/pvc/pvcs_crud.yml +122 -76
- data/spec/fixtures/kubevirt/storageclass/storageclasses_crud.yml +400 -0
- data/spec/fixtures/kubevirt/vm/vm_create_multi.yml +459 -0
- data/spec/fixtures/kubevirt/vm/vm_create_single.yml +362 -0
- data/spec/{volumes_v1alpha2_spec.rb → persistent_volumes_v1alpha2_spec.rb} +11 -11
- data/spec/pvcs_v1alpha2_spec.rb +7 -0
- data/spec/storage_classes_v1_spec.rb +46 -0
- metadata +28 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee0eacc3688d804fe65c3b1aad58a83598ea1464
|
4
|
+
data.tar.gz: 3bb93e156ebcfd91ab968472aa820bad4be79f24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b923222a67ec3decae7a438a62ddcaf47c6f2ea9b242479e0359398a253c715300aada3ea9024a97b2ed41a8df694ca304d019d1c1f7653e91cb84f8db57adae
|
7
|
+
data.tar.gz: d4fac11a34371874e4c2a59983cc1168c8ae5e3a09617a63cd74eb51553951beb0f9f0d38fae5c25f58f9ccba485facee7f21b8f88d2404a6787266e7a3a2096
|
@@ -18,12 +18,16 @@ module Fog
|
|
18
18
|
collection :nodes
|
19
19
|
model :vm
|
20
20
|
collection :vms
|
21
|
+
model :persistentvolume
|
22
|
+
collection :persistentvolumes
|
21
23
|
model :pvc
|
22
24
|
collection :pvcs
|
23
25
|
model :server
|
24
26
|
collection :servers
|
25
27
|
model :service
|
26
28
|
collection :services
|
29
|
+
model :storageclass
|
30
|
+
collection :storageclasses
|
27
31
|
model :template
|
28
32
|
collection :templates
|
29
33
|
model :volume
|
@@ -33,33 +37,38 @@ module Fog
|
|
33
37
|
request :create_networkattachmentdef
|
34
38
|
request :create_vm
|
35
39
|
request :create_vminstance
|
40
|
+
request :create_persistentvolume
|
36
41
|
request :create_pvc
|
37
42
|
request :create_service
|
38
|
-
request :
|
43
|
+
request :create_storageclass
|
39
44
|
request :delete_networkattachmentdef
|
45
|
+
request :delete_persistentvolume
|
40
46
|
request :delete_pvc
|
41
47
|
request :delete_service
|
48
|
+
request :delete_storageclass
|
42
49
|
request :delete_vminstance
|
43
50
|
request :delete_vm
|
44
|
-
request :delete_volume
|
45
51
|
request :get_vminstance
|
46
52
|
request :get_networkattachmentdef
|
47
53
|
request :get_node
|
54
|
+
request :get_persistentvolume
|
48
55
|
request :get_pvc
|
49
56
|
request :get_vm
|
50
|
-
request :get_volume
|
51
57
|
request :get_server
|
52
58
|
request :get_service
|
59
|
+
request :get_storageclass
|
53
60
|
request :get_template
|
54
61
|
request :list_vminstances
|
55
62
|
request :list_nodes
|
56
63
|
request :list_networkattachmentdefs
|
57
64
|
request :list_vms
|
65
|
+
request :list_persistentvolumes
|
58
66
|
request :list_pvcs
|
59
|
-
request :list_volumes
|
60
67
|
request :list_servers
|
61
68
|
request :list_services
|
69
|
+
request :list_storageclasses
|
62
70
|
request :list_templates
|
71
|
+
request :list_volumes
|
63
72
|
request :update_vm
|
64
73
|
|
65
74
|
module Shared
|
@@ -166,6 +175,11 @@ module Fog
|
|
166
175
|
#
|
167
176
|
NETWORK_GROUP = 'k8s.cni.cncf.io'.freeze
|
168
177
|
|
178
|
+
#
|
179
|
+
# The API group of the Kubernetes network extention:
|
180
|
+
#
|
181
|
+
STORAGE_GROUP = 'storage.k8s.io'.freeze
|
182
|
+
|
169
183
|
def initialize(options={})
|
170
184
|
require 'kubeclient'
|
171
185
|
|
@@ -416,12 +430,16 @@ module Fog
|
|
416
430
|
ssl_client_key: ssl_options[:client_key],
|
417
431
|
}
|
418
432
|
|
419
|
-
|
433
|
+
begin
|
434
|
+
response = ::JSON.parse(RestClient::Resource.new(url, options).get)
|
435
|
+
rescue => e
|
436
|
+
raise ::Fog::Kubevirt::Errors::ClientError, e
|
437
|
+
end
|
420
438
|
|
421
439
|
# version detected based on
|
422
440
|
# https://github.com/kubernetes-incubator/apiserver-builder/blob/master/docs/concepts/aggregation.md#viewing-discovery-information
|
423
441
|
preferredVersion = response["preferredVersion"]
|
424
|
-
return preferredVersion["version"] if preferredVersion
|
442
|
+
return preferredVersion["version"] if preferredVersion
|
425
443
|
response["versions"][0]
|
426
444
|
end
|
427
445
|
|
@@ -441,6 +459,10 @@ module Fog
|
|
441
459
|
create_client('/apis/' + NETWORK_GROUP)
|
442
460
|
end
|
443
461
|
|
462
|
+
def kube_storage_client
|
463
|
+
create_client('/apis/' + STORAGE_GROUP)
|
464
|
+
end
|
465
|
+
|
444
466
|
def log
|
445
467
|
@log
|
446
468
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
class Persistentvolume < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
8
|
+
attribute :uid, :aliases => 'metadata_uid'
|
9
|
+
attribute :annotations, :aliases => 'metadata_annotations'
|
10
|
+
attribute :labels, :aliases => 'metadata_labels'
|
11
|
+
attribute :access_modes, :aliases => 'spec_access_modes'
|
12
|
+
attribute :mount_options, :aliases => 'spec_mount_options'
|
13
|
+
attribute :reclaim_policy, :aliases => 'spec_reclaim_policy'
|
14
|
+
attribute :storage_class, :aliases => 'spec_storage_class'
|
15
|
+
attribute :capacity, :aliases => 'spec_capacity'
|
16
|
+
attribute :claim_ref, :aliases => 'spec_claim_ref'
|
17
|
+
attribute :type, :aliases => 'spec_type'
|
18
|
+
attribute :config, :aliases => 'spec_config'
|
19
|
+
attribute :phase, :aliases => 'status_phase'
|
20
|
+
attribute :reason, :aliases => 'status_reason'
|
21
|
+
attribute :message, :aliases => 'status_message'
|
22
|
+
|
23
|
+
def self.parse(object)
|
24
|
+
metadata = object[:metadata]
|
25
|
+
spec = object[:spec]
|
26
|
+
status = object[:status]
|
27
|
+
type = detect_type(spec)
|
28
|
+
|
29
|
+
{
|
30
|
+
:name => metadata[:name],
|
31
|
+
:resource_version => metadata[:resourceVersion],
|
32
|
+
:uid => metadata[:uid],
|
33
|
+
:annotations => metadata[:annotations],
|
34
|
+
:labels => metadata[:labels],
|
35
|
+
:access_modes => spec[:accessModes],
|
36
|
+
:mount_options => spec[:mountOptions],
|
37
|
+
:reclaim_policy => spec[:persistentVolumeReclaimPolicy],
|
38
|
+
:storage_class => spec[:storageClassName],
|
39
|
+
:capacity => spec.dig(:capacity, :storage),
|
40
|
+
:claim_ref => spec[:claimRef],
|
41
|
+
:type => type,
|
42
|
+
:config => spec[type&.to_sym],
|
43
|
+
:phase => status[:phase],
|
44
|
+
:reason => status[:reason],
|
45
|
+
:message => status[:message]
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.detect_type(spec)
|
50
|
+
type = ''
|
51
|
+
type = 'awsElasticBlockStore' if spec.keys.include?(:awsElasticBlockStore)
|
52
|
+
type = 'azureDisk' if spec.keys.include?(:azureDisk)
|
53
|
+
type = 'azureFile' if spec.keys.include?(:azureFile)
|
54
|
+
type = 'cephfs' if spec.keys.include?(:cephfs)
|
55
|
+
type = 'configMap' if spec.keys.include?(:configMap)
|
56
|
+
type = 'csi' if spec.keys.include?(:csi)
|
57
|
+
type = 'downwardAPI' if spec.keys.include?(:downwardAPI)
|
58
|
+
type = 'emptyDir' if spec.keys.include?(:emptyDir)
|
59
|
+
type = 'fc' if spec.keys.include?(:fc)
|
60
|
+
type = 'flexVolume' if spec.keys.include?(:flexVolume)
|
61
|
+
type = 'flocker' if spec.keys.include?(:flocker)
|
62
|
+
type = 'gcePersistentDisk' if spec.keys.include?(:gcePersistentDisk)
|
63
|
+
type = 'glusterfs' if spec.keys.include?(:glusterfs)
|
64
|
+
type = 'hostPath' if spec.keys.include?(:hostPath)
|
65
|
+
type = 'iscsi' if spec.keys.include?(:iscsi)
|
66
|
+
type = 'local' if spec.keys.include?(:local)
|
67
|
+
type = 'nfs' if spec.keys.include?(:nfs)
|
68
|
+
type = 'persistentVolumeClaim' if spec.keys.include?(:persistentVolumeClaim)
|
69
|
+
type = 'projected' if spec.keys.include?(:projected)
|
70
|
+
type = 'portworxVolume' if spec.keys.include?(:portworxVolume)
|
71
|
+
type = 'quobyte' if spec.keys.include?(:quobyte)
|
72
|
+
type = 'rbd' if spec.keys.include?(:rbd)
|
73
|
+
type = 'scaleIO' if spec.keys.include?(:scaleIO)
|
74
|
+
type = 'secret' if spec.keys.include?(:secret)
|
75
|
+
type = 'storageos' if spec.keys.include?(:storageos)
|
76
|
+
type = 'vsphereVolume' if spec.keys.include?(:vsphereVolume)
|
77
|
+
type
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/persistentvolume'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Persistentvolumes < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Persistentvolume
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
volumes = service.list_persistentvolumes(filters)
|
14
|
+
@kind = volumes.kind
|
15
|
+
@resource_version = volumes.resource_version
|
16
|
+
load volumes
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
new service.get_persistentvolume(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Creates a volume using provided paramters:
|
24
|
+
# :name [String] - name of a volume
|
25
|
+
# :labels [Hash] - a hash of key,values representing the labels
|
26
|
+
# :storage_class [String] - the storage class name of the volume
|
27
|
+
# :capacity [String] - The capacity of the storage if applied
|
28
|
+
# :accessModes [Arr] - the access modes for the volume, values are specified here:
|
29
|
+
# https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
|
30
|
+
# :type [String] - the type of the storage
|
31
|
+
# :config [Hash] - storage specific configuration to be applied for the volume
|
32
|
+
# correlated to the args[:type]
|
33
|
+
# @param [Hash] attributes containing details about volume to be created.
|
34
|
+
def create(args = {})
|
35
|
+
name = args[:name]
|
36
|
+
labels = args[:labels]
|
37
|
+
|
38
|
+
volume = {
|
39
|
+
:apiVersion => "v1",
|
40
|
+
:kind => "PersistentVolume",
|
41
|
+
:metadata => {
|
42
|
+
:name => name
|
43
|
+
},
|
44
|
+
:spec => {
|
45
|
+
:storageClassName => args[:storage_class]
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
volume[:metadata][:labels] = labels if labels
|
50
|
+
volume[:spec][:capacity] = {
|
51
|
+
:storage => args[:capacity]
|
52
|
+
} if args[:capacity]
|
53
|
+
|
54
|
+
volume[:spec][:accessModes] = args[:access_modes] if args[:access_modes]
|
55
|
+
volume[:spec][args[:type].to_sym] = args[:config] if args[:type]
|
56
|
+
|
57
|
+
service.create_persistentvolume(volume)
|
58
|
+
end
|
59
|
+
|
60
|
+
def delete(name)
|
61
|
+
begin
|
62
|
+
volume = get(name)
|
63
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
64
|
+
# the volume doesn't exist
|
65
|
+
volume = nil
|
66
|
+
end
|
67
|
+
|
68
|
+
service.delete_persistentvolume(name) unless volume.nil?
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
class Storageclass < Fog::Model
|
5
|
+
# Metadata
|
6
|
+
identity :name
|
7
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
8
|
+
attribute :uid, :aliases => 'metadata_uid'
|
9
|
+
|
10
|
+
attribute :mount_options
|
11
|
+
attribute :parameters
|
12
|
+
attribute :provisioner
|
13
|
+
attribute :reclaim_policy
|
14
|
+
attribute :volume_binding_mode
|
15
|
+
|
16
|
+
def self.parse(object)
|
17
|
+
metadata = object[:metadata]
|
18
|
+
{
|
19
|
+
:name => metadata[:name],
|
20
|
+
:resource_version => metadata[:resourceVersion],
|
21
|
+
:uid => metadata[:uid],
|
22
|
+
|
23
|
+
:parameters => object[:parameters],
|
24
|
+
:mount_options => object[:mountOptions],
|
25
|
+
:provisioner => object[:provisioner],
|
26
|
+
:reclaim_policy => object[:reclaimPolicy],
|
27
|
+
:volume_binding_mode => object[:volumeBindingMode]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/storageclass'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Storageclasses < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Storageclass
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
storageclasses = service.list_storageclasses(filters)
|
14
|
+
@kind = storageclasses.kind
|
15
|
+
@resource_version = storageclasses.resource_version
|
16
|
+
load storageclasses
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(name)
|
20
|
+
new service.get_storageclass(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Creates a storage class using provided paramters:
|
24
|
+
# https://kubernetes.io/docs/concepts/storage/storage-classes
|
25
|
+
# :name [String] - name of a storage class
|
26
|
+
# :parameters [Object] - parameters for the provisioner that should create volumes of this storage class
|
27
|
+
# :mount_options [Arr] - mount options for the dynamically provisioned PersistentVolumes of this storage class.
|
28
|
+
# :provisioner [String] - the type of the provisioner
|
29
|
+
# :volume_binding_mode [String] - indicates how PersistentVolumeClaims should be provisioned and bound
|
30
|
+
# :reclaim_policy [String] - the reclaim policy of the created PVs (Defaults to Delete).
|
31
|
+
def create(args = {})
|
32
|
+
storageclass = {
|
33
|
+
:apiVersion => "storage.k8s.io/v1",
|
34
|
+
:kind => "StorageClass",
|
35
|
+
:metadata => {
|
36
|
+
:name => args[:name],
|
37
|
+
},
|
38
|
+
:parameters => args[:parameters],
|
39
|
+
:mount_options => args[:mount_options],
|
40
|
+
:provisioner => args[:provisioner],
|
41
|
+
:volume_binding_mode => args[:volume_binding_mode],
|
42
|
+
:reclaim_policy => args[:reclaim_policy]
|
43
|
+
}
|
44
|
+
|
45
|
+
service.create_storageclass(storageclass)
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete(name)
|
49
|
+
begin
|
50
|
+
storageclass = get(name)
|
51
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
52
|
+
# the storageclass doesn't exist
|
53
|
+
storageclass = nil
|
54
|
+
end
|
55
|
+
|
56
|
+
service.delete_storageclass(name) unless storageclass.nil?
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'fog/kubevirt/compute/models/vm_data'
|
2
|
+
|
1
3
|
module Fog
|
2
4
|
module Kubevirt
|
3
5
|
class Compute
|
4
6
|
module VmBase
|
7
|
+
include VmData
|
8
|
+
|
5
9
|
def define_properties
|
6
10
|
identity :name
|
7
11
|
|
@@ -16,6 +20,9 @@ module Fog
|
|
16
20
|
attribute :disks, :aliases => 'spec_disks'
|
17
21
|
attribute :volumes, :aliases => 'spec_volumes'
|
18
22
|
attribute :status, :aliases => 'spec_running'
|
23
|
+
attribute :interfaces, :aliases => 'spec_interfaces'
|
24
|
+
attribute :networks, :aliases => 'spec_networks'
|
25
|
+
attribute :machine_type, :aliases => 'spec_machine_type'
|
19
26
|
end
|
20
27
|
|
21
28
|
def parse_object(object)
|
@@ -26,15 +33,19 @@ module Fog
|
|
26
33
|
annotations = metadata[:annotations]
|
27
34
|
cpu = domain[:cpu]
|
28
35
|
mem = domain.dig(:resources, :requests, :memory)
|
36
|
+
disks = parse_disks(domain[:devices][:disks])
|
29
37
|
vm = {
|
30
38
|
:namespace => metadata[:namespace],
|
31
39
|
:name => metadata[:name],
|
32
40
|
:resource_version => metadata[:resourceVersion],
|
33
41
|
:uid => metadata[:uid],
|
34
42
|
:labels => metadata[:labels],
|
35
|
-
:disks =>
|
36
|
-
:volumes => spec[:volumes],
|
43
|
+
:disks => disks,
|
44
|
+
:volumes => parse_volumes(spec[:volumes], disks),
|
37
45
|
:status => object[:spec][:running].to_s == "true" ? "running" : "stopped",
|
46
|
+
:interfaces => parse_interfaces(domain[:devices][:interfaces]),
|
47
|
+
:networks => parse_networks(spec[:networks]),
|
48
|
+
:machine_type => domain.dig(:machine, :type)
|
38
49
|
}
|
39
50
|
vm[:owner_reference] = owner unless owner.nil?
|
40
51
|
vm[:annotations] = annotations unless annotations.nil?
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'fog/kubevirt/compute/models/volume'
|
2
|
+
|
1
3
|
module Fog
|
2
4
|
module Kubevirt
|
3
5
|
class Compute
|
@@ -55,7 +57,6 @@ module Fog
|
|
55
57
|
disk = VmDisk.new
|
56
58
|
disk.name = d[:name]
|
57
59
|
disk.boot_order = d[:bootOrder]
|
58
|
-
disk.volume_name = d[:volumeName]
|
59
60
|
|
60
61
|
if d.keys.include?(:cdrom)
|
61
62
|
disk.type = 'cdrom'
|
@@ -82,12 +83,13 @@ module Fog
|
|
82
83
|
# Returns an array of parsed volumes
|
83
84
|
#
|
84
85
|
# @param object [Hash] A hash with raw volumes data.
|
86
|
+
# @param disks [Array] the disks of the vm associated to the volumes
|
85
87
|
#
|
86
|
-
def parse_volumes(object)
|
88
|
+
def parse_volumes(object, disks)
|
87
89
|
return {} if object.nil?
|
88
90
|
volumes = []
|
89
91
|
object.each do |v|
|
90
|
-
volume =
|
92
|
+
volume = Volume.new
|
91
93
|
volume.name = v[:name]
|
92
94
|
if v.keys.include?(:containerDisk)
|
93
95
|
volume.type = 'containerDisk'
|
@@ -120,6 +122,12 @@ module Fog
|
|
120
122
|
volume.type = 'configMap'
|
121
123
|
volume.info = v.dig(:configMap, :name)
|
122
124
|
end
|
125
|
+
|
126
|
+
volume.config = v[volume.type.to_sym]
|
127
|
+
disk = disks.select { |d| d.name == volume.name }.first
|
128
|
+
volume.boot_order = disk.boot_order
|
129
|
+
volume.bus = disk.bus if disk.respond_to?(:bus)
|
130
|
+
|
123
131
|
volumes << volume
|
124
132
|
end
|
125
133
|
|
@@ -143,21 +151,11 @@ module Fog
|
|
143
151
|
|
144
152
|
class VmDisk
|
145
153
|
attr_accessor :name,
|
146
|
-
:volume_name,
|
147
154
|
:boot_order,
|
148
155
|
:type, # values: cdrom, disk, floppy, lun
|
149
156
|
:bus,
|
150
157
|
:readonly
|
151
158
|
end
|
152
|
-
|
153
|
-
class VmVolume
|
154
|
-
attr_accessor :name,
|
155
|
-
# values: containerDisk, persistentVolumeClaim, emptyDisk,
|
156
|
-
# ephemeral, cloudInitNoCloud, hostDisk, secret,
|
157
|
-
# dataVolume, serviceAccount, configMap
|
158
|
-
:type,
|
159
|
-
:info # specific piece of information per volume type
|
160
|
-
end
|
161
159
|
end
|
162
160
|
end
|
163
161
|
end
|