1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F #4393: add disk-resize to oca and cli

This commit is contained in:
Javi Fontan 2016-11-24 14:44:50 +01:00
parent 53413e0c29
commit 3f3e137910
3 changed files with 59 additions and 0 deletions

View File

@ -771,6 +771,27 @@ EOT
OneHelper.name_to_id(name, pool, poolname)
end
def OpenNebulaHelper.size_in_mb(size)
m = size.match(/^(\d+(?:\.\d+)?)(m|mb|g|gb)?$/i)
if !m
# return OpenNebula::Error.new('Size value malformed')
return -1, 'Size value malformed'
else
multiplier=case m[2]
when /(g|gb)/i
1024
else
1
end
value=m[1].to_f*multiplier
# return value.ceil
return 0, value.ceil
end
end
def OpenNebulaHelper.rname_to_id_desc(poolname)
"OpenNebula #{poolname} name or id"
end

View File

@ -177,6 +177,10 @@ cmd=CommandParser::CmdParser.new(ARGV) do
format_int(arg)
end
set :format, :size, "Disk size in MiB" do |arg|
OpenNebulaHelper.size_in_mb(arg)
end
########################################################################
# Commands
########################################################################
@ -843,6 +847,29 @@ cmd=CommandParser::CmdParser.new(ARGV) do
end
end
disk_resize_desc = <<-EOT.unindent
Resizes a VM disk. The new size should be larger than the old one.
States: RUNNING, POWEROFF
EOT
command :"disk-resize", disk_resize_desc,
:vmid, :diskid, :size do
helper.perform_action(args[0],options,"disk resized") do |o|
o.info
size = o["/VM/TEMPLATE/DISK[DISK_ID='#{args[1]}']/SIZE"].to_i
new_size = args[2]
if size < new_size
o.disk_resize(args[1].to_i, args[2])
else
OpenNebula::Error.new("New size '#{new_size}' must be larger " \
"than current size '#{size}'")
end
end
end
list_desc = <<-EOT.unindent
Lists VMs in the pool
EOT

View File

@ -47,6 +47,7 @@ module OpenNebula
:disksnapshotcreate => "vm.disksnapshotcreate",
:disksnapshotrevert => "vm.disksnapshotrevert",
:disksnapshotdelete => "vm.disksnapshotdelete",
:diskresize => "vm.diskresize",
:updateconf => "vm.updateconf"
}
@ -659,6 +660,16 @@ module OpenNebula
return call(VM_METHODS[:disksnapshotdelete], @pe_id, disk_id, snap_id)
end
# Changes the size of a disk
#
# @param disk_id [Integer] Id of the disk
# @param size [Integer] new size in MiB
#
# @return [nil, OpenNebula::Error] nil in case of success or error
def disk_resize(disk_id, size)
return call(VM_METHODS[:diskresize], @pe_id, disk_id, size)
end
# Recovers an ACTIVE VM
#
# @param result [Integer] Recover with failure (0), success (1),