From 3f3e13791039c54e11df66d866c690060b9f5288 Mon Sep 17 00:00:00 2001 From: Javi Fontan Date: Thu, 24 Nov 2016 14:44:50 +0100 Subject: [PATCH] F #4393: add disk-resize to oca and cli --- src/cli/one_helper.rb | 21 +++++++++++++++++ src/cli/onevm | 27 ++++++++++++++++++++++ src/oca/ruby/opennebula/virtual_machine.rb | 11 +++++++++ 3 files changed, 59 insertions(+) diff --git a/src/cli/one_helper.rb b/src/cli/one_helper.rb index b6eaef9f14..0abd683bf2 100644 --- a/src/cli/one_helper.rb +++ b/src/cli/one_helper.rb @@ -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 diff --git a/src/cli/onevm b/src/cli/onevm index e1311b26db..4f6e1f51ff 100755 --- a/src/cli/onevm +++ b/src/cli/onevm @@ -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 diff --git a/src/oca/ruby/opennebula/virtual_machine.rb b/src/oca/ruby/opennebula/virtual_machine.rb index 8f46d0a2e3..29d5d36208 100644 --- a/src/oca/ruby/opennebula/virtual_machine.rb +++ b/src/oca/ruby/opennebula/virtual_machine.rb @@ -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),