Skip to content

Commit dedf741

Browse files
author
Kees van Veen
committed
fix: Taking over incomplete volume parameters
1 parent c237bc0 commit dedf741

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

app/models/foreman_fog_proxmox/proxmox_vm_commands.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def create_vm(args = {})
4545
update_pool(vm, args[:pool]) if args[:pool]
4646
else
4747
logger.warn("create vm: args=#{args}")
48-
vm = node.send(vm_collection(type)).create(parse_typed_vm(args, type))
48+
vm = node.send(vm_collection(type)).create(parse_typed_vm(update_extra_volumes_definitions(args), type))
4949
end
5050
start_on_boot(vm, args)
5151
rescue StandardError => e

app/models/foreman_fog_proxmox/proxmox_vm_new.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ def config_attributes(type = 'qemu')
161161
end
162162

163163
def new_vm(new_attr = {})
164-
new_attr = ActiveSupport::HashWithIndifferentAccess.new(new_attr)
164+
new_attr = ActiveSupport::HashWithIndifferentAccess.new(update_extra_volumes_definitions(new_attr))
165165
type = new_attr['type']
166166
type ||= 'qemu'
167167
new_typed_vm(new_attr, type)

app/models/foreman_fog_proxmox/proxmox_volumes.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,40 @@ module ForemanFogProxmox
2424
module ProxmoxVolumes
2525
include ProxmoxVMHelper
2626

27+
def update_extra_volumes_definitions(data_in)
28+
new_data = {}
29+
data_in.each do |key, value|
30+
if key != 'volumes_attributes'
31+
new_data[key] = value
32+
else
33+
# Start to look into the data that needs to be updated
34+
volumes_attributes = {}
35+
value.each do |index, dev_specs|
36+
# Only if this contains only 1 set like: {"size"=>"xxGB"}
37+
if index > 0 && dev_specs.keys.count == 1
38+
# Copy the data from the first entry
39+
newid = "#{value['0']['controller']}#{index}"
40+
newdev = {
41+
'storage_type' => value['0']['storage_type'],
42+
'storage' => value['0']['storage'],
43+
'controller' => value['0']['controller'],
44+
'cache' => value['0']['cache'],
45+
'device' => index,
46+
'id' => newid,
47+
'size' => dev_specs['size'],
48+
}
49+
volumes_attributes[index] = newdev
50+
else
51+
volumes_attributes[index] = dev_specs
52+
end
53+
end
54+
# Now add the (reworked) data back
55+
new_data['volumes_attributes'] = volumes_attributes
56+
end
57+
end
58+
new_data
59+
end
60+
2761
def delete_volume(vm, id, volume_attributes)
2862
logger.info("vm #{vm.identity} delete volume #{id}")
2963
vm.detach(id)

0 commit comments

Comments
 (0)