def vm_action(): payload = request.get_json() logging.debug(payload) field = {'hostIp', 'hostUser', 'hostPass', 'vmName', 'vmAction'} if field - set(payload.keys()): error_msg = "Input json missing some field! " + "It must include " + str( field) logging.error(error_msg) return jsonify({"error": error_msg}), 400 else: action = payload['vmAction'] try: vm = VM(payload['hostIp'], payload['hostUser'], payload['hostPass'], payload['vmName']) if action == 'create': vm.vcpus = payload['vmVcpus'] vm.memory = payload['vmMemory'] vm.disk = payload['vmDisk'] vm.os_type = payload['vmType'] # optional params if "rootPass" in payload.keys() and payload['rootPass']: vm.root_pass = payload['rootPass'] if "vncPass" in payload.keys() and payload['vncPass']: vm.vnc_pass = payload['vncPass'] if "vmHostname" in payload.keys() and payload['vmHostname']: vm.hostname = payload['vmHostname'] else: vm.hostname = payload['vmName'] logging.info("VM creating") vm.create() logging.info("VM created") elif action == 'start': vm.start() elif action == 'shutdown': vm.shutdown() elif action == 'reboot': vm.reboot() elif action == 'delete': vm.delete() else: error_msg = "give vmAction: {} not support".format(action) return jsonify({"error": error_msg}), 400 except Exception as e: logging.error(str(e)) return jsonify({"error": str(e)}), 500 return jsonify(""), 202
from vm import VM from pif import get_network, get_public_pif XENAPI_URL = 'http://65.183.54.10' IMAGE_PATH = '/Users/jarrod/Dev/ipcloud/ubuntu.10-04.x86-64.20100927.img.gz' import XenAPI session = XenAPI.Session('https://65.183.54.10/') session.login_with_password('root', '') xenapi = session.xenapi i = Instance(name='Ubuntu 10.04', instance_type='level2') v = VM(session) vm_ref = v.create(i, '', '') print "vm_ref - %s" % vm_ref di = VDI(session) vdi_ref = di.create('%s-vdi' % i._name, i._storage_gb) print "vdi_ref - %s" % vdi_ref # This is where the img should be attached to disk? c = pycurl.Curl() c.setopt(c.POST, True) c.setopt(c.ENCODING, 'gzip') c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC) c.setopt(c.USERPWD, "%s:%s" % ('root', '')) c.setopt(c.URL, "%s/import_raw_vdi?vdi=%s" % (XENAPI_URL, vdi_ref)) c.setopt(c.HTTPPOST, [ ("filename", (c.FORM_FILE, IMAGE_PATH)), ])
from vm import VM from pif import get_network, get_public_pif XENAPI_URL = 'http://65.183.54.10' IMAGE_PATH = '/Users/jarrod/Dev/ipcloud/ubuntu.10-04.x86-64.20100927.img.gz' import XenAPI session = XenAPI.Session('https://65.183.54.10/') session.login_with_password('root','') xenapi = session.xenapi i = Instance(name='Ubuntu 10.04', instance_type='level2') v = VM(session) vm_ref = v.create(i, '', '') print "vm_ref - %s" % vm_ref di = VDI(session) vdi_ref = di.create('%s-vdi' % i._name, i._storage_gb) print "vdi_ref - %s" % vdi_ref # This is where the img should be attached to disk? c = pycurl.Curl() c.setopt(c.POST, True) c.setopt(c.ENCODING, 'gzip') c.setopt(c.HTTPAUTH, c.HTTPAUTH_BASIC) c.setopt(c.USERPWD, "%s:%s" % ('root', '')) c.setopt(c.URL, "%s/import_raw_vdi?vdi=%s" % (XENAPI_URL, vdi_ref)) c.setopt(c.HTTPPOST, [ ("filename", (c.FORM_FILE, IMAGE_PATH)), ] )