diff options
| author | Salvatore Orlando <salvatore.orlando@eu.citrix.com> | 2011-01-10 18:26:40 +0000 |
|---|---|---|
| committer | Salvatore Orlando <salvatore.orlando@eu.citrix.com> | 2011-01-10 18:26:40 +0000 |
| commit | 97ff39bd1d83f3cfa412f291087e025a91d147cd (patch) | |
| tree | a785d75de80662fe4da0fc04dfee08c2dad3512e /plugins | |
| parent | ed84e51475471c5ae37eacdd4d5c93ef91ebcf10 (diff) | |
| download | nova-97ff39bd1d83f3cfa412f291087e025a91d147cd.tar.gz nova-97ff39bd1d83f3cfa412f291087e025a91d147cd.tar.xz nova-97ff39bd1d83f3cfa412f291087e025a91d147cd.zip | |
Can now correctly launch images with external kernels through glance.
Further tests and Pep8 fixes to come.
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/xenserver/xenapi/etc/xapi.d/plugins/glance | 30 | ||||
| -rwxr-xr-x | plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py | 4 |
2 files changed, 31 insertions, 3 deletions
diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance index 5e648b970..7f0b375e1 100644 --- a/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance +++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance @@ -40,8 +40,35 @@ from pluginlib_nova import * configure_logging('glance') CHUNK_SIZE = 8192 +KERNEL_DIR = '/boot/guest' FILE_SR_PATH = '/var/run/sr-mount' +def copy_kernel_vdi(session,args): + vdi = exists(args, 'vdi-ref') + size = exists(args,'image-size') + #Use the uuid as a filename + vdi_uuid=session.xenapi.VDI.get_uuid(vdi) + copy_args={'vdi_uuid':vdi_uuid,'vdi_size':int(size)} + filename=with_vdi_in_dom0(session, vdi, False, + lambda dev: + _copy_kernel_vdi('/dev/%s' % dev,copy_args)) + return filename + +def _copy_kernel_vdi(dest,copy_args): + vdi_uuid=copy_args['vdi_uuid'] + vdi_size=copy_args['vdi_size'] + logging.debug("copying kernel/ramdisk file from %s to /boot/guest/%s",dest,vdi_uuid) + filename=KERNEL_DIR + '/' + vdi_uuid + #read data from /dev/ and write into a file on /boot/guest + of=open(filename,'wb') + f=open(dest,'rb') + data=f.read(vdi_size) + of.write(data) + f.close() + of.close() + logging.debug("Done. Filename: %s",filename) + return filename + def put_vdis(session, args): params = pickle.loads(exists(args, 'params')) vdi_uuids = params["vdi_uuids"] @@ -129,4 +156,5 @@ def find_sr(session): if __name__ == '__main__': - XenAPIPlugin.dispatch({'put_vdis': put_vdis}) + XenAPIPlugin.dispatch({'put_vdis': put_vdis, + 'copy_kernel_vdi': copy_kernel_vdi}) diff --git a/plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py b/plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py index 8e7a829d5..17fcd474e 100755 --- a/plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py +++ b/plugins/xenserver/xenapi/etc/xapi.d/plugins/pluginlib_nova.py @@ -154,7 +154,7 @@ def create_vdi(session, sr_ref, name_label, virtual_size, read_only): return vdi_ref -def with_vdi_in_dom0(session, vdi, read_only, f): +def with_vdi_in_dom0(session, vdi, read_only, f,args=None): dom0 = get_domain_0(session) vbd_rec = {} vbd_rec['VM'] = dom0 @@ -176,7 +176,7 @@ def with_vdi_in_dom0(session, vdi, read_only, f): logging.debug('Plugging VBD %s ... ', vbd) session.xenapi.VBD.plug(vbd) logging.debug('Plugging VBD %s done.', vbd) - return f(session.xenapi.VBD.get_device(vbd)) + return f(session.xenapi.VBD.get_device(vbd),args) finally: logging.debug('Destroying VBD for VDI %s ... ', vdi) vbd_unplug_with_retry(session, vbd) |
