コード例 #1
0
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
コード例 #2
0
ファイル: test.py プロジェクト: jarrodb/ipcloud
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)),
])
コード例 #3
0
ファイル: test.py プロジェクト: jarrodb/ipcloud
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)),
    ] )