Module: ProxmoxVMEfidiskHelper

Included in:
ProxmoxVMHelper
Defined in:
app/helpers/proxmox_vm_efidisk_helper.rb

Overview

Convert a foreman form server hash into a fog-proxmox server attributes hash

Instance Method Summary collapse

Instance Method Details

#efidisk_defaults(storage) ⇒ Object



76
77
78
79
80
81
82
83
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 76

def efidisk_defaults(storage)
  {
    'id' => '0',
    'volid' => "#{storage}:0",
    'efitype' => '4m',
    'pre_enrolled_keys' => '1',
  }
end

#normalize_pre_enrolled_keys(args) ⇒ Object



51
52
53
54
55
56
57
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 51

def normalize_pre_enrolled_keys(args)
  efidisk = args[:efidisk_attributes]
  return args if ForemanFogProxmox::Value.empty?(efidisk)

  efidisk[:pre_enrolled_keys] = '0'
  args
end

#parse_typed_efidisk(args, _vmid, _type) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 107

def parse_typed_efidisk(args, _vmid, _type)
  logger.debug(format(_('parse_efidisk(): args=%<args>s'), args: args))
  efidisk = {}
  efidisk[:id] = args['id'] if args.key?('id')
  efidisk[:volid] = args['volid']
  efidisk[:size] = args['size'].to_i if args.key?('size') && !args['size'].empty?
  efidisk[:format] = args['format']
  efidisk[:efitype] = args['efitype'] if args.key?('efitype') && !args['efitype'].empty?
  efidisk[:pre_enrolled_keys] = args['pre_enrolled_keys'] if args.key?('pre_enrolled_keys')
  Fog::Proxmox::EfidiskHelper.flatten(efidisk)
end

#parsed_typed_efidisk(args, type, parsed_vm) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 90

def parsed_typed_efidisk(args, type, parsed_vm)
  attrs = args['efidisk_attributes']

  # we need the vmid to create the volid if not present
  vmid = args['vmid'] if args.key?('vmid')
  # fallback to a dummy vmid for new vms
  vmid ||= 'no_vmid_yet'

  logger.debug("parsed_typed_efidisk(#{type}): attrs=#{attrs} with #{vmid}")
  unless ForemanFogProxmox::Value.empty?(args['efidisk_attributes'])
    efidisk = parse_typed_efidisk(attrs, vmid, type)
    logger.debug("parsed_typed_efidisk(#{type}): efidisk=#{efidisk}")
    parsed_vm = parsed_vm.merge(efidisk)
  end
  parsed_vm
end

#process_firmware_attributes(args, type) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 26

def process_firmware_attributes(args, type)
  return args unless type == 'qemu'
  return args unless args

  normalized_args = ActiveSupport::HashWithIndifferentAccess.new(args)
  config = normalized_args[:config_attributes] || normalized_args
  return args unless config.key?(:bios) || config.key?(:is_secure_boot)

  args = normalized_args

  bios = config[:bios]
  secure_boot_value = config[:is_secure_boot]
  secure_boot = bios == 'uefi_secure_boot' ||
                (bios == 'ovmf' && Foreman::Cast.to_bool(secure_boot_value))
  config[:is_secure_boot] = secure_boot ? '1' : '0'

  unless secure_boot
    normalize_pre_enrolled_keys(args)
    return args
  end

  config[:bios] = 'ovmf'
  process_secure_boot_efidisk(args, config)
end

#process_secure_boot_efidisk(args, config) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 59

def process_secure_boot_efidisk(args, config)
  efidisk = args[:efidisk_attributes]
  unless ForemanFogProxmox::Value.empty?(efidisk)
    args[:efidisk_attributes] = secure_boot_efidisk_attributes(
      efidisk.merge('efitype' => '4m', 'pre_enrolled_keys' => '1')
    )
    return args
  end

  volumes = args[:volumes_attributes] || config[:volumes_attributes]
  storage = volumes&.each_value&.filter_map { |volume| volume[:storage] }&.find(&:present?)
  return args if ForemanFogProxmox::Value.empty?(storage)

  args[:efidisk_attributes] = secure_boot_efidisk_attributes(storage: storage)
  args
end

#secure_boot_efidisk_attributes(attr = {}) ⇒ Object



85
86
87
88
# File 'app/helpers/proxmox_vm_efidisk_helper.rb', line 85

def secure_boot_efidisk_attributes(attr = {})
  attr = attr.to_h.stringify_keys
  efidisk_defaults(attr['storage']).merge(attr)
end