From 78c7bdbd5d890b63aaea447b85a7d2fa7a0f8bc4 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Fri, 5 Jun 2015 03:27:51 +0200 Subject: [PATCH] feature #3782: Ruby OCA method for snapshot-delete, cli command. Datastore driver action for snapshot delete --- src/cli/oneimage | 10 ++++++++++ src/datastore_mad/one_datastore.rb | 12 ++++++++++-- src/oca/ruby/opennebula/image.rb | 12 +++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/cli/oneimage b/src/cli/oneimage index b0ce67d352..c754442a85 100755 --- a/src/cli/oneimage +++ b/src/cli/oneimage @@ -301,6 +301,16 @@ cmd=CommandParser::CmdParser.new(ARGV) do end end + snapshot_delete_desc = <<-EOT.unindent + Deletes a snapshot from the image + EOT + + command :"snapshot-delete", snapshot_delete_desc, :imageid, :snapshot_id do + helper.perform_action(args[0], options, "snapshot deleted") do |o| + o.snapshot_delete(args[1].to_i) + end + end + list_desc = <<-EOT.unindent Lists Images in the pool EOT diff --git a/src/datastore_mad/one_datastore.rb b/src/datastore_mad/one_datastore.rb index eeaceb4bd5..5f00080bdd 100755 --- a/src/datastore_mad/one_datastore.rb +++ b/src/datastore_mad/one_datastore.rb @@ -50,7 +50,8 @@ class DatastoreDriver < OpenNebulaDriver :log => "LOG", :stat => "STAT", :clone => "CLONE", - :monitor => "MONITOR" + :monitor => "MONITOR", + :snap_delete => "SNAP_DELETE" } # Register default actions for the protocol @@ -65,7 +66,8 @@ class DatastoreDriver < OpenNebulaDriver ACTION[:rm] => nil, ACTION[:mkfs] => nil, ACTION[:clone] => nil, - ACTION[:monitor] => nil + ACTION[:monitor] => nil, + ACTION[:snap_delete] => nil } }.merge!(options) @@ -87,6 +89,7 @@ class DatastoreDriver < OpenNebulaDriver register_action(ACTION[:stat].to_sym, method("stat")) register_action(ACTION[:clone].to_sym, method("clone")) register_action(ACTION[:monitor].to_sym, method("monitor")) + register_action(ACTION[:snap_delete].to_sym, method("snap_delete")) end ############################################################################ @@ -123,6 +126,11 @@ class DatastoreDriver < OpenNebulaDriver do_image_action(id, ds, :monitor, "#{drv_message} #{id}", true) end + def snap_delete(id, drv_message) + ds = get_ds_type(drv_message) + do_image_action(id, ds, :snap_delete, "#{drv_message} #{id}") + end + private def is_available?(ds, id, action) diff --git a/src/oca/ruby/opennebula/image.rb b/src/oca/ruby/opennebula/image.rb index c090a865c6..a1024cdf35 100644 --- a/src/oca/ruby/opennebula/image.rb +++ b/src/oca/ruby/opennebula/image.rb @@ -36,7 +36,8 @@ module OpenNebula :chmod => "image.chmod", :chtype => "image.chtype", :clone => "image.clone", - :rename => "image.rename" + :rename => "image.rename", + :snapshotdelete => "image.snapshotdelete" } IMAGE_STATES=%w{INIT READY USED DISABLED LOCKED ERROR CLONE DELETE USED_PERS} @@ -224,6 +225,15 @@ module OpenNebula return call(IMAGE_METHODS[:rename], @pe_id, name) end + # Deletes Image from snapshot + # + # @param snap_id [Integet] ID of the snapshot to delete + # + # @return [nil, OpenNebula::Error] nil in case of success or Error + def snapshot_delete(snap_id) + return call(IMAGE_METHODS[:snapshotdelete], @pe_id, snap_id) + end + ####################################################################### # Helpers to get Image information #######################################################################