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:
parent
53413e0c29
commit
3f3e137910
@ -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
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
|
Loading…
x
Reference in New Issue
Block a user