Skip to content

Commit fd01ae6

Browse files
Merge pull request #39 from ATIX-AG/38_disksize
report correct disk size when using local storage
2 parents 30f309c + 9f232d0 commit fd01ae6

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

lib/fog/proxmox/helpers/disk_helper.rb

+17-2
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ def self.extract_option(name, disk_value)
5757
end
5858

5959
def self.extract_storage_volid_size(disk_value)
60+
#volid definition: <VOULME_ID>:=<STORAGE_ID>:<storage type dependent volume name>
6061
values_a = disk_value.scan(/^(([\w-]+)[:]{0,1}([\w\/\.-]+))/)
6162
no_cdrom = !disk_value.match(/^(.+)[,]{1}(media=cdrom)$/)
62-
creation = disk_value.match(/^(([\w-]+)[:]{1}([\d]+))/)
63+
creation = disk_value.split(',')[0].match(/^(([\w-]+)[:]{1}([\d]+))$/)
6364
values = values_a.first if values_a
6465
if no_cdrom
6566
if creation
@@ -79,8 +80,22 @@ def self.extract_storage_volid_size(disk_value)
7980
[storage, volid, size]
8081
end
8182

83+
def self.to_bytes(size)
84+
val=size.match(/\d+(\w?)/)
85+
m=0
86+
case val[1]
87+
when "K" then m=1
88+
when "M" then m=2
89+
when "G" then m=3
90+
when "T" then m=4
91+
when "P" then m=5
92+
end
93+
val[0].to_i*1024**m
94+
end
95+
8296
def self.extract_size(disk_value)
83-
extract_option('size', disk_value).to_i
97+
size=extract_option('size', disk_value)
98+
self.to_bytes(size)
8499
end
85100
end
86101
end

spec/helpers/disk_helper_spec.rb

+26-5
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@
3434
{ scsi0: 'local-lvm:vm-100-disk-1,size=8G,cache=none'}
3535
end
3636

37+
let(:virtio1) do
38+
{ id: 'virtio1', volid: 'local:108/vm-108-disk-1.qcow2,size=15G' }
39+
end
40+
41+
let(:virtio) do
42+
{ virtio1: 'local:108/vm-108-disk-1.qcow2,size=245'}
43+
end
44+
3745
let(:cdrom_none) do
3846
{ ide2: 'none,media=cdrom'}
3947
end
@@ -54,7 +62,11 @@
5462
end
5563

5664
describe '#extract_controller' do
57-
it "returns controller" do
65+
it "returns virtio controller" do
66+
controller = Fog::Proxmox::DiskHelper.extract_controller(virtio1[:id])
67+
assert_equal('virtio', controller)
68+
end
69+
it "returns scsi controller" do
5870
controller = Fog::Proxmox::DiskHelper.extract_controller(scsi0[:id])
5971
assert_equal('scsi', controller)
6072
end
@@ -72,7 +84,13 @@
7284
storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(scsi[:scsi0])
7385
assert_equal('local-lvm', storage)
7486
assert_equal('local-lvm:vm-100-disk-1', volid)
75-
assert_equal(8, size)
87+
assert_equal(8589934592, size)
88+
end
89+
it "returns virtio get local storage volid and size" do
90+
storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(virtio[:virtio1])
91+
assert_equal('local', storage)
92+
assert_equal('local:108/vm-108-disk-1.qcow2', volid)
93+
assert_equal(245, size)
7694
end
7795
it "returns scsi0 creation storage and volid" do
7896
disk = Fog::Proxmox::DiskHelper.flatten(scsi0)
@@ -94,11 +112,14 @@
94112
assert_nil size
95113
end
96114
end
97-
98115
describe '#extract_size' do
99116
it "returns size" do
100117
size = Fog::Proxmox::DiskHelper.extract_size(scsi[:scsi0])
101-
assert_equal(8, size)
118+
assert_equal(8589934592, size)
119+
end
120+
it "returns size" do
121+
size = Fog::Proxmox::DiskHelper.extract_size(virtio[:virtio1])
122+
assert_equal(245, size)
102123
end
103124
end
104-
end
125+
end

0 commit comments

Comments
 (0)