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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 212fdad216f0821dc4550caed98d700655387602879c3968ab39161150cad27c
4
- data.tar.gz: 9531ffc2599f4703ce2c8e33b191fd868ea7e7f60c10c256837a6f77a4f688fb
3
+ metadata.gz: 88936198ddc16f905d97de9baf7695edb0ba214bff8da4db1be3c94c2d2ee6e7
4
+ data.tar.gz: fc7de7dcc2beb9ecf9546ceeefb3595970d8090e555ea89712fc02acc15870c1
5
5
  SHA512:
6
- metadata.gz: 8177d165a73523c542bf831804fabdcb2b554ad1e3442d701a43bee92fa155994851618e6618cb314401d05f59cceb8aa0bf75a8615930cfd717373678b6b85b
7
- data.tar.gz: 136ce42e9aa18969ceb919f0bd8b40c904e8869b4e2e0b2997c249c7f6a5066097eb1dd6e9b9bb8ea3852c3a51c324c7d2b1769c75e3369efc22f18cc2b27e89
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
- # :vm_name [String] - name of a vm
49
- # :cpus [String] - number of cpus
50
- # :memory_size [String] - amount of memory
51
- # :memory_unit [String] - memory unit to use, default to 'M'
52
- # :image [String] - name of a container disk
53
- # :pvc [String] - name of a persistent volume claim
54
- # :cloudinit [Hash] - number of items needed to configure cloud-init
55
- # :networks[Array] - networks to which the vm should be connected, i.e:
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
- # :interfaces[Array] - network interfaces for the vm, correlated to
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
- # @param [String] :image name of container disk.
70
- #
71
- # @param [Array] :volumes the volumes (Fog::Kubevirt::Compute::Volume) to be used by the VM
72
- #
73
- # @param [Array] :volume_templates the dataVolumeTemplates to be used by the VM
74
- #
75
- # @param [Hash] attributes containing details about vm about to be
76
- # created.
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
- vm_volumes = args.fetch(:volumes, nil)
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,16 @@
1
+ module Fog
2
+ module Kubevirt
3
+ class Compute
4
+ class Real
5
+ def delete_secret(name, namespace)
6
+ kube_client.delete_secret(name, namespace)
7
+ end
8
+ end
9
+
10
+ class Mock
11
+ def delete_secret(_name, _namespace)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ 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
@@ -1,5 +1,5 @@
1
1
  module Fog
2
2
  module Kubevirt
3
- VERSION = '1.6.2'
3
+ VERSION = '1.8.0'
4
4
  end
5
5
  end