mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
Allow for network configuration at vm clone time
This commit is contained in:
parent
2afc2a242b
commit
3dfd70fa0e
3 changed files with 262 additions and 29 deletions
|
|
@ -63,6 +63,20 @@ MockDatacenter = Struct.new(
|
|||
end
|
||||
end
|
||||
|
||||
MockNetwork = Struct.new(
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.Network.html
|
||||
# From Network
|
||||
:host, :name, :summary, :vm
|
||||
)
|
||||
|
||||
MockVirtualVmxnet3 = Struct.new(
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.device.VirtualVmxnet.html
|
||||
# From VirtualEthenetCard
|
||||
:addressType,
|
||||
# From VirtualDevice
|
||||
:key, :deviceInfo, :backing, :connectable
|
||||
)
|
||||
|
||||
MockDatastore = Struct.new(
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.Datastore.html
|
||||
# From Datastore
|
||||
|
|
@ -208,6 +222,33 @@ MockDescription = Struct.new(
|
|||
:label, :summary
|
||||
)
|
||||
|
||||
MockVirtualEthernetCardNetworkBackingInfo = Struct.new(
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.device.VirtualEthernetCard.NetworkBackingInfo.html
|
||||
# From VirtualEthernetCardNetworkBackingInfo
|
||||
:network,
|
||||
|
||||
# From VirtualDeviceBackingInfo
|
||||
:deviceName, :useAutoDetect
|
||||
)
|
||||
|
||||
MockVirtualDeviceConnectInfo = Struct.new(
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.device.VirtualDevice.ConnectInfo.html
|
||||
# From VirtualDeviceConnectInfo
|
||||
:allowGuestControl, :connected, :startConnected
|
||||
)
|
||||
|
||||
MockVirtualMachineConfigSpec = Struct.new(
|
||||
# https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.ConfigSpec.html
|
||||
# From VirtualMachineConfigSpec
|
||||
:deviceChange, :annotation, :extraConfig
|
||||
)
|
||||
|
||||
MockVirtualMachineRelocateSpec = Struct.new(
|
||||
# https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.RelocateSpec.html
|
||||
# From VirtualMachineRelocateSpec
|
||||
:datastore, :diskMoveType, :pool
|
||||
)
|
||||
|
||||
MockDynamicProperty = Struct.new(
|
||||
# https://pubs.vmware.com/vsphere-55/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvmodl.DynamicProperty.html
|
||||
# From DynamicProperty
|
||||
|
|
@ -433,6 +474,7 @@ def mock_RbVmomi_VIM_Datacenter(options = {})
|
|||
# Currently don't support mocking datastore tree
|
||||
options[:datastores] = [] if options[:datastores].nil?
|
||||
options[:name] = 'Datacenter' + rand(65536).to_s if options[:name].nil?
|
||||
options[:networks] = [] if options[:networks].nil?
|
||||
|
||||
mock = MockDatacenter.new()
|
||||
|
||||
|
|
@ -440,6 +482,7 @@ def mock_RbVmomi_VIM_Datacenter(options = {})
|
|||
mock.hostFolder = mock_RbVmomi_VIM_Folder({ :name => 'hostFolderRoot'})
|
||||
mock.vmFolder = mock_RbVmomi_VIM_Folder({ :name => 'vmFolderRoot'})
|
||||
mock.datastore = []
|
||||
mock.network = []
|
||||
|
||||
# Create vmFolder hierarchy
|
||||
recurse_folder_tree(options[:vmfolder_tree],mock.vmFolder.childEntity)
|
||||
|
|
@ -453,6 +496,12 @@ def mock_RbVmomi_VIM_Datacenter(options = {})
|
|||
mock.datastore << mock_ds
|
||||
end
|
||||
|
||||
# Create mock Networks
|
||||
options[:networks].each do |networkname|
|
||||
mock_nw = mock_RbVmomi_VIM_Network({ :name => networkname })
|
||||
mock.network << mock_nw
|
||||
end
|
||||
|
||||
allow(mock).to receive(:is_a?) do |expected_type|
|
||||
expected_type == RbVmomi::VIM::Datacenter
|
||||
end
|
||||
|
|
@ -508,6 +557,72 @@ def mock_RbVmomi_VIM_Datastore(options = {})
|
|||
mock
|
||||
end
|
||||
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.Network.html
|
||||
def mock_RbVmomi_VIM_Network(options = {})
|
||||
options[:name] = 'Network' + rand(65536).to_s if options[:name].nil?
|
||||
|
||||
mock = MockNetwork.new()
|
||||
|
||||
mock.name = options[:name]
|
||||
|
||||
allow(mock).to receive(:is_a?) do |expected_type|
|
||||
expected_type == RbVmomi::VIM::Network
|
||||
end
|
||||
|
||||
mock
|
||||
end
|
||||
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk400pubs/ReferenceGuide/vim.vm.device.VirtualVmxnet3.html
|
||||
def mock_RbVmomi_VIM_VirtualVmxnet3(options = {})
|
||||
options[:key] = rand(65536) if options[:key].nil?
|
||||
options[:deviceInfo] = MockDescription.new()
|
||||
options[:backing] = MockVirtualEthernetCardNetworkBackingInfo.new()
|
||||
options[:addressType] = 'assigned'
|
||||
options[:connectable] = MockVirtualDeviceConnectInfo.new()
|
||||
|
||||
mock = MockVirtualVmxnet3.new()
|
||||
|
||||
mock.key = options[:key]
|
||||
mock.deviceInfo = options[:deviceInfo]
|
||||
mock.backing = options[:backing]
|
||||
mock.addressType = options[:addressType]
|
||||
mock.connectable = options[:connectable]
|
||||
|
||||
allow(mock).to receive(:is_a?) do |expected_type|
|
||||
expected_type == RbVmomi::VIM::VirtualVmxnet3
|
||||
end
|
||||
|
||||
mock
|
||||
end
|
||||
|
||||
# https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.RelocateSpec.html
|
||||
def mock_RbVmomi_VIM_VirtualMachineRelocateSpec(options = {})
|
||||
options[:datastore] = 'Datastore' + rand(65536).to_s if options[:datastore].nil?
|
||||
options[:diskMoveType] = :moveChildMostDiskBacking
|
||||
options[:pool] = 'Pool' + rand(65536).to_s if options[:pool].nil?
|
||||
|
||||
mock = MockVirtualMachineRelocateSpec.new
|
||||
|
||||
mock.datastore = mock_RbVmomi_VIM_Datastore({ :name => options[:datastore]})
|
||||
mock.diskMoveType = options[:diskMoveType]
|
||||
mock.pool = mock_RbVmomi_VIM_ResourcePool({:name => options[:pool]})
|
||||
allow(mock).to receive(:is_a?).and_return(RbVmomi::VIM::VirtualMachineRelocateSpec)
|
||||
mock
|
||||
end
|
||||
|
||||
# https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.ConfigSpec.html
|
||||
def mock_RbVmomi_VIM_VirtualMachineConfigSpec(options = {})
|
||||
options[:device] = mock_RbVmomi_VIM_VirtualVmxnet3()
|
||||
|
||||
|
||||
mock = MockVirtualMachineConfigSpec.new
|
||||
|
||||
mock.deviceChange = []
|
||||
mock.deviceChange << { operation: :edit, device: options[:device]}
|
||||
|
||||
mock
|
||||
end
|
||||
|
||||
# https://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.Datastore.html
|
||||
def mock_RbVmomi_VIM_Folder(options = {})
|
||||
options[:name] = 'Folder' + rand(65536).to_s if options[:name].nil?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue