fog-kubevirt 1.6.2 → 1.8.0
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 +7 -0
- data/lib/fog/kubevirt/compute/models/secret.rb +76 -0
- data/lib/fog/kubevirt/compute/models/secrets.rb +41 -0
- data/lib/fog/kubevirt/compute/models/vm_base.rb +3 -1
- data/lib/fog/kubevirt/compute/models/vms.rb +38 -22
- data/lib/fog/kubevirt/compute/requests/create_secret.rb +18 -0
- data/lib/fog/kubevirt/compute/requests/delete_secret.rb +16 -0
- data/lib/fog/kubevirt/compute/requests/get_secret.rb +17 -0
- data/lib/fog/kubevirt/compute/requests/list_secrets.rb +26 -0
- data/lib/fog/kubevirt/compute/requests/update_secret.rb +18 -0
- data/lib/fog/kubevirt/version.rb +1 -1
- data/spec/fixtures/kubevirt/vm/vm_create_efi.yml +403 -0
- data/spec/fixtures/kubevirt/vm/vm_create_single_userdata.yml +492 -0
- data/spec/unit/create_vm_spec.rb +69 -0
- data/spec/unit/get_server_spec.rb +1 -0
- data/spec/unit/secret_parse_spec.rb +88 -0
- data/spec/unit/secrets_request_spec.rb +18 -0
- metadata +20 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 88936198ddc16f905d97de9baf7695edb0ba214bff8da4db1be3c94c2d2ee6e7
|
|
4
|
+
data.tar.gz: fc7de7dcc2beb9ecf9546ceeefb3595970d8090e555ea89712fc02acc15870c1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ffe5cf059ddb22edfee3c54b6b58333031cf631650c047df788dcb3842bdc5facd4b7bf58ed9887d13d78abc82150098a4ec496a0f79acb4b1a0892966092c6a
|
|
7
|
+
data.tar.gz: 7fc706efa09875717d37cdc23d105e928787e5f222efd64b5cf0b382ea61034d2f49024df1f1e3183ccfbcc74506de3bd7c7ad33c5f6ef178669903f8e3aca30
|
|
@@ -32,6 +32,8 @@ module Fog
|
|
|
32
32
|
collection :storageclasses
|
|
33
33
|
model :template
|
|
34
34
|
collection :templates
|
|
35
|
+
model :secret
|
|
36
|
+
collection :secrets
|
|
35
37
|
model :volume
|
|
36
38
|
collection :volumes
|
|
37
39
|
|
|
@@ -41,11 +43,13 @@ module Fog
|
|
|
41
43
|
request :create_vminstance
|
|
42
44
|
request :create_persistentvolume
|
|
43
45
|
request :create_pvc
|
|
46
|
+
request :create_secret
|
|
44
47
|
request :create_service
|
|
45
48
|
request :create_storageclass
|
|
46
49
|
request :delete_networkattachmentdef
|
|
47
50
|
request :delete_persistentvolume
|
|
48
51
|
request :delete_pvc
|
|
52
|
+
request :delete_secret
|
|
49
53
|
request :delete_service
|
|
50
54
|
request :delete_storageclass
|
|
51
55
|
request :delete_vminstance
|
|
@@ -58,6 +62,7 @@ module Fog
|
|
|
58
62
|
request :get_vm
|
|
59
63
|
request :get_server
|
|
60
64
|
request :get_service
|
|
65
|
+
request :get_secret
|
|
61
66
|
request :get_storageclass
|
|
62
67
|
request :get_template
|
|
63
68
|
request :get_vnc_console_details
|
|
@@ -69,10 +74,12 @@ module Fog
|
|
|
69
74
|
request :list_pvcs
|
|
70
75
|
request :list_servers
|
|
71
76
|
request :list_services
|
|
77
|
+
request :list_secrets
|
|
72
78
|
request :list_storageclasses
|
|
73
79
|
request :list_templates
|
|
74
80
|
request :list_volumes
|
|
75
81
|
request :update_vm
|
|
82
|
+
request :update_secret
|
|
76
83
|
|
|
77
84
|
module Shared
|
|
78
85
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Kubevirt
|
|
3
|
+
class Compute
|
|
4
|
+
class Secret < 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 :creation_timestamp, :aliases => 'metadata_creation_timestamp'
|
|
11
|
+
attribute :metadata
|
|
12
|
+
# data: key => base64-encoded string value (caller must decode if needed)
|
|
13
|
+
attribute :data
|
|
14
|
+
attribute :type
|
|
15
|
+
|
|
16
|
+
# Persisted if the secret has been stored in the API (uid is set by the server on create).
|
|
17
|
+
def persisted?
|
|
18
|
+
!uid.nil?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Build hash for create/update API. data values must be base64-encoded.
|
|
22
|
+
def to_secret_hash
|
|
23
|
+
ns = namespace || service.namespace
|
|
24
|
+
raise "Data must be a hash" unless (data || {}).is_a?(Hash)
|
|
25
|
+
h = {
|
|
26
|
+
:apiVersion => 'v1',
|
|
27
|
+
:kind => 'Secret',
|
|
28
|
+
:metadata => (metadata || {}).merge({
|
|
29
|
+
:name => name,
|
|
30
|
+
:namespace => ns
|
|
31
|
+
}),
|
|
32
|
+
:data => data,
|
|
33
|
+
:type => (type || 'Opaque')
|
|
34
|
+
}
|
|
35
|
+
h[:metadata][:resourceVersion] = resource_version if resource_version.to_s != ''
|
|
36
|
+
h
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def create
|
|
40
|
+
created = service.create_secret(to_secret_hash)
|
|
41
|
+
merge_attributes(created)
|
|
42
|
+
self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def update
|
|
46
|
+
updated = service.update_secret(to_secret_hash)
|
|
47
|
+
merge_attributes(updated)
|
|
48
|
+
self
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def destroy
|
|
52
|
+
service.delete_secret(name, namespace || service.namespace)
|
|
53
|
+
self.uid = nil
|
|
54
|
+
self
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def self.parse(object)
|
|
58
|
+
metadata = object[:metadata] || {}
|
|
59
|
+
data_hash = object[:data] || {}
|
|
60
|
+
raise "Data must be a hash" unless data_hash.is_a?(Hash)
|
|
61
|
+
|
|
62
|
+
{
|
|
63
|
+
:name => metadata[:name],
|
|
64
|
+
:namespace => metadata[:namespace],
|
|
65
|
+
:resource_version => metadata[:resourceVersion],
|
|
66
|
+
:uid => metadata[:uid],
|
|
67
|
+
:creation_timestamp => metadata[:creationTimestamp],
|
|
68
|
+
:data => data_hash,
|
|
69
|
+
:type => object[:type],
|
|
70
|
+
:metadata => metadata
|
|
71
|
+
}
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'fog/core/collection'
|
|
2
|
+
require 'fog/kubevirt/compute/models/secret'
|
|
3
|
+
|
|
4
|
+
module Fog
|
|
5
|
+
module Kubevirt
|
|
6
|
+
class Compute
|
|
7
|
+
class Secrets < Fog::Collection
|
|
8
|
+
attr_reader :kind, :resource_version
|
|
9
|
+
|
|
10
|
+
model Fog::Kubevirt::Compute::Secret
|
|
11
|
+
|
|
12
|
+
def all(filters = {})
|
|
13
|
+
begin
|
|
14
|
+
secrets = service.list_secrets(filters)
|
|
15
|
+
|
|
16
|
+
@kind = secrets.kind
|
|
17
|
+
@resource_version = secrets.resource_version
|
|
18
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
|
19
|
+
secrets = []
|
|
20
|
+
@kind = 'Secret'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
load secrets
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def get(name, namespace = service.namespace)
|
|
27
|
+
new service.get_secret(name, namespace)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def delete(name, namespace = service.namespace)
|
|
31
|
+
begin
|
|
32
|
+
secret = get(name, namespace)
|
|
33
|
+
service.delete_secret(name, namespace)
|
|
34
|
+
rescue ::Fog::Kubevirt::Errors::ClientError
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -24,6 +24,7 @@ module Fog
|
|
|
24
24
|
attribute :interfaces, :aliases => 'spec_interfaces'
|
|
25
25
|
attribute :networks, :aliases => 'spec_networks'
|
|
26
26
|
attribute :machine_type, :aliases => 'spec_machine_type'
|
|
27
|
+
attribute :bootloader, :aliases => 'spec_bootloader'
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def parse_object(object)
|
|
@@ -48,7 +49,8 @@ module Fog
|
|
|
48
49
|
:status => parse_status(object, :printableStatus),
|
|
49
50
|
:interfaces => parse_interfaces(domain[:devices][:interfaces], object[:status].nil? ? [] : object[:status][:interfaces], networks),
|
|
50
51
|
:networks => networks,
|
|
51
|
-
:machine_type => domain.dig(:machine, :type)
|
|
52
|
+
:machine_type => domain.dig(:machine, :type),
|
|
53
|
+
:bootloader => domain.dig(:firmware, :bootloader)
|
|
52
54
|
}
|
|
53
55
|
vm[:owner_reference] = owner unless owner.nil?
|
|
54
56
|
vm[:annotations] = annotations unless annotations.nil?
|
|
@@ -44,36 +44,41 @@ module Fog
|
|
|
44
44
|
service.delete_vm(name, service.namespace)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
# Creates a virtual machine using provided paramters
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
47
|
+
# Creates a virtual machine using provided paramters
|
|
48
|
+
#
|
|
49
|
+
# @param args [Hash] attributes containing details about vm about to be
|
|
50
|
+
# created.
|
|
51
|
+
# @option args [String] :vm_name name of the vm
|
|
52
|
+
# @option args [String,Number,nil] :cpus (nil) number of cpus
|
|
53
|
+
# @option args [String,Number] :memory_size amount of memory
|
|
54
|
+
# @option args ["K","M","G","T"] :memory_unit ("M") memory unit to use
|
|
55
|
+
# @option args [String] :pvc name of a persistent volume claim
|
|
56
|
+
# @option args [Hash] :cloudinit ({}) items for configuring cloud-init
|
|
57
|
+
# @option args [Array<Hash>,nil] :networks (nil) networks to which the vm should be connected, i.e:
|
|
56
58
|
# [ { :name => 'default', :pod => {} } ,
|
|
57
59
|
# { :name => 'ovs-red', :multus => { :networkName => 'red'} }
|
|
58
60
|
# ]
|
|
59
|
-
#
|
|
60
|
-
#
|
|
61
|
-
# :networks section by network's name, i.e.:
|
|
61
|
+
# @option args [Array<Hash>,nil] :interfaces (nil) network interfaces for the vm, correlated to
|
|
62
|
+
# :networks section by network's name, i.e:
|
|
62
63
|
# [ { :name => 'default', :bridge => {} },
|
|
63
64
|
# { :name => 'red', # correlated to networks[networkName]
|
|
64
65
|
# :bridge => {},
|
|
65
66
|
# :bootOrder => 1, # 1 to boot from network interface
|
|
66
67
|
# :macAddress => '12:34:56:AB:CD:EF' }
|
|
67
68
|
# ]
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
#
|
|
71
|
-
#
|
|
72
|
-
#
|
|
73
|
-
#
|
|
74
|
-
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
69
|
+
# @option args [Hash,nil] :extra_domain (nil) extra parameters to merge into the domain-part of the VM object, i.e:
|
|
70
|
+
# {
|
|
71
|
+
# :features => {
|
|
72
|
+
# :smm => { :enabled => true }
|
|
73
|
+
# },
|
|
74
|
+
# :firmware => {
|
|
75
|
+
# :bootloader => {
|
|
76
|
+
# :efi => { :secureBoot => false }
|
|
77
|
+
# }
|
|
78
|
+
# }
|
|
79
|
+
# }
|
|
80
|
+
# @option args [Array<Fog::Kubevirt::Compute::Volume>] :volumes the volumes (Fog::Kubevirt::Compute::Volume) to be used by the VM
|
|
81
|
+
# @option args [Array<Hash>,nil] :volume_templates (nil) the dataVolumeTemplates to be used by the VM
|
|
77
82
|
def create(args = {})
|
|
78
83
|
vm_name = args.fetch(:vm_name)
|
|
79
84
|
cpus = args.fetch(:cpus, nil)
|
|
@@ -82,7 +87,8 @@ module Fog
|
|
|
82
87
|
init = args.fetch(:cloudinit, {})
|
|
83
88
|
networks = args.fetch(:networks, nil)
|
|
84
89
|
interfaces = args.fetch(:interfaces, nil)
|
|
85
|
-
|
|
90
|
+
extra_domain = args.fetch(:extra_domain, nil)
|
|
91
|
+
vm_volumes = args.fetch(:volumes, nil)
|
|
86
92
|
volume_templates = args.fetch(:volume_templates, nil)
|
|
87
93
|
|
|
88
94
|
if vm_volumes.nil? || vm_volumes.empty?
|
|
@@ -187,6 +193,16 @@ module Fog
|
|
|
187
193
|
}
|
|
188
194
|
) unless volume_templates.nil? || volume_templates.empty?
|
|
189
195
|
|
|
196
|
+
vm = deep_merge!(vm,
|
|
197
|
+
:spec => {
|
|
198
|
+
:template => {
|
|
199
|
+
:spec => {
|
|
200
|
+
:domain => extra_domain
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
) unless extra_domain.nil? || extra_domain.empty?
|
|
205
|
+
|
|
190
206
|
service.create_vm(vm)
|
|
191
207
|
end
|
|
192
208
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Kubevirt
|
|
3
|
+
class Compute
|
|
4
|
+
class Real
|
|
5
|
+
def create_secret(secret)
|
|
6
|
+
result = kube_client.create_secret(secret)
|
|
7
|
+
Secret.parse object_to_hash(result)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def create_secret(_secret)
|
|
13
|
+
{}
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Kubevirt
|
|
3
|
+
class Compute
|
|
4
|
+
class Real
|
|
5
|
+
def get_secret(name, namespace = @namespace)
|
|
6
|
+
Secret.parse object_to_hash(kube_client.get_secret(name, namespace))
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Mock
|
|
11
|
+
def get_secret(_name, _namespace = @namespace)
|
|
12
|
+
{}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'recursive_open_struct'
|
|
2
|
+
|
|
3
|
+
module Fog
|
|
4
|
+
module Kubevirt
|
|
5
|
+
class Compute
|
|
6
|
+
class Real
|
|
7
|
+
def list_secrets(filters = {})
|
|
8
|
+
filters = {
|
|
9
|
+
namespace: @namespace
|
|
10
|
+
}.merge(filters)
|
|
11
|
+
|
|
12
|
+
secrets = kube_client.get_secrets(filters)
|
|
13
|
+
entities = secrets.map do |kubevirt_obj|
|
|
14
|
+
Secret.parse object_to_hash(kubevirt_obj)
|
|
15
|
+
end
|
|
16
|
+
EntityCollection.new(secrets.kind, secrets.resourceVersion, entities)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Mock
|
|
21
|
+
def list_secrets(_filters = {})
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Kubevirt
|
|
3
|
+
class Compute
|
|
4
|
+
class Real
|
|
5
|
+
def update_secret(secret)
|
|
6
|
+
result = kube_client.update_secret(secret)
|
|
7
|
+
Secret.parse object_to_hash(result)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def update_secret(_secret)
|
|
13
|
+
{}
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/fog/kubevirt/version.rb
CHANGED