[Kimchi-devel] [PATCH V4 2/5] Update mockmodel for spice support

Aline Manera alinefm at linux.vnet.ibm.com
Fri Dec 27 13:01:50 UTC 2013


On 12/25/2013 12:51 PM, apporc wrote:
> There is one patch in the mailling list from Markwu, which have
> code about vnc in mockmodel.py removed. But at the time i rebased
> this patch, that patch is not accepted yet, so i have to keep it here,
> so that the test can pass.
>
> See: [project-kimchi] [PATCH 4/4] Remove vnc related code in mockmodel

Thanks for pointing it out, apporc!
I will try to merge Mark's patch first, so we won't need this one.

> Signed-off-by: apporc <appleorchard2000 at gmail.com>
> ---
>   src/kimchi/mockmodel.py | 49 ++++++++++++++++++++++++++++++++++---------------
>   1 file changed, 34 insertions(+), 15 deletions(-)
>
> diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
> index 348127a..66abec8 100644
> --- a/src/kimchi/mockmodel.py
> +++ b/src/kimchi/mockmodel.py
> @@ -51,7 +51,6 @@ from kimchi.exception import InvalidOperation, InvalidParameter
>   from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
>   from kimchi.objectstore import ObjectStore
>   from kimchi.screenshot import VMScreenshot
> -from kimchi.utils import is_digit
>   from kimchi.vmtemplate import VMTemplate
>
>
> @@ -59,19 +58,21 @@ class MockModel(object):
>       def __init__(self, objstore_loc=None):
>           self.reset()
>           self.objstore = ObjectStore(objstore_loc)
> -        self.vnc_port = 5999
>           self.distros = self._get_distros()
>
>           # open vnc port
>           # make it here to make sure it will be available on server startup
> -        cmd = config.find_qemu_binary()
> -        args = [cmd, "-vnc", ":99"]
> -
> -        cmd  = "ps aux | grep '%s' | grep -v grep" % " ".join(args)
> -        proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
> +        qemu = config.find_qemu_binary()
> +        self.vnc_port = 5999
> +        self.spice_port = 5998
> +        vnc_args = [qemu, "-vnc", ":99"]
> +        spice_args = [qemu, "-spice", "port=5998"]
>
> +        cmd = 'netstat -tulnp|egrep "{0}.*qemu|{0}.*kvm"'
> +        for item in [(vnc_args, self.vnc_port), (spice_args, self.spice_port)]:
> +            proc = subprocess.Popen(cmd.format(item[1]), shell=True, stdout=subprocess.PIPE)
>           if len(proc.stdout.readlines()) == 0:
> -            p = subprocess.Popen(args, close_fds=True)
> +            subprocess.Popen(item[0], close_fds=True)
>
>       def get_capabilities(self):
>           return {'libvirt_stream_protocols': ['http', 'https', 'ftp', 'ftps', 'tftp'],
> @@ -121,7 +122,14 @@ class MockModel(object):
>               vm.info['screenshot'] = self.vmscreenshot_lookup(name)
>           else:
>               vm.info['screenshot'] = None
> -        vm.info['graphics']['port'] = self._mock_graphics_ports.get(name, None)
> +        vm.info['graphics']['port'] = self._mock_graphics_ports.get(name)
> +        if vm.info['graphics']['type'] == 'vnc':
> +            vm.info['graphics']['real_port'] = self.vnc_port
> +        elif vm.info['graphics']['type'] == 'spice':
> +            vm.info['graphics']['real_port'] = self.spice_port
> +        else:
> +            vm.info['graphics']['real_port'] = None
> +
>           return vm.info
>
>       def vm_delete(self, name):
> @@ -140,8 +148,12 @@ class MockModel(object):
>           self._get_vm(name).info['state'] = 'shutoff'
>
>       def vm_connect(self, name):
> -        vnc_port = kimchi.vnc.new_ws_proxy(self.vnc_port)
> -        self._mock_graphics_ports[name] = vnc_port
> +        vm_info = self.vm_lookup(name)
> +        if vm_info['grahpics']['type'] == 'vnc':
> +            port = kimchi.vnc.new_ws_proxy(self.vnc_port)
> +        else:
> +            port = kimchi.vnc.new_ws_proxy(self.spice_port)
> +        self._mock_graphics_ports[name] = port
>
>       def vms_create(self, params):
>           t_name = kimchi.model.template_name_from_uri(params['template'])
> @@ -159,8 +171,13 @@ class MockModel(object):
>           t = self._get_template(t_name, vm_overrides)
>           t.validate()
>
> -        vm = MockVM(vm_uuid, name, t.info)
> -        icon = t.info.get('icon')
> +        t_info = copy.deepcopy(t.info)
> +        graphics = params.get('graphics')
> +        if graphics:
> +            t_info.update({'graphics': graphics})
> +
> +        vm = MockVM(vm_uuid, name, t_info)
> +        icon = t_info.get('icon')
>           if icon:
>               vm.info['icon'] = icon
>
> @@ -210,7 +227,6 @@ class MockModel(object):
>
>           new_t.update(params)
>           ident = name
> -
>           new_storagepool = new_t.get(u'storagepool', '')
>           try:
>               self._get_storagepool(kimchi.model.pool_name_from_uri(new_storagepool))
> @@ -628,7 +644,10 @@ class MockVM(object):
>                        'memory': template_info['memory'],
>                        'cpus': template_info['cpus'],
>                        'icon': None,
> -                     'graphics': {'type': 'vnc', 'port': None}}
> +                     'graphics': {'type': 'vnc', 'listen': '0.0.0.0', 'port': None,
> +                                  'real_port': None}
> +                     }
> +        self.info['graphics'].update(template_info['graphics'])
>
>
>   class MockStoragePool(object):




More information about the Kimchi-devel mailing list