Module: Fog::Proxmox::DiskHelper
- Defined in:
- lib/fog/proxmox/helpers/disk_helper.rb
Overview
module Disk mixins
Constant Summary collapse
- DISKS_REGEXP =
/^(scsi|sata|mp|rootfs|virtio|ide)(\d+){0,1}$/- SERVER_DISK_REGEXP =
/^(scsi|sata|virtio|ide)(\d+)$/- MOUNT_POINT_REGEXP =
/^(mp)(\d+)$/- ROOTFS_REGEXP =
/^(rootfs)$/- CDROM_REGEXP =
/^(.*),{0,1}(media=cdrom),{0,1}(.*)$/- TEMPLATE_REGEXP =
/^(.*)(base-)(.*)$/- CLOUD_INIT_REGEXP =
/^(.*)(cloudinit)(.*)$/
Class Method Summary collapse
- .cdrom?(value) ⇒ Boolean
- .cloud_init?(volid) ⇒ Boolean
- .container_disk?(id) ⇒ Boolean
- .disk?(id) ⇒ Boolean
- .extract(id) ⇒ Object
- .extract_controller(id) ⇒ Object
- .extract_device(id) ⇒ Object
-
.extract_option(name, disk_value) ⇒ Object
Convert API Proxmox parameter string into attribute hash value.
- .extract_size(disk_value) ⇒ Object
-
.extract_storage_volid_size(disk_value) ⇒ Object
Convert API Proxmox volume/disk parameter string into volume/disk attributes hash value.
-
.flatten(disk) ⇒ Object
Convert disk attributes hash into API Proxmox parameters string.
- .modulo_bytes(size) ⇒ Object
- .mount_point?(id) ⇒ Boolean
- .of_type?(disk_h, vm_type) ⇒ Boolean
- .rootfs?(id) ⇒ Boolean
- .server_disk?(id) ⇒ Boolean
- .template?(volid) ⇒ Boolean
- .to_bytes(size) ⇒ Object
- .to_human_bytes(size) ⇒ Object
- .to_int_gb(size_bytes) ⇒ Object
Class Method Details
.cdrom?(value) ⇒ Boolean
147 148 149 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 147 def self.cdrom?(value) CDROM_REGEXP.match(value) || false end |
.cloud_init?(volid) ⇒ Boolean
171 172 173 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 171 def self.cloud_init?(volid) CLOUD_INIT_REGEXP.match(volid) || false end |
.container_disk?(id) ⇒ Boolean
163 164 165 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 163 def self.container_disk?(id) rootfs?(id) || mount_point?(id) end |
.disk?(id) ⇒ Boolean
143 144 145 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 143 def self.disk?(id) DISKS_REGEXP.match(id) || false end |
.extract(id) ⇒ Object
68 69 70 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 68 def self.extract(id) id.scan(/(\w+)(\d+)/).first end |
.extract_controller(id) ⇒ Object
60 61 62 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 60 def self.extract_controller(id) extract(id)[0] end |
.extract_device(id) ⇒ Object
64 65 66 |
# 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) ⇒ Object
Convert API Proxmox parameter string into attribute hash value
73 74 75 76 77 |
# 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) ⇒ Object
137 138 139 140 141 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 137 def self.extract_size(disk_value) size = extract_option('size', disk_value) size = to_int_gb(to_bytes(size)).to_s if size.match?(/\d+(G)/) size end |
.extract_storage_volid_size(disk_value) ⇒ Object
Convert API Proxmox volume/disk parameter string into volume/disk attributes hash value
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# 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(%r{^(([\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) ⇒ Object
Convert disk attributes hash into API Proxmox parameters string
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 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 = i[id volid storage size] opts ||= disk.reject { |key, _value| main_a.include? key } = '' += Fog::Proxmox::Hash.stringify(opts) if opts if id == 'ide2' && !cdrom?() += ',' unless .empty? += 'media=cdrom' end value += ',' if !.empty? && !value.empty? value += { "#{id}": value } end |
.modulo_bytes(size) ⇒ Object
116 117 118 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 116 def self.modulo_bytes(size) size / 1024 end |
.mount_point?(id) ⇒ Boolean
159 160 161 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 159 def self.mount_point?(id) MOUNT_POINT_REGEXP.match(id) || false end |
.of_type?(disk_h, vm_type) ⇒ Boolean
175 176 177 178 179 180 181 182 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 175 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) ⇒ Boolean
155 156 157 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 155 def self.rootfs?(id) ROOTFS_REGEXP.match(id) || false end |
.server_disk?(id) ⇒ Boolean
151 152 153 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 151 def self.server_disk?(id) SERVER_DISK_REGEXP.match(id) || false end |
.template?(volid) ⇒ Boolean
167 168 169 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 167 def self.template?(volid) TEMPLATE_REGEXP.match(volid) || false end |
.to_bytes(size) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 |
# 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) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 120 def self.to_human_bytes(size) units = %w[Kb Mb Gb] i = 0 human_size = size.to_s + 'b' while i < 3 && size >= 1024 size = modulo_bytes(size) human_size = size.to_s + units[i] i += 1 end human_size end |
.to_int_gb(size_bytes) ⇒ Object
132 133 134 135 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 132 def self.to_int_gb(size_bytes) val = to_human_bytes(size_bytes.to_i).match(/\d+(Gb)/) val ? val[0].to_i : 0 end |