[Kimchi-devel] [PATCH] Setup VM's input and output template for Power systems.

Aline Manera alinefm at linux.vnet.ibm.com
Mon Feb 17 12:26:54 UTC 2014


On 02/15/2014 08:29 PM, Paulo Ricardo Paz Vital wrote:
> Hello Aline,
>
> On Fri, 2014-02-14 at 16:47 -0200, Aline Manera wrote:
>> On 02/14/2014 02:05 PM, Paulo Vital wrote:
>>> Setup the bus for keyboard and mouse to 'usb' by default and prevent the
>>> sound configuration to be added for new Power guests.
>>>
>>> Signed-off-by: Paulo Vital <pvital at linux.vnet.ibm.com>
>>> ---
>>>    src/kimchi/osinfo.py     | 13 ++++++++-----
>>>    src/kimchi/vmtemplate.py | 23 ++++++++++++++++++++++-
>>>    2 files changed, 30 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/src/kimchi/osinfo.py b/src/kimchi/osinfo.py
>>> index f92db3d..eff8070 100644
>>> --- a/src/kimchi/osinfo.py
>>> +++ b/src/kimchi/osinfo.py
>>> @@ -32,21 +32,24 @@ SUPPORTED_ARCHS = {'x86': ('i386', 'x86_64'), 'power': ('ppc', 'ppc64')}
>>>
>>>    common_spec = {'cpus': 1, 'cpu_cores': 1, 'cpu_threads': 1, 'memory': 1024,
>>>                   'disks': [{'index': 0, 'size': 10}], 'cdrom_bus': 'ide',
>>> -               'cdrom_index': 2}
>>> +               'cdrom_index': 2, 'mouse_bus': 'ps2'}
>>>
>>>
>>>    modern_spec = dict(common_spec, disk_bus='virtio', nic_model='virtio')
>>>
>>>
>>>    template_specs = {'x86': {'old': dict(common_spec, disk_bus='ide',
>>> -                                      nic_model='e1000'),
>>> +                                      nic_model='e1000', sound_model= 'ich6'),
>>>                              'modern': dict(common_spec, disk_bus='virtio',
>>> -                                         nic_model='virtio')},
>>> +                                         nic_model='virtio',
>>> +                                         sound_model= 'ich6')},
>>>                      'power': {'old': dict(common_spec, disk_bus='scsi',
>>> -                                        nic_model='rtl8139', cdrom_bus='scsi'),
>>> +                                        nic_model='rtl8139', cdrom_bus='scsi',
>>> +                                        kbd_bus='usb', mouse_bus='usb'),
>>>                                'modern': dict(common_spec, disk_bus='virtio',
>>>                                               nic_model='virtio',
>>> -                                           cdrom_bus='scsi')}}
>>> +                                           cdrom_bus='scsi', kbd_bus='usb',
>>> +                                           mouse_bus='usb')}}
>>>
>>>
>>>    modern_version_bases = {'debian': '6.0', 'ubuntu': '7.10', 'opensuse': '10.3',
>>> diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
>>> index 999473c..de52f40 100644
>>> --- a/src/kimchi/vmtemplate.py
>>> +++ b/src/kimchi/vmtemplate.py
>>> @@ -241,11 +241,32 @@ class VMTemplate(object):
>>>                networks += network % net_info
>>>            return networks
>>>
>>> +    def _get_input_output_xml(self):
>>> +        sound = """
>>> +            <sound model='%(sound_model)s' />
>>> +        """
>>> +        mouse = """
>>> +            <input type='mouse' bus='%(mouse_bus)s'/>
>>> +        """
>>> +        keyboard = """
>>> +            <input type='kbd' bus='%(kbd_bus)s'> </input>
>>> +        """
>>> +
>>> +        input_output = ""
>>> +        if 'mouse_bus' in self.info.keys():
>>> +            input_output += mouse % self.info
>>> +        if 'kbd_bus' in self.info.keys():
>>> +            input_output += keyboard % self.info
>>> +        if 'sound_model' in self.info.keys():
>>> +            input_output += sound % self.info
>>> +        return input_output
>>> +
>> As you add the default values in osinfo.py all templates will have those
>> information
>> So you don't need this function. You can add it directly on vm xml. Look
>> below
>>
>>
>>>        def to_vm_xml(self, vm_name, vm_uuid, **kwargs):
>>>            params = dict(self.info)
>>>            params['name'] = vm_name
>>>            params['uuid'] = vm_uuid
>>>            params['networks'] = self._get_networks_xml()
>>> +        params['input_output'] = self._get_input_output_xml()
>>>            params['qemu-namespace'] = ''
>>>            params['cdroms'] = ''
>>>            params['qemu-stream-cmdline'] = ''
>>> @@ -294,7 +315,7 @@ class VMTemplate(object):
>>>                %(cdroms)s
>>>                %(networks)s
>>>                %(graphics)s
>>> -            <sound model='ich6' />
>>> +            %(input_output)s
>> Instead of it, add:
>>
>>
>>       <sound model='%(sound_model)s' />
>>       <input type='mouse' bus='%(mouse_bus)s'/>
>>       <input type='kbd' bus='%(kbd_bus)s'> </input>
>>
>> This xml is already fill up with template.info() data.
>>
>>
> I completely agree with you about that, and my first implementation and
> tests was pretty close to your suggestion, but I have some important
> points to explain:
>
> 1) Power systems don't have sound supporyt, so the usage of
> <sound model='%(sound_model)s' />
> directly in XML will not work. If you look better to the diff in
> template_specs on osinfo.py, you can see that only the dictionaries for
> x86_64 have the sound_model set up as parameter.
>
> 2) During my tests on x86_64, the usage of keyboard (kbd) line didn't
> work on guests - the keyboard didn't work. I did all test on Fedora 19
> and RHEL6.5 as hosts, creating Fedora 20 and Debian 7 guests (via VNC
> and Spice). However, Power systems need this line to enable keyboard in
> the guests.
>
> So, in the end of this story, for Power systems we need in XML:
>
>       <input type='mouse' bus='usb'/>
>       <input type='kbd' bus='usb'> </input>
>
> , and for x86_64:
>
>       <sound model='ich6' />
>       <input type='mouse' bus='ps2'/>
>
> Once the set of parameters expected are different between Power and
> x86_64, the best solution I found was create a method to check the
> template.info() parameters and fill only that necessary to each
> architecture.
>
> I still maintain my implementation suggestion as fix to solve the
> template differences between these architectures.

Got it.
Thanks for the explanation.

Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>

>>>                <memballoon model='virtio' />
>>>              </devices>
>>>            </domain>
> Best regards,
> Paulo Vital.
>




More information about the Kimchi-devel mailing list