Skip to content

Commit 8938cae

Browse files
committed
Set vim_clone_options[:snapshot] to VimString.new()
1 parent 52db0b8 commit 8938cae

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

app/models/manageiq/providers/vmware/infra_manager/provision/cloning.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,18 @@ def start_clone(clone_options)
117117

118118
[:config, :customization, :linked_clone].each { |key| vim_clone_options[key] = clone_options[key] }
119119

120-
[:folder, :host, :pool, :snapshot].each do |key|
120+
[:folder, :host, :pool].each do |key|
121121
ci = clone_options[key]
122122
next if ci.nil?
123+
123124
vim_clone_options[key] = ci.ems_ref_obj
124125
end
125126

127+
if clone_options[:snapshot]
128+
ci = clone_options[:snapshot]
129+
vim_clone_options[:snapshot] = VimString.new(ci.ems_ref, ci.ems_ref_type, :ManagedObjectReference) if ci.ems_ref.present? && ci.ems_ref_type.present?
130+
end
131+
126132
vim_clone_options[:datastore] = datastore_ems_ref(clone_options)
127133
vim_clone_options[:disk] = build_disk_relocate_spec(vim_clone_options[:datastore])
128134
vim_clone_options[:storage_profile] = build_storage_profile(clone_options[:storage_profile]) unless clone_options[:storage_profile].nil?

spec/factories/resource_pool.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FactoryBot.define do
2+
factory :resource_pool_vmware, :class => "ManageIQ::Providers::Vmware::InfraManager::ResourcePool", :parent => :resource_pool do
3+
sequence(:ems_ref) { |n| "resgroups-#{n}" }
4+
ems_ref_type { "ResourcePool" }
5+
end
6+
end

spec/models/manageiq/providers/vmware/infra_manager/provision/cloning_spec.rb

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
describe ManageIQ::Providers::Vmware::InfraManager::Provision::Cloning do
2-
let(:ems) { FactoryBot.create(:ems_vmware_with_authentication) }
2+
let(:zone) { EvmSpecHelper.local_miq_server.zone }
3+
let(:ems) { FactoryBot.create(:ems_vmware_with_authentication, :zone => zone) }
34
let(:user_admin) { FactoryBot.create(:user_admin) }
45
let(:template) { FactoryBot.create(:template_vmware, :name => "template1", :ext_management_system => ems, :cpu_limit => -1, :cpu_reserve => 0) }
56
let(:provision) { FactoryBot.create(:miq_provision_vmware, :userid => user_admin.userid, :miq_request => provision_request, :source => template, :request_type => 'template', :state => 'pending', :status => 'Ok', :options => options) }
@@ -35,4 +36,42 @@
3536
provision.dest_folder
3637
end
3738
end
39+
40+
context "#start_clone" do
41+
let(:folder) { FactoryBot.create(:vmware_folder_vm, :ext_management_system => ems) }
42+
let(:host) { FactoryBot.create(:host_vmware_esx, :ext_management_system => ems, :ems_ref => "host-1") }
43+
let(:pool) { FactoryBot.create(:resource_pool_vmware, :ext_management_system => ems) }
44+
let(:snapshot) { FactoryBot.create(:snapshot, :ems_ref => "snapshot-1", :ems_ref_type => "Snapshot") }
45+
let(:datastore) { FactoryBot.create(:storage_vmware, :ext_management_system => ems) }
46+
47+
let(:clone_options) do
48+
{
49+
:name => "clone test",
50+
:folder => folder,
51+
:host => host,
52+
:pool => pool,
53+
:snapshot => snapshot,
54+
:datastore => datastore
55+
}
56+
end
57+
58+
# Building the disk relocate spec has to connect to the ems so we need to
59+
# stub that out here.
60+
before { allow(provision).to receive(:build_disk_relocate_spec) }
61+
62+
it "converts AR objects to VimTypes" do
63+
expect(provision)
64+
.to receive(:clone_vm)
65+
.with(
66+
hash_including(
67+
:folder => folder.ems_ref_obj,
68+
:host => host.ems_ref_obj,
69+
:pool => pool.ems_ref_obj,
70+
:snapshot => VimString.new(snapshot.ems_ref, snapshot.ems_ref_type, :ManagedObjectReference)
71+
)
72+
)
73+
74+
provision.start_clone(clone_options)
75+
end
76+
end
3877
end

0 commit comments

Comments
 (0)