Skip to content

Instantly share code, notes, and snippets.

@st0ne-dot-at
Created April 4, 2014 22:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save st0ne-dot-at/9984414 to your computer and use it in GitHub Desktop.
Save st0ne-dot-at/9984414 to your computer and use it in GitHub Desktop.
switch between default boot order and "cd only" boot on esxi 5.x with pysphere
#!/bin/env python
from pysphere import VIServer, VITask
from pysphere.resources import VimService_services as VI
from pysphere.resources.vi_exception import VIApiException
import sys
import socket
class Specs(object):
@staticmethod
def get_boot_order_spec(empty=False):
# type: VirtualMachineBootOptions
_def = VI.ns0.VirtualMachineBootOptions_Def("boot_options")
boot_options = _def.pyclass()
if empty:
boot_options.set_element_bootOrder([0])
return boot_options
# type: VirtualMachineBootOptionsBootableCdromDevice
_def = VI.ns0.VirtualMachineBootOptionsBootableCdromDevice_Def("cdrom")
cdrom = _def.pyclass()
boot_options.set_element_bootOrder([cdrom])
return boot_options
class Vcenter(object):
def __init__(self, vcenter, username, password):
self.server = VIServer()
self.server.connect(vcenter, username, password)
class VmManager(object):
def __init__(self, vcenter, vmname):
self.vcenter = vcenter
self.vmname = vmname
self.vm = self.vcenter.server.get_vm_by_name(vmname)
def set_boot_cd(self):
self.reconfigure(Specs.get_boot_order_spec())
def set_boot_default(self):
self.reconfigure(Specs.get_boot_order_spec(True))
def reconfigure(self, spec_content, sync=True):
try:
request = VI.ReconfigVM_TaskRequestMsg()
_this = request.new__this(self.vm._mor)
_this.set_attribute_type(self.vm._mor.get_attribute_type())
request.set_element__this(_this)
spec = request.new_spec()
spec.set_element_bootOptions(spec_content)
request.set_element_spec(spec)
task = self.vm._server._proxy.ReconfigVM_Task(request)._returnval
vi_task = VITask(task, self.vm._server)
if sync:
status = vi_task.wait_for_state([vi_task.STATE_SUCCESS,
vi_task.STATE_ERROR])
if status == vi_task.STATE_ERROR:
raise VIException(vi_task.get_error_message(),
FaultTypes.TASK_ERROR)
return
return vi_task
except (VI.ZSI.FaultException), e:
raise VIApiException(e)
if __name__ == '__main__':
from time import sleep
vcenter = Vcenter('vcenter1',
'username',
'supersecure')
vm_manager = VmManager(vcenter,
'SERVER_NAME')
print 'reconfigure cdrom only boot'
vm_manager.set_boot_cd()
sleep(10)
print 'reconfigure default boot'
vm_manager.set_boot_default()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment