Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- require 'rubygems'
- require 'rbvmomi'
- require 'yaml'
- VIM = RbVmomi::VIM
- abort "Usage: make_template.rb vspherehost datacenter host-config-yaml username password" unless ! ARGV.empty?
- vmhost = YAML.load_file(ARGV[2])
- ARGV[2] = vmhost['hostname']
- @vim = VIM.connect(:host => ARGV[0], :user => ARGV[3], :password => ARGV[4], :insecure => true)
- @sc = @vim.serviceContent
- @dc = @vim.serviceInstance.find_datacenter(ARGV[1]) or abort "datacenter not found"
- vm = @dc.vmFolder.traverse(ARGV[2], VIM::VirtualMachine)
- unless vm
- puts "Virtual machine #{ARGV[2]} was not found!"
- exit 1
- end
- puts "Shutting down #{ARGV[2]}"
- begin
- vm.PowerOffVM_Task.wait_for_progress
- rescue RbVmomi::Fault
- puts "#{ARGV[2]} is already powered off"
- end
- sleep 5
- bestds = nil
- @dc.datastore.each do |ds|
- # if (bestds.nil? || bestds.summary[:freeSpace] < ds.summary[:freeSpace])
- # bestds = ds
- # end
- if ds.name == "devcloud-template-ds"
- bestds = ds
- end
- end
- puts "Enabling Memory Hot Add"
- spec = RbVmomi::VIM::VirtualMachineConfigSpec(:memoryHotAddEnabled => true)
- task = vm.ReconfigVM_Task(:spec => spec)
- task.wait_for_completion
- puts "Confirming MAC is set to Assigned"
- nic = vm.config.hardware.device.grep(RbVmomi::VIM::VirtualEthernetCard).find{|n| n.props}
- nic[:addressType] = "Assigned"
- spec = RbVmomi::VIM.VirtualMachineConfigSpec({ :deviceChange => [{ :operation => :edit, :device => nic }] })
- vm.ReconfigVM_Task(:spec => spec).wait_for_completion
- puts "Thin provisioning and moving #{ARGV[2]} to datastore with largest space (#{bestds.name})"
- task = vm.RelocateVM_Task(spec: VIM.VirtualMachineRelocateSpec(:datastore => bestds, :transform => "sparse"))
- task.wait_for_completion
- puts "Marking #{ARGV[2]} as template"
- begin
- vm.MarkAsTemplate
- rescue
- puts "#{ARGV[2]} is already a template"
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement