Skip to content

Commit

Permalink
v2v: Add support for driver ISOs
Browse files Browse the repository at this point in the history
  • Loading branch information
matobet committed Jun 5, 2017
1 parent 5a09fa6 commit 1b8b673
Show file tree
Hide file tree
Showing 7 changed files with 202 additions and 36 deletions.
Expand Up @@ -28,6 +28,7 @@ def main
'cluster_id' => @handle.root['dialog_cluster'],
'storage_id' => @handle.root['dialog_storage'],
'sparse' => @handle.root['dialog_sparse'],
'drivers_iso' => @handle.root['dialog_install_drivers'] && @handle.root['dialog_drivers_iso']
},
:user_id => @handle.root['user'].id
}
Expand Down
@@ -0,0 +1,45 @@
module ManageIQ
module Automate
module Infrastructure
module VM
module Transform
module Import
class ListDriverIsos
def initialize(handle = $evm)
@handle = handle
end

def main
values_hash = {}
values_hash[nil] = '-- select provider first --'

provider_id = @handle.root['dialog_provider']
if provider_id.present? && provider_id != '!'
provider = @handle.vmdb(:ext_management_system, provider_id)
unless provider.nil?
values_hash[nil] = '-- select drivers ISO from list --'
provider.iso_datastore.iso_images.pluck(:name).grep(/toolsSetup/).each do |iso|
values_hash[iso] = iso
end
end
end
list_values = {
'sort_by' => :description,
'data_type' => :string,
'required' => true,
'values' => values_hash,
'visible' => @handle.root['dialog_install_drivers']
}
list_values.each { |key, value| @handle.object[key] = value }
end
end
end
end
end
end
end
end

if __FILE__ == $PROGRAM_NAME
ManageIQ::Automate::Infrastructure::VM::Transform::Import::ListDriverIsos.new.main
end
@@ -0,0 +1,12 @@
---
object_type: method
version: 1.0
object:
attributes:
name: list_driver_isos
display_name:
description:
scope: instance
language: ruby
location: inline
inputs: []
@@ -0,0 +1,12 @@
---
object_type: instance
version: 1.0
object:
attributes:
display_name:
name: list_driver_isos
inherits:
description:
fields:
- execute:
value: list_driver_isos
Expand Up @@ -21,10 +21,11 @@ def main
new_ems_ref = provider.submit_import_vm(
@handle.root['user'].userid,
@handle.root['vm'].id,
:name => @handle.root['name'],
:cluster_id => @handle.root['cluster_id'],
:storage_id => @handle.root['storage_id'],
:sparse => @handle.root['sparse']
:name => @handle.root['name'],
:cluster_id => @handle.root['cluster_id'],
:storage_id => @handle.root['storage_id'],
:sparse => @handle.root['sparse'],
:drivers_iso => @handle.root['drivers_iso']
)
@handle.log(:info, "New Ems Ref is #{new_ems_ref}")
@handle.set_state_var('new_ems_ref', new_ems_ref)
Expand Down
Expand Up @@ -7,39 +7,82 @@
let(:svc_model_user) { MiqAeMethodService::MiqAeServiceUser.find(user.id) }
let(:svc_model_vm) { MiqAeMethodService::MiqAeServiceManageIQ_Providers_Vmware_InfraManager_Vm.find(vm.id) }

let(:root_object) do
Spec::Support::MiqAeMockObject.new(
:vm => svc_model_vm,
:user => svc_model_user,
:dialog_name => 'my_vm',
:dialog_provider => 1,
:dialog_cluster => 2,
:dialog_storage => 3,
:dialog_sparse => true
)
let(:root_object) { Spec::Support::MiqAeMockObject.new(root_hash) }
let(:ae_service) { Spec::Support::MiqAeMockService.new(root_object) }

context 'without drivers ISO specified' do
let(:root_hash) do
{
:vm => svc_model_vm,
:user => svc_model_user,
:dialog_name => 'my_vm',
:dialog_provider => 1,
:dialog_cluster => 2,
:dialog_storage => 3,
:dialog_sparse => true
}
end

it 'Executes create_automation_request with correct params' do
exp_options = {
:namespace => 'Infrastructure/VM/Transform/StateMachines',
:class_name => 'VmImport',
:instance_name => 'default',
:message => 'create',
:attrs => {
'Vm::vm' => vm.id,
'name' => 'my_vm',
'provider_id' => 1,
'cluster_id' => 2,
'storage_id' => 3,
'sparse' => true,
'drivers_iso' => nil,
},
:user_id => user.id
}
exp_auto_approve = true
expect(ae_service).to receive(:execute).with('create_automation_request', exp_options, user.userid, exp_auto_approve)

described_class.new(ae_service).main
end
end

let(:ae_service) { Spec::Support::MiqAeMockService.new(root_object) }

it 'Executes create_automation_request with correct params' do
exp_options = {
:namespace => 'Infrastructure/VM/Transform/StateMachines',
:class_name => 'VmImport',
:instance_name => 'default',
:message => 'create',
:attrs => {
'Vm::vm' => vm.id,
'name' => 'my_vm',
'provider_id' => 1,
'cluster_id' => 2,
'storage_id' => 3,
'sparse' => true,
},
:user_id => user.id
}
exp_auto_approve = true
expect(ae_service).to receive(:execute).with('create_automation_request', exp_options, user.userid, exp_auto_approve)

described_class.new(ae_service).main
context 'with drivers ISO specified' do
let(:root_hash) do
{
:vm => svc_model_vm,
:user => svc_model_user,
:dialog_name => 'my_vm',
:dialog_provider => 1,
:dialog_cluster => 2,
:dialog_storage => 3,
:dialog_sparse => true,
:dialog_install_drivers => true,
:dialog_drivers_iso => 'RHEV-toolsSetup_4.1_5.iso'
}
end

it 'Executes create_automation_request with correct params' do
exp_options = {
:namespace => 'Infrastructure/VM/Transform/StateMachines',
:class_name => 'VmImport',
:instance_name => 'default',
:message => 'create',
:attrs => {
'Vm::vm' => vm.id,
'name' => 'my_vm',
'provider_id' => 1,
'cluster_id' => 2,
'storage_id' => 3,
'sparse' => true,
'drivers_iso' => 'RHEV-toolsSetup_4.1_5.iso',
},
:user_id => user.id
}
exp_auto_approve = true
expect(ae_service).to receive(:execute).with('create_automation_request', exp_options, user.userid, exp_auto_approve)

described_class.new(ae_service).main
end
end
end
@@ -0,0 +1,52 @@
require_domain_file

describe ManageIQ::Automate::Infrastructure::VM::Transform::Import::ListDriverIsos do
let!(:iso_datastore) do
iso_images = %w(
RHEV-toolsSetup_3.5_15.iso
RHEV-toolsSetup_4.0_7.iso
random-image.iso
RHEV-toolsSetup_4.1_5.iso
oVirt-toolsSetup-4.0-1.fc24.iso
oVirt-toolsSetup-4.1-3.fc24.iso
another-random-image.iso
oVirt-toolsSetup-4.2-4.fc25.iso
).map { |iso| FactoryGirl.create(:iso_image, :name => iso) }
FactoryGirl.create(:iso_datastore, :iso_images => iso_images)
end
let!(:provider) { FactoryGirl.create(:ems_redhat, :with_clusters, :iso_datastore => iso_datastore) }

let(:root_object) do
Spec::Support::MiqAeMockObject.new(
'dialog_provider' => provider.id.to_s
)
end

let(:ae_service) do
Spec::Support::MiqAeMockService.new(root_object).tap do |service|
current_object = Spec::Support::MiqAeMockObject.new
current_object.parent = root_object
service.object = current_object
end
end

it "should list iso images of selected infra provider's iso datastore" do
described_class.new(ae_service).main

expect(ae_service.object['sort_by']).to eq(:description)
expect(ae_service.object['data_type']).to eq(:string)
expect(ae_service.object['required']).to eq(true)

isos = { nil => '-- select drivers ISO from list --' }
%w(
RHEV-toolsSetup_3.5_15.iso
RHEV-toolsSetup_4.0_7.iso
RHEV-toolsSetup_4.1_5.iso
oVirt-toolsSetup-4.0-1.fc24.iso
oVirt-toolsSetup-4.1-3.fc24.iso
oVirt-toolsSetup-4.2-4.fc25.iso
).each { |iso| isos[iso] = iso }

expect(ae_service.object['values']).to eq(isos)
end
end

0 comments on commit 1b8b673

Please sign in to comment.