fog-kubevirt 1.0.1 → 1.0.2
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 +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
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'fog/compute/models/server'
|
2
|
+
require 'fog/kubevirt/compute/models/vm_base'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Server < Fog::Compute::Server
|
8
|
+
include Shared
|
9
|
+
include VmAction
|
10
|
+
extend VmBase
|
11
|
+
define_properties
|
12
|
+
|
13
|
+
attribute :state, :aliases => 'phase'
|
14
|
+
attribute :ip_address
|
15
|
+
attribute :node_name
|
16
|
+
|
17
|
+
def destroy(options = {})
|
18
|
+
stop(options)
|
19
|
+
service.delete_vm(name, namespace)
|
20
|
+
end
|
21
|
+
|
22
|
+
def ready?
|
23
|
+
running?(status) && running?(state) && !ip_address.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.parse(object)
|
27
|
+
server = parse_object(object)
|
28
|
+
server[:state] = object[:phase]
|
29
|
+
server[:node_name] = object[:node_name]
|
30
|
+
server[:ip_address] = object[:ip_address]
|
31
|
+
server
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def running?(status)
|
37
|
+
!status.nil? && 'running'.casecmp(status).zero?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/server'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Servers < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Server
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
servers = service.list_servers(filters)
|
14
|
+
@kind = servers.kind
|
15
|
+
@resource_version = servers.resource_version
|
16
|
+
load servers
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(id)
|
20
|
+
new service.get_server(id)
|
21
|
+
end
|
22
|
+
|
23
|
+
def bootstrap(new_attributes = {})
|
24
|
+
server = create(new_attributes)
|
25
|
+
server.wait_for { stopped? }
|
26
|
+
server.start
|
27
|
+
server
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
class Service < Fog::Model
|
5
|
+
identity :name
|
6
|
+
|
7
|
+
attribute :namespace, :aliases => 'metadata_namespace'
|
8
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
9
|
+
attribute :cluster_ip, :aliases => 'spec_cluster_ip'
|
10
|
+
attribute :node_port, :aliases => 'spec_ports_node_port'
|
11
|
+
attribute :port, :aliases => 'spec_ports_port'
|
12
|
+
attribute :target_port, :aliases => 'spec_ports_target_port'
|
13
|
+
attribute :selector, :aliases => 'spec_selector'
|
14
|
+
|
15
|
+
def self.parse(object)
|
16
|
+
metadata = object[:metadata]
|
17
|
+
spec = object[:spec]
|
18
|
+
ports = spec[:ports][0]
|
19
|
+
selector = spec[:selector]
|
20
|
+
srv = {
|
21
|
+
:namespace => metadata[:namespace],
|
22
|
+
:name => metadata[:name],
|
23
|
+
:resource_version => metadata[:resourceVersion],
|
24
|
+
:cluster_ip => spec[:clusterIP],
|
25
|
+
:node_port => ports[:nodePort],
|
26
|
+
:port => ports[:port],
|
27
|
+
:target_port => ports[:target_port],
|
28
|
+
}
|
29
|
+
srv[:selector] = selector[:special] unless selector.nil?
|
30
|
+
|
31
|
+
srv
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'fog/core/collection'
|
2
|
+
require 'fog/kubevirt/compute/models/service'
|
3
|
+
|
4
|
+
module Fog
|
5
|
+
module Kubevirt
|
6
|
+
class Compute
|
7
|
+
class Services < Fog::Collection
|
8
|
+
attr_reader :kind, :resource_version
|
9
|
+
|
10
|
+
model Fog::Kubevirt::Compute::Service
|
11
|
+
|
12
|
+
def all(filters = {})
|
13
|
+
begin
|
14
|
+
srvs = service.list_services(filters)
|
15
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
16
|
+
# we assume that we get 404
|
17
|
+
srvs = []
|
18
|
+
end
|
19
|
+
@kind = srvs.kind
|
20
|
+
@resource_version = srvs.resource_version
|
21
|
+
load srvs
|
22
|
+
end
|
23
|
+
|
24
|
+
def get(name)
|
25
|
+
new service.get_service(name)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Creates a service using provided paramters:
|
29
|
+
# :name [String] - name of a service
|
30
|
+
# :port [int] - a port which will be exposed on node and cluster
|
31
|
+
# :target_port [int] - a vmi port which will be forwarded
|
32
|
+
# :vmi_name [String] - name of a vmi to be selected
|
33
|
+
# :service_type [String] - service type used to create service
|
34
|
+
#
|
35
|
+
# @param [Hash] attributes containing details about service to be
|
36
|
+
# created.
|
37
|
+
def create(args = {})
|
38
|
+
port = args[:port]
|
39
|
+
name = args[:name]
|
40
|
+
target_port = args[:target_port]
|
41
|
+
vmi_name = args[:vmi_name]
|
42
|
+
service_type = args[:service_type]
|
43
|
+
|
44
|
+
srv = {
|
45
|
+
:apiVersion => "v1",
|
46
|
+
:kind => "Service",
|
47
|
+
:metadata => {
|
48
|
+
:name => name,
|
49
|
+
:namespace => service.namespace
|
50
|
+
},
|
51
|
+
:spec => {
|
52
|
+
:externalTrafficPolicy => "Cluster",
|
53
|
+
:ports => [
|
54
|
+
{:nodePort => port,
|
55
|
+
:port => port,
|
56
|
+
:protocol => "TCP",
|
57
|
+
:targetPort => target_port
|
58
|
+
}
|
59
|
+
],
|
60
|
+
:selector => {
|
61
|
+
:"kubevirt.io/vm" => vmi_name
|
62
|
+
},
|
63
|
+
:type => service_type
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
service.create_service(srv)
|
68
|
+
end
|
69
|
+
|
70
|
+
def delete(name)
|
71
|
+
begin
|
72
|
+
srv = get(name)
|
73
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
74
|
+
# the service doesn't exist
|
75
|
+
srv = nil
|
76
|
+
end
|
77
|
+
|
78
|
+
service.delete_service(name, service.namespace) unless srv.nil?
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,69 +1,15 @@
|
|
1
|
+
require 'fog/kubevirt/compute/models/vm_base'
|
2
|
+
|
1
3
|
module Fog
|
2
4
|
module Kubevirt
|
3
5
|
class Compute
|
4
6
|
class Vm < Fog::Model
|
5
|
-
include
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
attribute :namespace, :aliases => 'metadata_namespace'
|
10
|
-
attribute :resource_version, :aliases => 'metadata_resource_version'
|
11
|
-
attribute :uid, :aliases => 'metadata_uid'
|
12
|
-
attribute :labels, :aliases => 'metadata_labels'
|
13
|
-
attribute :owner_reference, :aliases => 'metadata_owner_reference'
|
14
|
-
attribute :annotations, :aliases => 'metadata_annotations'
|
15
|
-
attribute :cpu_cores, :aliases => 'spec_cpu_cores'
|
16
|
-
attribute :memory, :aliases => 'spec_memory'
|
17
|
-
attribute :disks, :aliases => 'spec_disks'
|
18
|
-
attribute :volumes, :aliases => 'spec_volumes'
|
19
|
-
attribute :status, :aliases => 'spec_running'
|
20
|
-
|
21
|
-
|
22
|
-
def start(options = {})
|
23
|
-
# Change the `running` attribute to `true` so that the virtual machine controller will take it and
|
24
|
-
# create the virtual machine instance.
|
25
|
-
vm = service.get_raw_vm(name)
|
26
|
-
vm = deep_merge!(vm,
|
27
|
-
:spec => {
|
28
|
-
:running => true
|
29
|
-
}
|
30
|
-
)
|
31
|
-
service.update_vm(vm)
|
32
|
-
end
|
33
|
-
|
34
|
-
def stop(options = {})
|
35
|
-
vm = service.get_raw_vm(name)
|
36
|
-
vm = deep_merge!(vm,
|
37
|
-
:spec => {
|
38
|
-
:running => false
|
39
|
-
}
|
40
|
-
)
|
41
|
-
service.update_vm(vm)
|
42
|
-
end
|
7
|
+
include VmAction
|
8
|
+
extend VmBase
|
9
|
+
define_properties
|
43
10
|
|
44
11
|
def self.parse(object)
|
45
|
-
|
46
|
-
spec = object[:spec][:template][:spec]
|
47
|
-
domain = spec[:domain]
|
48
|
-
owner = metadata[:ownerReferences]
|
49
|
-
annotations = metadata[:annotations]
|
50
|
-
cpu = domain[:cpu]
|
51
|
-
vm = {
|
52
|
-
:namespace => metadata[:namespace],
|
53
|
-
:name => metadata[:name],
|
54
|
-
:resource_version => metadata[:resourceVersion],
|
55
|
-
:uid => metadata[:uid],
|
56
|
-
:labels => metadata[:labels],
|
57
|
-
:memory => domain[:resources][:requests][:memory],
|
58
|
-
:disks => domain[:devices][:disks],
|
59
|
-
:volumes => spec[:volumes],
|
60
|
-
:status => object[:spec][:running].to_s == "true" ? "running" : "stopped"
|
61
|
-
}
|
62
|
-
vm[:owner_reference] = owner unless owner.nil?
|
63
|
-
vm[:annotations] = annotations unless annotations.nil?
|
64
|
-
vm[:cpu_cores] = cpu[:cores] unless cpu.nil?
|
65
|
-
|
66
|
-
vm
|
12
|
+
parse_object(object)
|
67
13
|
end
|
68
14
|
end
|
69
15
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
module VmBase
|
5
|
+
def define_properties
|
6
|
+
identity :name
|
7
|
+
|
8
|
+
attribute :namespace, :aliases => 'metadata_namespace'
|
9
|
+
attribute :resource_version, :aliases => 'metadata_resource_version'
|
10
|
+
attribute :uid, :aliases => 'metadata_uid'
|
11
|
+
attribute :labels, :aliases => 'metadata_labels'
|
12
|
+
attribute :owner_reference, :aliases => 'metadata_owner_reference'
|
13
|
+
attribute :annotations, :aliases => 'metadata_annotations'
|
14
|
+
attribute :cpu_cores, :aliases => 'spec_cpu_cores'
|
15
|
+
attribute :memory, :aliases => 'spec_memory'
|
16
|
+
attribute :disks, :aliases => 'spec_disks'
|
17
|
+
attribute :volumes, :aliases => 'spec_volumes'
|
18
|
+
attribute :status, :aliases => 'spec_running'
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_object(object)
|
22
|
+
metadata = object[:metadata]
|
23
|
+
spec = object[:spec][:template][:spec]
|
24
|
+
domain = spec[:domain]
|
25
|
+
owner = metadata[:ownerReferences]
|
26
|
+
annotations = metadata[:annotations]
|
27
|
+
cpu = domain[:cpu]
|
28
|
+
mem = domain.dig(:resources, :requests, :memory)
|
29
|
+
vm = {
|
30
|
+
:namespace => metadata[:namespace],
|
31
|
+
:name => metadata[:name],
|
32
|
+
:resource_version => metadata[:resourceVersion],
|
33
|
+
:uid => metadata[:uid],
|
34
|
+
:labels => metadata[:labels],
|
35
|
+
:disks => domain[:devices][:disks],
|
36
|
+
:volumes => spec[:volumes],
|
37
|
+
:status => object[:spec][:running].to_s == "true" ? "running" : "stopped",
|
38
|
+
}
|
39
|
+
vm[:owner_reference] = owner unless owner.nil?
|
40
|
+
vm[:annotations] = annotations unless annotations.nil?
|
41
|
+
vm[:cpu_cores] = cpu[:cores] unless cpu.nil?
|
42
|
+
vm[:memory] = mem unless mem.nil?
|
43
|
+
|
44
|
+
vm
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module VmAction
|
49
|
+
include Shared
|
50
|
+
|
51
|
+
def start(options = {})
|
52
|
+
# Change the `running` attribute to `true` so that the virtual machine controller will take it and
|
53
|
+
# create the virtual machine instance.
|
54
|
+
vm = service.get_raw_vm(name)
|
55
|
+
vm = deep_merge!(vm,
|
56
|
+
:spec => {
|
57
|
+
:running => true
|
58
|
+
}
|
59
|
+
)
|
60
|
+
service.update_vm(vm)
|
61
|
+
end
|
62
|
+
|
63
|
+
def stop(options = {})
|
64
|
+
vm = service.get_raw_vm(name)
|
65
|
+
vm = deep_merge!(vm,
|
66
|
+
:spec => {
|
67
|
+
:running => false
|
68
|
+
}
|
69
|
+
)
|
70
|
+
service.update_vm(vm)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
module Fog
|
2
|
+
module Kubevirt
|
3
|
+
class Compute
|
4
|
+
module VmData
|
5
|
+
|
6
|
+
#
|
7
|
+
# Returns an array of parsed network interfaces
|
8
|
+
#
|
9
|
+
# @param object [Hash] A hash with raw interfaces data.
|
10
|
+
#
|
11
|
+
def parse_interfaces(object)
|
12
|
+
return {} if object.nil?
|
13
|
+
nics = []
|
14
|
+
object.each do |iface|
|
15
|
+
nic = VmNic.new
|
16
|
+
nic.name = iface[:name]
|
17
|
+
nic.mac_address = iface[:macAddress]
|
18
|
+
nic.type = 'bridge' if iface.keys.include?(:bridge)
|
19
|
+
nic.type = 'slirp' if iface.keys.include?(:slirp)
|
20
|
+
nics << nic
|
21
|
+
end
|
22
|
+
|
23
|
+
nics
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Returns an array of parsed networks
|
28
|
+
#
|
29
|
+
# @param object [Hash] A hash with raw networks data.
|
30
|
+
#
|
31
|
+
def parse_networks(object)
|
32
|
+
return {} if object.nil?
|
33
|
+
networks = []
|
34
|
+
object.each do |net|
|
35
|
+
network = VmNetwork.new
|
36
|
+
network.name = net[:name]
|
37
|
+
network.type = 'pod' if net.keys.include?(:pod)
|
38
|
+
network.type = 'multus' if net.keys.include?(:multus)
|
39
|
+
network.type = 'genie' if net.keys.include?(:genie)
|
40
|
+
networks << network
|
41
|
+
end
|
42
|
+
|
43
|
+
networks
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Returns an array of parsed disks
|
48
|
+
#
|
49
|
+
# @param object [Hash] A hash with raw disks data.
|
50
|
+
#
|
51
|
+
def parse_disks(object)
|
52
|
+
return {} if object.nil?
|
53
|
+
disks = []
|
54
|
+
object.each do |d|
|
55
|
+
disk = VmDisk.new
|
56
|
+
disk.name = d[:name]
|
57
|
+
disk.boot_order = d[:bootOrder]
|
58
|
+
disk.volume_name = d[:volumeName]
|
59
|
+
|
60
|
+
if d.keys.include?(:cdrom)
|
61
|
+
disk.type = 'cdrom'
|
62
|
+
disk.bus = d.dig(:cdrom, :bus)
|
63
|
+
disk.readonly = d.dig(:cdrom, :readonly)
|
64
|
+
elsif d.keys.include?(:disk)
|
65
|
+
disk.type = 'disk'
|
66
|
+
disk.bus = d.dig(:disk, :bus)
|
67
|
+
disk.readonly = d.dig(:disk, :readonly)
|
68
|
+
elsif d.keys.include?(:floppy)
|
69
|
+
disk.type = 'floppy'
|
70
|
+
disk.readonly = d.dig(:floppy, :readonly)
|
71
|
+
elsif d.keys.include?(:lun)
|
72
|
+
disk.type = 'lun'
|
73
|
+
disk.readonly = d.dig(:lun, :readonly)
|
74
|
+
end
|
75
|
+
disks << disk
|
76
|
+
end
|
77
|
+
|
78
|
+
disks
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Returns an array of parsed volumes
|
83
|
+
#
|
84
|
+
# @param object [Hash] A hash with raw volumes data.
|
85
|
+
#
|
86
|
+
def parse_volumes(object)
|
87
|
+
return {} if object.nil?
|
88
|
+
volumes = []
|
89
|
+
object.each do |v|
|
90
|
+
volume = VmVolume.new
|
91
|
+
volume.name = v[:name]
|
92
|
+
if v.keys.include?(:containerDisk)
|
93
|
+
volume.type = 'containerDisk'
|
94
|
+
volume.info = v.dig(:containerDisk, :image)
|
95
|
+
elsif v.keys.include?(:persistentVolumeClaim)
|
96
|
+
volume.type = 'persistentVolumeClaim'
|
97
|
+
volume.info = v.dig(:persistentVolumeClaim, :claimName)
|
98
|
+
elsif v.keys.include?(:emptyDisk)
|
99
|
+
volume.type = 'emptyDisk'
|
100
|
+
volume.info = v.dig(:emptyDisk, :capacity)
|
101
|
+
elsif v.keys.include?(:ephemeral)
|
102
|
+
volume.type = 'ephemeral'
|
103
|
+
volume.info = v.dig(:ephemeral, :persistentVolumeClaim, :claimName)
|
104
|
+
elsif v.keys.include?(:cloudInitNoCloud)
|
105
|
+
volume.type = 'cloudInitNoCloud'
|
106
|
+
volume.info = v.dig(:cloudInitNoCloud, :userDataBase64)
|
107
|
+
elsif v.keys.include?(:hostDisk)
|
108
|
+
volume.type = 'hostDisk'
|
109
|
+
volume.info = v.dig(:hostDisk, :path)
|
110
|
+
elsif v.keys.include?(:secret)
|
111
|
+
volume.type = 'secret'
|
112
|
+
volume.info = v.dig(:secret, :secretName)
|
113
|
+
elsif v.keys.include?(:dataVolume)
|
114
|
+
volume.type = 'dataVolume'
|
115
|
+
volume.info = v.dig(:dataVolume, :name)
|
116
|
+
elsif v.keys.include?(:serviceAccount)
|
117
|
+
volume.type = 'serviceAccount'
|
118
|
+
volume.info = v.dig(:serviceAccount, :serviceAccountName)
|
119
|
+
elsif v.keys.include?(:configMap)
|
120
|
+
volume.type = 'configMap'
|
121
|
+
volume.info = v.dig(:configMap, :name)
|
122
|
+
end
|
123
|
+
volumes << volume
|
124
|
+
end
|
125
|
+
|
126
|
+
volumes
|
127
|
+
end
|
128
|
+
|
129
|
+
class VmNic
|
130
|
+
attr_accessor :name,
|
131
|
+
:mac_address,
|
132
|
+
:type, # values: bridge, slirp
|
133
|
+
:model,
|
134
|
+
:ports,
|
135
|
+
:boot_order
|
136
|
+
alias :mac :mac_address
|
137
|
+
end
|
138
|
+
|
139
|
+
class VmNetwork
|
140
|
+
attr_accessor :name,
|
141
|
+
:type # values: multus, pod, genie
|
142
|
+
end
|
143
|
+
|
144
|
+
class VmDisk
|
145
|
+
attr_accessor :name,
|
146
|
+
:volume_name,
|
147
|
+
:boot_order,
|
148
|
+
:type, # values: cdrom, disk, floppy, lun
|
149
|
+
:bus,
|
150
|
+
:readonly
|
151
|
+
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
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|