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}(.*)$/
Class Method Summary collapse
- .cdrom?(value) ⇒ 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
- .extract_size(disk_value) ⇒ Object
- .extract_storage_volid_size(disk_value) ⇒ Object
- .flatten(disk) ⇒ Object
- .mount_point?(id) ⇒ Boolean
- .rootfs?(id) ⇒ Boolean
- .server_disk?(id) ⇒ Boolean
- .to_bytes(size) ⇒ Object
Class Method Details
.cdrom?(value) ⇒ Boolean
122 123 124 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 122 def self.cdrom?(value) CDROM_REGEXP.match(value) ? true : false end |
.container_disk?(id) ⇒ Boolean
138 139 140 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 138 def self.container_disk?(id) rootfs?(id) || mount_point?(id) end |
.disk?(id) ⇒ Boolean
118 119 120 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 118 def self.disk?(id) DISKS_REGEXP.match(id) ? true : false end |
.extract(id) ⇒ Object
66 67 68 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 66 def self.extract(id) id.scan(/(\w+)(\d+)/).first end |
.extract_controller(id) ⇒ Object
58 59 60 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 58 def self.extract_controller(id) extract(id)[0] end |
.extract_device(id) ⇒ Object
62 63 64 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 62 def self.extract_device(id) extract(id)[1].to_i end |
.extract_option(name, disk_value) ⇒ Object
70 71 72 73 74 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 70 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
113 114 115 116 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 113 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) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 76 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) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 33 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 = '' += Fog::Proxmox::Hash.stringify(opts) if opts if id == 'ide2' && !self.cdrom?() += ',' if !.empty? += 'media=cdrom' end value += ',' if !.empty? && !value.empty? value += { "#{id}": value } end |
.mount_point?(id) ⇒ Boolean
134 135 136 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 134 def self.mount_point?(id) MOUNT_POINT_REGEXP.match(id) ? true : false end |
.rootfs?(id) ⇒ Boolean
130 131 132 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 130 def self.rootfs?(id) ROOTFS_REGEXP.match(id) ? true : false end |
.server_disk?(id) ⇒ Boolean
126 127 128 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 126 def self.server_disk?(id) SERVER_DISK_REGEXP.match(id) ? true : false end |
.to_bytes(size) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 100 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 |