Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Deploying a virtual machine interacting directly with thee EIS Virtual ITS Private Cloud RESTful API could somehow be overwhelming due to its multiple resources to check such as networks, folders, disks, etc. In order to simplify the interaction with the API we created a Python Client named pyvss with many self-descriptive methods  and available in the Python Package Index

...

  • name: VMfromPyVss
  • built process: os install
  • billing client department: VSS
  • description: virtual machine created from vss
  • usage: QA
  • cpu and memory: 2 
  • disks: 1GB, 2GB and 3GB
  • networks: any available network in your account
  • folders: any folder available in your account
  • iso: ubuntu 12.04 i386
  • os: ubuntuGuest

...

  • Python 2.7.10+
  • Ptpython
  • Access to the EIS Virtual Cloud RESTful API the ITS Private Cloud API
  • Python client for the EIS Virtual Cloud RESTful the ITS Private Cloud API: pyvss

    Code Block
    pip install pyvss


  • ptpython (optional) - usual python console can be used

    Code Block
    pip install ptpython


  • httpie (optional) - curl or wget can be used as well

    Code Block
    pip install httpie


...

  1. Generate an API access token and save it to tk.json file:

    Code Block
    http POST https://vss-api.eis.utoronto.ca:8001/auth/request-token -a jm > tk.json
    http: password for jm@vss-api.eis.utoronto.ca:8001:


  2. Start ptpython or python console:

    Code Block
    ptpython


  3. Import VssManager and json libraries and load tk.json into a variable
     


    Code Block
    from pyvss.manager import VssManager
    import json 
     
    token = json.load(open('tk.json')) 


  4. Create a VssManager instance with the previously loaded token:
     


    Code Block
    vss = VssManager(tk=token.get('token'))


  5.  Refer to the official docs or use the help built in function to display what parameters are required by the create_vm function:

     


    Code Block
    help(vss.create_vm)


  6. Define the following variables

    Code Block
    name = 'VMfromPyVss'
    built = 'os_install' # it could be either clone or image as well
    bill_deptclient = 'VSS'
    description = 'Virtual machine created from pyVss'
    usage = 'QA' # could be either Prod, Test, QA or Dev
    cpu = 2
    memory = 2 # this value is in GB
    disks = [1, 2, 3]  # three disks of 1GB, 2GB and 3GB


  7. Get target folder, networks, operating system and iso image to mount for the installation

    Code Block
    networks = vss.get_networks(name='1102') # filtering by name
    networks = [{'network': net.get('moref')} for net in networks] # we need only a moref and networks has to be a list
     
    folders = vss.get_folders(name='APIDemo') # filtering by name
    folder = folders[0].get('moref')
    
    isos = vss.get_isos(name='ubuntu') # filtering by name
    iso = isos[0].get('path')
    
    os_list = vss.get_os(name='ubuntu') # filtering by name
    os = os_list[0].get('guestFullName')
     


  8. Create new vm request 

    Code Block
    r = vss.create_vm(name=name, os=os, built=built, bill_dept=bill_deptclient=client, description=description, 
    				  folder=folder, networks=networks, disks=disks, usage=usage, 
    				  cpu=cpu, memoryGB=memory, iso=iso, power_on=True)


  9. We will use wait_for_request function to get new virtual machine Uuid when provisioned:

    Code Block
    uuidvm_id = vss.wait_for_request(r.get('_links').get('request'), 'vm_uuidmoref', 'Processed')


  10. Once you get the uuididget a summary of the VM:

    Code Block
    vm = vss.get_vm(uuidvm_id)
    vm.get('state').get('powerState')
    u'poweredOff'

    Power on VM

    Code Block
    vss.power_on_vm(uuid)

    Validate new VM state:

    Code Block
    vss.get_vm_state(uuid).get('powerState')
    u'poweredOn'


  11. Generate a one-time VM console vSphere client link to start the OS installation

    Code Block
    link = vss.get_vm_console()

AsciiCast

Image Removed

  1. vsphere_link(vm_id)


Filter by label (Content by label)
showLabelsfalse
max5
spacesAPI
showSpacefalse
sortmodified
reversetrue
typepage
cqllabel in ("rest","new","vm","pyvss") and type = "page" and space = "API"
labelspyvss rest vm new

Page Properties
hiddentrue


 
Related issues