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
...
Generate an API access token and save it to tk.json file:
Code Block http POST https://vss-api.eis.utoronto.ca/auth/request-token -a jm > tk.json http: password for jm@vss-api.eis.utoronto.ca:
Start ptpython or python console:
Code Block ptpython
- 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'))
- Create a VssManager instance with the previously loaded token:
Code Block vss = VssManager(tk=token.get('token'))
- 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)
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
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')
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)
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')
Once you get the uuidid, get 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'
Generate a one-time VM console vSphere client link to start the OS installation
Code Block link = vss.get_vm_console(vsphere_link(vm_id)
AsciiCast
Related articles
Filter by label (Content by label) | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Page Properties | |||
---|---|---|---|
| |||
|