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

Class Method Details

.cdrom?(value) ⇒ Boolean

Returns:

  • (Boolean)


138
139
140
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 138

def self.cdrom?(value)
  CDROM_REGEXP.match(value) ? true : false
end

.container_disk?(id) ⇒ Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 154

def self.container_disk?(id)
  rootfs?(id) || mount_point?(id)
end

.disk?(id) ⇒ Boolean

Returns:

  • (Boolean)


134
135
136
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 134

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



129
130
131
132
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 129

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
  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) ⇒ Object



113
114
115
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 113

def self.modulo_bytes(size)
  size / 1024
end

.mount_point?(id) ⇒ Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 150

def self.mount_point?(id)
  MOUNT_POINT_REGEXP.match(id) ? true : false
end

.rootfs?(id) ⇒ Boolean

Returns:

  • (Boolean)


146
147
148
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 146

def self.rootfs?(id)
  ROOTFS_REGEXP.match(id) ? true : false
end

.server_disk?(id) ⇒ Boolean

Returns:

  • (Boolean)


142
143
144
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 142

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

.to_human_bytes(size) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
# File 'lib/fog/proxmox/helpers/disk_helper.rb', line 117

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