module Fog::Proxmox::DiskHelper
module Disk mixins
Constants
- CDROM_REGEXP
- CLOUD_INIT_REGEXP
- DISKS_REGEXP
- MOUNT_POINT_REGEXP
- ROOTFS_REGEXP
- SERVER_DISK_REGEXP
- TEMPLATE_REGEXP
Public Class Methods
cdrom?(value)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 141 def self.cdrom?(value) CDROM_REGEXP.match(value) ? true : false end
cloud_init?(volid)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 165 def self.cloud_init?(volid) CLOUD_INIT_REGEXP.match(volid) ? true : false end
container_disk?(id)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 157 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 137 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 68 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 60 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 64 def self.extract_device(id) extract(id)[1].to_i end
extract_option(name, disk_value)
click to toggle source
Convert API Proxmox
parameter string into attribute hash value
# File lib/fog/proxmox/helpers/disk_helper.rb, line 73 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 132 def self.extract_size(disk_value) size = extract_option('size', disk_value) size ? to_bytes(size) : "1G" end
extract_storage_volid_size(disk_value)
click to toggle source
Convert API Proxmox
volume/disk parameter string into volume/disk attributes hash value
# File lib/fog/proxmox/helpers/disk_helper.rb, line 80 def self.extract_storage_volid_size(disk_value) # volid definition: <VOLUME_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 storage = values[1] if creation volid = nil size = values[2].to_i else 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
Convert disk attributes hash into API Proxmox
parameters string
# File lib/fog/proxmox/helpers/disk_helper.rb, line 35 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 } options = '' options += Fog::Proxmox::Hash.stringify(opts) if opts if id == 'ide2' && !cdrom?(options) options += ',' unless 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 116 def self.modulo_bytes(size) size / 1024 end
mount_point?(id)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 153 def self.mount_point?(id) MOUNT_POINT_REGEXP.match(id) ? true : false end
of_type?(disk_h, vm_type)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 169 def self.of_type?(disk_h, vm_type) id = disk_h['id'] if disk_h.key?('id') id = disk_h[:id] if disk_h.key?(:id) result = false result = server_disk?(id) if vm_type == 'qemu' result = container_disk?(id) if vm_type == 'lxc' result end
rootfs?(id)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 149 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 145 def self.server_disk?(id) SERVER_DISK_REGEXP.match(id) ? true : false end
template?(volid)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 161 def self.template?(volid) TEMPLATE_REGEXP.match(volid) ? true : false end
to_bytes(size)
click to toggle source
# File lib/fog/proxmox/helpers/disk_helper.rb, line 103 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 120 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 = modulo_bytes(size) human_size = size.to_s + units[i] i += 1 end human_size end