module Fog::Proxmox::DiskHelper

module Disk mixins

Constants

CDROM_REGEXP
DISKS_REGEXP
MOUNT_POINT_REGEXP
ROOTFS_REGEXP
SERVER_DISK_REGEXP

Public Class Methods

cdrom?(value) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 137
def self.cdrom?(value)
  CDROM_REGEXP.match(value) ? true : false
end
container_disk?(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 153
def self.container_disk?(id)
  rootfs?(id) || mount_point?(id)
end
disk?(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 133
def self.disk?(id)
  DISKS_REGEXP.match(id) ? true : false
end
extract(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 65
def self.extract(id)
  id.scan(/(\w+)(\d+)/).first
end
extract_controller(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 57
def self.extract_controller(id)
  extract(id)[0]
end
extract_device(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 61
def self.extract_device(id)
  extract(id)[1].to_i
end
extract_option(name, disk_value) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 69
def self.extract_option(name, disk_value)
  values = disk_value.scan(/#{name}=(\w+)/)
  name_value = values.first if values
  name_value&.first
end
extract_size(disk_value) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 128
def self.extract_size(disk_value)
  size=extract_option('size', disk_value)
        size ? self.to_bytes(size) : "1G"
end
extract_storage_volid_size(disk_value) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 75
def self.extract_storage_volid_size(disk_value)
  #volid definition: <VOULME_ID>:=<STORAGE_ID>:<storage type dependent volume name>
  values_a = disk_value.scan(/^(([\w-]+)[:]{0,1}([\w\/\.-]+))/)
  no_cdrom = !disk_value.match(CDROM_REGEXP)
  creation = disk_value.split(',')[0].match(/^(([\w-]+)[:]{1}([\d]+))$/)
  values = values_a.first if values_a
  if no_cdrom
    if creation
      storage = values[1]
      volid = nil
      size = values[2].to_i
    else
      storage = values[1]
      volid = values[0]
      size = extract_size(disk_value)
    end
  else
    volid = values[0]
    storage = values[1] unless %w[none cdrom].include? volid
    size = nil
  end
  [storage, volid, size]
end
flatten(disk) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 32
def self.flatten(disk)
  id = disk[:id]
  value = ''
  if disk[:volid]
    value += disk[:volid]
    value += ',size=' + disk[:size].to_s if disk[:size]
  elsif disk[:storage] && disk[:size]
    value += disk[:storage] + ':' + disk[:size].to_s
  elsif id == 'ide2'
    value += 'none'
  end
  opts = disk[:options] if disk[:options]
  main_a = [:id,:volid,:storage,:size]
  opts = disk.reject { |key,_value| main_a.include? key } unless opts
  options = ''
  options += Fog::Proxmox::Hash.stringify(opts) if opts
  if id == 'ide2' && !self.cdrom?(options)
    options += ',' if !options.empty?
    options += 'media=cdrom'
  end
  value += ',' if !options.empty? && !value.empty?
  value += options
  { "#{id}": value }
end
modulo_bytes(size) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 112
def self.modulo_bytes(size)
  size / 1024
end
mount_point?(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 149
def self.mount_point?(id)
  MOUNT_POINT_REGEXP.match(id) ? true : false
end
rootfs?(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 145
def self.rootfs?(id)
  ROOTFS_REGEXP.match(id) ? true : false
end
server_disk?(id) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 141
def self.server_disk?(id)
  SERVER_DISK_REGEXP.match(id) ? true : false
end
to_bytes(size) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 99
def self.to_bytes(size)
  val=size.match(/\d+(\w?)/)
  m=0
  case val[1] 
    when "K" then m=1
    when "M" then m=2
    when "G" then m=3
    when "T" then m=4
    when "P" then m=5
  end
  val[0].to_i*1024**m
end
to_human_bytes(size) click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 116
def self.to_human_bytes(size)
  units = ['Kb','Mb','Gb','Tb','Pb']
  i = 0
  human_size = size.to_s + 'b'
  while i < 5 && size >= 1024
    size = self.modulo_bytes(size)
    human_size = size.to_s + units[i]
    i+=1            
  end
  human_size
end