Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'rbvmomi'
- require 'pry'
- require 'json'
- # Initiate connection to vSphere
- vim = RbVmomi::VIM.connect host:'REDACTED', user:'REDACTED', password:'REDACTED'
- dc = vim.serviceInstance.find_datacenter or fail "datacenter not found"
- # What should it look like?
- template_object = dc.find_vm('/eng/templates/centos-6-x86_64')
- targetfolder = dc.vmFolder.children.first.children.find { |folder| folder.name == 'zee@puppetlabs.com' }
- vm = {
- name: 'zeetest2',
- created_by: 'pizzamaster5000',
- template: template_object,
- targetfolder: targetfolder,
- }
- #Create a config spec, e.g. what should it look like.
- configSpec = RbVmomi::VIM.VirtualMachineConfigSpec(
- annotation: JSON.pretty_generate(
- name: vm[:hostname],
- created_by: vm[:created_by],
- base_template: vm[:template],
- creation_timestamp: Time.now.utc
- ),
- )
- # Create a relocate spec to tell the VM where to go.
- relocateSpec = RbVmomi::VIM.VirtualMachineRelocateSpec(
- datastore: dc.find_datastore('general2'),
- diskMoveType: :moveChildMostDiskBacking,
- pool: dc.find_vm('/eng/zee@puppetlabs.com/zeetest1').resourcePool,
- )
- # host: dc.hostFolder.children.first.host.first, #object representing current vsphere host
- # Option for above spec
- # Create a clone spec to actully perform the operation.
- cloneSpec = RbVmomi::VIM.VirtualMachineCloneSpec(
- location: relocateSpec,
- config: configSpec, # Note config spec is used here.
- powerOn: true,
- template: false
- # host: dc.hostFolder.children.first.host.first, #object representing current vsphere host
- )
- vm[:template].CloneVM_Task(
- folder: vm[:targetfolder],
- name: vm[:name],
- spec: cloneSpec,
- ).wait_for_completion
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement