foreman_kubevirt 0.5.4 → 0.6.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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 783060e275700cf232b4068e0aa0ca75b4f790805fa30b95f19148f15e9ca5a5
|
|
4
|
+
data.tar.gz: ec15a1ba2ce6c55f570e489b25ab8fb4d68d7ac26ee9714707dc3483d2b03abb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9070f9c4676ebc0aa275a486a831da1bcdde007fdbf318866a554c50c5ce81219a93ba2e9f3a68116658ca8e7c235ef9e5df382b8d3cbdd6169673087f3a7ca5
|
|
7
|
+
data.tar.gz: 2f7e8c104bb2695c3be90bc8b9d8a44b68c352f4922cd78343efbf428bf6de6055f617faeb22a12609ffaebd4c8ea3e19af698428642d995091514d0e3700b53
|
|
@@ -180,23 +180,27 @@ module ForemanKubevirt
|
|
|
180
180
|
logger.debug("creating VM with the following options: #{options.inspect}")
|
|
181
181
|
|
|
182
182
|
# Add clound init user data
|
|
183
|
-
user_data =
|
|
183
|
+
user_data = options[:user_data]
|
|
184
184
|
|
|
185
185
|
begin
|
|
186
186
|
volumes, volume_templates = create_volumes_for_vm(options)
|
|
187
187
|
interfaces, networks = create_network_devices_for_vm(options, volumes)
|
|
188
|
+
userdata_secret = create_userdata_secret(user_data, options[:name]) if user_data.present?
|
|
188
189
|
client.vms.create(:vm_name => options[:name],
|
|
189
190
|
:cpus => options[:cpu_cores].to_i,
|
|
190
191
|
:memory_size => convert_memory(options[:memory] + "b", :mi).to_s,
|
|
191
192
|
:memory_unit => "Mi",
|
|
192
193
|
:volumes => volumes,
|
|
193
194
|
:volume_templates => volume_templates,
|
|
194
|
-
:cloudinit =>
|
|
195
|
+
:cloudinit => userdata_secret_ref(userdata_secret),
|
|
195
196
|
:networks => networks,
|
|
196
197
|
:interfaces => interfaces)
|
|
197
|
-
client.servers.get(options[:name])
|
|
198
|
+
vm = client.servers.get(options[:name])
|
|
199
|
+
update_userdata_secret_owner(userdata_secret, options[:name], vm.uid) if userdata_secret.present?
|
|
200
|
+
vm
|
|
198
201
|
rescue Exception => e
|
|
199
202
|
delete_pvcs(volumes) if volumes
|
|
203
|
+
delete_userdata_secret(userdata_secret) if userdata_secret.present?
|
|
200
204
|
raise e
|
|
201
205
|
end
|
|
202
206
|
end
|
|
@@ -530,6 +534,35 @@ module ForemanKubevirt
|
|
|
530
534
|
[interfaces, networks]
|
|
531
535
|
end
|
|
532
536
|
|
|
537
|
+
def create_userdata_secret(user_data, vm_name)
|
|
538
|
+
client.secrets.create(:name => "#{vm_name}-userdata", :namespace => namespace, :data => { "userData" => Base64.encode64(user_data) })
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
# Update the owner reference of the userdata secret to the VM
|
|
542
|
+
# This is needed to ensure that the secret is deleted when the VM is deleted
|
|
543
|
+
def update_userdata_secret_owner(secret, vm_name, vm_uid)
|
|
544
|
+
secret.metadata['ownerReferences'] = [{
|
|
545
|
+
apiVersion: "kubevirt.io/v1",
|
|
546
|
+
kind: "VirtualMachine",
|
|
547
|
+
name: vm_name,
|
|
548
|
+
uid: vm_uid
|
|
549
|
+
}]
|
|
550
|
+
secret.save
|
|
551
|
+
end
|
|
552
|
+
|
|
553
|
+
def delete_userdata_secret(secret)
|
|
554
|
+
secret.destroy
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
def userdata_secret_ref(userdata_secret)
|
|
558
|
+
return nil if userdata_secret.nil?
|
|
559
|
+
{
|
|
560
|
+
'secretRef': {
|
|
561
|
+
name: userdata_secret.name,
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
end
|
|
565
|
+
|
|
533
566
|
def convert_memory(memory, unit)
|
|
534
567
|
::Fog::Kubevirt::Utils::UnitConverter.convert(memory, unit).to_i
|
|
535
568
|
end
|
|
@@ -16,16 +16,27 @@ class ForemanKubevirtTest < ActiveSupport::TestCase
|
|
|
16
16
|
pvcs.stubs(:delete)
|
|
17
17
|
servers = stub
|
|
18
18
|
servers.stubs(:get)
|
|
19
|
+
secrets = stub
|
|
19
20
|
storageclasses = stub
|
|
20
21
|
storageclasses.stubs(:all).returns([{ 'name': 'local' }])
|
|
21
22
|
client = stub
|
|
22
23
|
client.stubs(:vms).returns(vms)
|
|
23
24
|
client.stubs(:pvcs).returns(pvcs)
|
|
24
25
|
client.stubs(:servers).returns(servers)
|
|
26
|
+
client.stubs(:secrets).returns(secrets)
|
|
25
27
|
client.stubs(:storageclasses).returns(storageclasses)
|
|
26
28
|
client
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
def mock_userdata_secret(name: "test-userdata")
|
|
32
|
+
metadata = {}
|
|
33
|
+
secret = stub(name: name)
|
|
34
|
+
secret.stubs(:metadata).returns(metadata)
|
|
35
|
+
secret.stubs(:save)
|
|
36
|
+
secret.stubs(:destroy)
|
|
37
|
+
secret
|
|
38
|
+
end
|
|
39
|
+
|
|
29
40
|
test "host_interfaces_attrs" do
|
|
30
41
|
record = new_kubevirt_vcr
|
|
31
42
|
host = ::FactoryBot.build(:host_kubevirt, :with_interfaces)
|
|
@@ -103,6 +114,89 @@ class ForemanKubevirtTest < ActiveSupport::TestCase
|
|
|
103
114
|
end
|
|
104
115
|
assert_match(/A bootable volume is required as a target for the image/, error.message)
|
|
105
116
|
end
|
|
117
|
+
|
|
118
|
+
test "without user_data, cloudinit is nil" do
|
|
119
|
+
record = new_kubevirt_vcr
|
|
120
|
+
client = mocked_client
|
|
121
|
+
record.stubs(:client).returns(client)
|
|
122
|
+
|
|
123
|
+
client.vms.expects(:create).with do |args|
|
|
124
|
+
assert_nil args[:cloudinit]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
record.create_vm({ :name => "test", :volumes_attributes => { 0 => { :capacity => "5" } }, :interfaces_attributes => { "0" => { "cni_provider" => "multus", "network" => "default/network" } } })
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
test "with user_data, creates secret and passes secretRef" do
|
|
131
|
+
record = new_kubevirt_vcr
|
|
132
|
+
client = mocked_client
|
|
133
|
+
record.stubs(:client).returns(client)
|
|
134
|
+
|
|
135
|
+
user_data = "#!/bin/bash\necho hello"
|
|
136
|
+
mock_secret = mock_userdata_secret(name: "test-userdata")
|
|
137
|
+
|
|
138
|
+
client.secrets.expects(:create).with do |args|
|
|
139
|
+
assert_equal "test-userdata", args[:name]
|
|
140
|
+
assert_equal record.namespace, args[:namespace]
|
|
141
|
+
assert_equal Base64.encode64(user_data), args[:data]["userData"]
|
|
142
|
+
end.returns(mock_secret)
|
|
143
|
+
|
|
144
|
+
client.vms.expects(:create).with do |args|
|
|
145
|
+
assert_equal({ secretRef: { name: "test-userdata" } }, args[:cloudinit])
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
vm = stub(uid: "vm-uid-123")
|
|
149
|
+
client.servers.stubs(:get).with("test").returns(vm)
|
|
150
|
+
|
|
151
|
+
record.create_vm({ :name => "test", :user_data => user_data, :volumes_attributes => { 0 => { :capacity => "5" } }, :interfaces_attributes => { "0" => { "cni_provider" => "multus", "network" => "default/network" } } })
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
test "with user_data, updates secret owner after VM creation" do
|
|
155
|
+
record = new_kubevirt_vcr
|
|
156
|
+
client = mocked_client
|
|
157
|
+
record.stubs(:client).returns(client)
|
|
158
|
+
|
|
159
|
+
user_data = "#!/bin/bash\necho hello"
|
|
160
|
+
metadata = {}
|
|
161
|
+
mock_secret = stub(name: "test-userdata")
|
|
162
|
+
mock_secret.stubs(:metadata).returns(metadata)
|
|
163
|
+
mock_secret.stubs(:save)
|
|
164
|
+
mock_secret.stubs(:destroy)
|
|
165
|
+
|
|
166
|
+
client.secrets.expects(:create).returns(mock_secret)
|
|
167
|
+
|
|
168
|
+
client.vms.expects(:create)
|
|
169
|
+
vm = stub(uid: "vm-uid-456")
|
|
170
|
+
client.servers.stubs(:get).with("test").returns(vm)
|
|
171
|
+
|
|
172
|
+
mock_secret.expects(:save).once
|
|
173
|
+
|
|
174
|
+
record.create_vm({ :name => "test", :user_data => user_data, :volumes_attributes => { 0 => { :capacity => "5" } }, :interfaces_attributes => { "0" => { "cni_provider" => "multus", "network" => "default/network" } } })
|
|
175
|
+
|
|
176
|
+
assert_equal 1, metadata["ownerReferences"].length
|
|
177
|
+
assert_equal "kubevirt.io/v1", metadata["ownerReferences"][0][:apiVersion]
|
|
178
|
+
assert_equal "VirtualMachine", metadata["ownerReferences"][0][:kind]
|
|
179
|
+
assert_equal "test", metadata["ownerReferences"][0][:name]
|
|
180
|
+
assert_equal "vm-uid-456", metadata["ownerReferences"][0][:uid]
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
test "with user_data, on exception destroys secret" do
|
|
184
|
+
record = new_kubevirt_vcr
|
|
185
|
+
client = mocked_client
|
|
186
|
+
record.stubs(:client).returns(client)
|
|
187
|
+
|
|
188
|
+
user_data = "#!/bin/bash\necho hello"
|
|
189
|
+
mock_secret = mock_userdata_secret(name: "test-userdata")
|
|
190
|
+
|
|
191
|
+
client.secrets.expects(:create).returns(mock_secret)
|
|
192
|
+
client.vms.expects(:create).raises(StandardError.new("vm create failed"))
|
|
193
|
+
mock_secret.expects(:destroy).once
|
|
194
|
+
|
|
195
|
+
error = assert_raises(StandardError) do
|
|
196
|
+
record.create_vm({ :name => "test", :user_data => user_data, :volumes_attributes => { 0 => { :capacity => "5" } }, :interfaces_attributes => { "0" => { "cni_provider" => "multus", "network" => "default/network" } } })
|
|
197
|
+
end
|
|
198
|
+
assert_equal "vm create failed", error.message
|
|
199
|
+
end
|
|
106
200
|
end
|
|
107
201
|
|
|
108
202
|
describe "create_network_element" do
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: foreman_kubevirt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Moti Asayag
|
|
@@ -15,7 +15,7 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 1.
|
|
18
|
+
version: 1.7.0
|
|
19
19
|
- - "<"
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
21
|
version: '2'
|
|
@@ -25,7 +25,7 @@ dependencies:
|
|
|
25
25
|
requirements:
|
|
26
26
|
- - ">="
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
version: 1.
|
|
28
|
+
version: 1.7.0
|
|
29
29
|
- - "<"
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: '2'
|
|
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
150
150
|
- !ruby/object:Gem::Version
|
|
151
151
|
version: '0'
|
|
152
152
|
requirements: []
|
|
153
|
-
rubygems_version: 4.0.
|
|
153
|
+
rubygems_version: 4.0.6
|
|
154
154
|
specification_version: 4
|
|
155
155
|
summary: Provision and manage Kubevirt Virtual Machines from Foreman
|
|
156
156
|
test_files:
|