module Fog::Proxmox::EfidiskHelper

module EfidiskHelper mixins

Public Class Methods

extract(efidisk_key) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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