Module: Fog::Proxmox::EfidiskHelper

Defined in:
lib/fog/proxmox/helpers/efidisk_helper.rb

Overview

module EfidiskHelper mixins

Class Method Summary collapse

Class Method Details

.extract(efidisk_key) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/fog/proxmox/helpers/efidisk_helper.rb', line 58

def self.extract(efidisk_key)
  efidisk = efidisk_key.dup
  # convert "-" to "_" in 'local:110/vm-110-disk-0.qcow2,efitype=4m,pre-enrolled-keys=1,size=528K'
  efidisk&.gsub!('pre-enrolled-keys', 'pre_enrolled_keys')

  names = %i[efitype pre_enrolled_keys size]
  efidisk_hash = {
    id: 0,
    volid: efidisk.split(',')[0],
    storage: extract_storage(efidisk)
  }
  names.each do |name|
    efidisk_hash.store(name.to_sym, extract_key(name, efidisk))
  end
  efidisk_hash
end

.extract_key(name, efidisk) ⇒ Object



47
48
49
50
# File 'lib/fog/proxmox/helpers/efidisk_helper.rb', line 47

def self.extract_key(name, efidisk)
  matches = efidisk.match(%r{,{0,1}#{name}={1}(?<name_value>[\w/.:]+)})
  matches ? matches[:name_value] : matches
end

.extract_storage(key) ⇒ Object



52
53
54
55
56
# File 'lib/fog/proxmox/helpers/efidisk_helper.rb', line 52

def self.extract_storage(key)
  values_a = key.scan(%r{^(([\w-]+):{0,1}([\w/.-]+))})
  values = values_a.first if values_a
  values[1]
end

.flatten(efidisk) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fog/proxmox/helpers/efidisk_helper.rb', line 24

def self.flatten(efidisk)
  return '' if efidisk.nil?

  volume = efidisk[:volid]
  options = []

  if efidisk.key?(:efitype)
    options.push("efitype=#{efidisk[:efitype]}")
  else
    options.push('efitype=4m') # default efitype
  end

  options.push("size=#{efidisk[:size]}") if efidisk.key?(:size)

  if efidisk.key?(:pre_enrolled_keys)
    options.push("pre-enrolled-keys=#{efidisk[:pre_enrolled_keys]}")
  else
    options.push('pre-enrolled-keys=0') # Use 0=disabled if not given
  end

  { "efidisk#{efidisk[:id]}": "#{volume},#{options.join(',')}" }
end