[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] The attached patch implements more of the Xen-API functionality related
# HG changeset patch # User Ewan Mellor <ewan@xxxxxxxxxxxxx> # Node ID 913324616183963671b8acaca0c5f233aa5fd70e # Parent 62376b480034a3a53f7c40053bfe34f1723f7f9a The attached patch implements more of the Xen-API functionality related to the vTPM. Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx> --- tools/python/scripts/xapi.domcfg.py | 2 - tools/python/scripts/xapi.py | 33 +++++++++++++++- tools/python/scripts/xapi.vtpmcfg.py | 3 + tools/python/xen/xend/XendAPI.py | 64 +++++++++++++++++++++++++++----- tools/python/xen/xend/XendDomainInfo.py | 16 +++----- 5 files changed, 95 insertions(+), 23 deletions(-) diff -r 62376b480034 -r 913324616183 tools/python/scripts/xapi.domcfg.py --- a/tools/python/scripts/xapi.domcfg.py Thu Nov 09 11:40:28 2006 +0000 +++ b/tools/python/scripts/xapi.domcfg.py Thu Nov 09 15:27:32 2006 +0000 @@ -20,8 +20,6 @@ actions_after_reboot = 'restart' actions_after_reboot = 'restart' actions_after_suspend = 'destroy' actions_after_crash = 'restart' -TPM_instance = '' -TPM_backend = '' bios_boot = '' platform_std_VGA = False platform_serial = '' diff -r 62376b480034 -r 913324616183 tools/python/scripts/xapi.py --- a/tools/python/scripts/xapi.py Thu Nov 09 11:40:28 2006 +0000 +++ b/tools/python/scripts/xapi.py Thu Nov 09 15:27:32 2006 +0000 @@ -42,6 +42,7 @@ COMMANDS = { 'vdi-rename': ('<vdi_uuid> <new_name>', 'Rename VDI'), 'vdi-delete': ('<vdi_uuid>', 'Delete VDI'), 'vif-create': ('<domname> <pycfg>', 'Create VIF attached to domname'), + 'vtpm-create' : ('<domname> <pycfg>', 'Create VTPM attached to domname'), 'vm-create': ('<pycfg>', 'Create VM with python config'), 'vm-destroy': ('<domname>', 'Delete VM'), @@ -208,16 +209,22 @@ def xapi_vm_list(*args): if is_long: vbds = vm_info['vbds'] vifs = vm_info['vifs'] + vtpms = vm_info['vtpms'] vif_infos = [] vbd_infos = [] + vtpm_infos = [] for vbd in vbds: vbd_info = execute(server.VBD.get_record, session, vbd) vbd_infos.append(vbd_info) for vif in vifs: vif_info = execute(server.VIF.get_record, session, vif) vif_infos.append(vif_info) + for vtpm in vtpms: + vtpm_info = execute(server.VTPM.get_record, session, vtpm) + vtpm_infos.append(vtpm_info) vm_info['vbds'] = vbd_infos vm_info['vifs'] = vif_infos + vm_info['vtpms'] = vtpm_infos pprint(vm_info) else: print VM_LIST_FORMAT % _stringify(vm_info) @@ -377,8 +384,30 @@ def xapi_vdi_rename(*args): print 'Renaming VDI %s to %s' % (vdi_uuid, vdi_name) result = execute(server.VDI.set_name_label, session, vdi_uuid, vdi_name) print 'Done.' - - + + +def xapi_vtpm_create(*args): + server, session = _connect() + domname = args[0] + cfg = _read_python_cfg(args[1]) + + vm_uuid = resolve_vm(server, session, domname) + cfg['VM'] = vm_uuid + print "Creating vTPM with cfg = %s" % cfg + vtpm_uuid = execute(server.VTPM.create, session, cfg) + print "Done. (%s)" % vtpm_uuid + vtpm_id = execute(server.VTPM.get_instance, session, vtpm_uuid) + print "Has instance number '%s'" % vtpm_id + vtpm_be = execute(server.VTPM.get_backend, session, vtpm_uuid) + print "Has backend in '%s'" % vtpm_be + driver = execute(server.VTPM.get_driver, session, vtpm_uuid) + print "Has driver type '%s'" % driver + vtpm_rec = execute(server.VTPM.get_record, session, vtpm_uuid) + print "Has vtpm record '%s'" % vtpm_rec + vm = execute(server.VTPM.get_VM, session, vtpm_uuid) + print "Has VM '%s'" % vm + + # # Command Line Utils # diff -r 62376b480034 -r 913324616183 tools/python/xen/xend/XendAPI.py --- a/tools/python/xen/xend/XendAPI.py Thu Nov 09 11:40:28 2006 +0000 +++ b/tools/python/xen/xend/XendAPI.py Thu Nov 09 15:27:32 2006 +0000 @@ -1282,11 +1282,11 @@ class XendAPI: # Xen API: Class VTPM # ---------------------------------------------------------------- - VTPM_attr_ro = [ ] - VTPM_attr_rw = ['type', - 'VM', + VTPM_attr_rw = [ ] + VTPM_attr_ro = ['VM', 'backend', - 'instance'] + 'instance', + 'driver'] VTPM_attr_inst = VTPM_attr_rw @@ -1307,17 +1307,61 @@ class XendAPI: return xen_api_success(cfg) + # Class Functions + def vtpm_get_instance(self, session, vtpm_ref): + xendom = XendDomain.instance() + vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref) + if not vm: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref) + if not cfg: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + if cfg.has_key('instance'): + instance = cfg['instance'] + else: + instance = -1 + return xen_api_success(instance) + + def vtpm_get_driver(self, session, vtpm_ref): + xendom = XendDomain.instance() + vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref) + if not vm: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref) + if not cfg: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + if cfg.has_key('type'): + driver = cfg['type'] + else: + driver = "Unknown" + return xen_api_success(driver) + + def vtpm_get_backend(self, session, vtpm_ref): + xendom = XendDomain.instance() + vm = xendom.get_vm_with_dev_uuid('vtpm', vtpm_ref) + if not vm: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + cfg = vm.get_dev_xenapi_config('vtpm', vtpm_ref) + if not cfg: + return xen_api_error(XEND_ERROR_VTPM_INVALID) + if cfg.has_key('backend'): + backend = cfg['backend'] + else: + backend = "Domain-0" + return xen_api_success(backend) + + def vtpm_get_vm(self, session, vtpm_ref): + xendom = XendDomain.instance() + return xen_api_success(xendom.get_dev_property('vtpm', vtpm_ref, 'VM')) + # class methods def vtpm_create(self, session, vtpm_struct): xendom = XendDomain.instance() if xendom.is_valid_vm(vtpm_struct['VM']): dom = xendom.get_vm_by_uuid(vtpm_struct['VM']) - try: - vtpm_ref = dom.create_vtpm(vtpm_struct) - xendom.managed_config_save(dom) - return xen_api_success(vtpm_ref) - except XendError: - return xen_api_error(XEND_ERROR_TODO) + vtpm_ref = dom.create_vtpm(vtpm_struct) + xendom.managed_config_save(dom) + return xen_api_success(vtpm_ref) else: return xen_api_error(XEND_ERROR_DOMAIN_INVALID) diff -r 62376b480034 -r 913324616183 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Nov 09 11:40:28 2006 +0000 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Nov 09 15:27:32 2006 +0000 @@ -1689,10 +1689,6 @@ class XendDomainInfo: return '' # TODO def get_power_state(self): return XEN_API_VM_POWER_STATE[self.state] - def get_tpm_instance(self): - return '' # TODO - def get_tpm_backend(self): - return '' # TODO def get_bios_boot(self): return '' # TODO def get_platform_std_vga(self): @@ -1833,6 +1829,9 @@ class XendDomainInfo: else: config['mode'] = 'RW' + if dev_class == 'vtpm': + config['driver'] = 'paravirtualised' # TODO + return config def get_dev_property(self, dev_class, dev_uuid, field): @@ -1927,14 +1926,13 @@ class XendDomainInfo: @rtype: string """ + if self.state not in (DOM_STATE_HALTED,): + raise VmError("Can only add vTPM to a halted domain.") + if self.get_vtpms() != []: + raise VmError('Domain already has a vTPM.') dev_uuid = self.info.device_add('vtpm', cfg_xenapi = xenapi_vtpm) if not dev_uuid: raise XendError('Failed to create device') - - if self.state in (DOM_STATE_HALTED,): - sxpr = self.info.device_sxpr(dev_uuid) - devid = self.getDeviceController('vtpm').createDevice(sxpr) - raise XendError("Device creation failed") return dev_uuid diff -r 62376b480034 -r 913324616183 tools/python/scripts/xapi.vtpmcfg.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/python/scripts/xapi.vtpmcfg.py Thu Nov 09 15:27:32 2006 +0000 @@ -0,0 +1,3 @@ +type = 'paravirtualised' +backend = 'Domain-0' +instance = 1 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |