Skip to content

Commit

Permalink
Merge pull request #189 from sasoc/support-create-snapshot-for-vm
Browse files Browse the repository at this point in the history
Support create snapshot for VM
(cherry picked from commit 04ff0cd)

https://bugzilla.redhat.com/show_bug.cgi?id=1552686
  • Loading branch information
agrare authored and simaishi committed Mar 7, 2018
1 parent fa49cf6 commit 1153155
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
12 changes: 12 additions & 0 deletions app/models/manageiq/providers/vmware/cloud_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,16 @@ def vm_destroy(vm, _options = {})
rescue => err
$vcloud_log.error("vm=[#{vm.name}], error: #{err}")
end

def vm_create_snapshot(vm, options = {})
defaults = {
:memory => false,
:quiesce => false
}
options = defaults.merge(options)
with_provider_connection do |service|
response = service.post_create_snapshot(vm.ems_ref, options)
service.process_task(response.body)
end
end
end
2 changes: 2 additions & 0 deletions app/models/manageiq/providers/vmware/cloud_manager/vm.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
class ManageIQ::Providers::Vmware::CloudManager::Vm < ManageIQ::Providers::CloudManager::Vm
include_concern 'Operations'

supports :snapshots

def provider_object(connection = nil)
connection ||= ext_management_system.connect
connection.vms.get_single_vm(uid_ems)
Expand Down
21 changes: 21 additions & 0 deletions spec/models/manageiq/providers/vmware/cloud_manager_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,25 @@
it "#supported_catalog_types" do
expect(@ems.supported_catalog_types).to eq(%w(vmware))
end

describe 'snapshot operations' do
before(:each) do
expect(@ems).to receive(:with_provider_connection).and_yield(connection)
end

let(:vm) { FactoryGirl.create(:vm_vmware, :ext_management_system => @ems) }
let(:response) { double("response", :body => nil) }

context ".vm_create_snapshot" do
let(:snapshot_options) { { :name => 'name', :memory => false } }
let(:connection) { double("connection", :post_create_snapshot => "post_create_snapshot") }

it 'creates a snapshot' do
expect(connection).to receive(:post_create_snapshot).and_return(response)
expect(connection).to receive(:process_task).and_return(true)

@ems.vm_create_snapshot(vm, snapshot_options)
end
end
end
end

0 comments on commit 1153155

Please sign in to comment.