[ovirt-devel] vdsm spec file rpmlint

Nir Soffer nsoffer at redhat.com
Wed Oct 25 12:21:56 UTC 2017


On Wed, Oct 25, 2017 at 9:33 AM Sandro Bonazzola <sbonazzo at redhat.com>
wrote:

> 2017-10-20 20:05 GMT+02:00 Yaniv Kaul <ykaul at redhat.com>:
>
>>
>>
>> On Fri, Oct 20, 2017 at 7:56 PM, Nir Soffer <nsoffer at redhat.com> wrote:
>>
>>> On Fri, Oct 20, 2017 at 11:37 AM Sandro Bonazzola <sbonazzo at redhat.com>
>>> wrote:
>>>
>>>> Just an heads up we have improvement margin on vdsm spec file quality.
>>>>
>>>> [sbonazzo at sbonazzo SPECS]$ rpmlint ./vdsm.spec
>>>> /var/lib/mock/epel-7-x86_64/result/*rpm
>>>> vdsm.x86_64: E: explicit-lib-dependency libnl3
>>>>
>>>
>>> What is wrong with this?
>>>
>>>
>>>> vdsm.x86_64: E: explicit-lib-dependency libvirt-client
>>>> vdsm.x86_64: E: explicit-lib-dependency libvirt-daemon-config-nwfilter
>>>> vdsm.x86_64: E: explicit-lib-dependency libvirt-lock-sanlock
>>>> vdsm.x86_64: W: obsolete-not-provided vdsm-infra
>>>> vdsm.x86_64: E: no-binary
>>>>
>>>
>>> Ha?
>>>
>>
> The package should be of the noarch architecture because it doesn't contain
> any binaries.
>

Vdsm has many arch specific requirements, and we have different requirements
on different platforms. Having a arch specific meta package was the solution
suggested by Fedora reviewers about 2 years ago.


>
>
>
>>
>>>
>>>> vdsm.x86_64: W: conffile-without-noreplace-flag /var/log/vdsm/mom.log
>>>>
>>>
>>> This is not a conf file, we should probably change this
>>>
>>>
>>>> vdsm.x86_64: W: conffile-without-noreplace-flag
>>>> /var/log/vdsm/supervdsm.log
>>>> vdsm.x86_64: W: conffile-without-noreplace-flag /var/log/vdsm/vdsm.log
>>>> vdsm.x86_64: W: non-conffile-in-etc /etc/NetworkManager/conf.d/vdsm.conf
>>>>
>>>
>>> Ha?
>>>
>>
>> Perhaps:
>> %{_sysconfdir}/NetworkManager/conf.d/vdsm.conf
>>
>> should be:
>> %config(noreplace) %{_sysconfdir}/NetworkManager/conf.d/vdsm.conf
>>
>>
>>
>>>
>>>> vdsm.x86_64: W: non-conffile-in-etc
>>>> /etc/modprobe.d/vdsm-bonding-modprobe.conf
>>>> vdsm.x86_64: E: non-readable /etc/pki/vdsm/keys/libvirt_password 600
>>>> vdsm.x86_64: W: non-conffile-in-etc /etc/security/limits.d/99-vdsm.conf
>>>>
>>>
>>> Ha?
>>>
>>
>> Same?
>>
>>
>>>
>>>
>>>> vdsm.x86_64: W: non-conffile-in-etc /etc/sudoers.d/50_vdsm
>>>> vdsm.x86_64: W: systemd-unit-in-etc
>>>> /etc/systemd/system/libvirtd.service.d/unlimited-core.conf
>>>> vdsm.x86_64: W: non-conffile-in-etc
>>>> /etc/systemd/system/libvirtd.service.d/unlimited-core.conf
>>>> vdsm.x86_64: E: zero-length /etc/vdsm/mom.d/01-parameters.policy
>>>> vdsm.x86_64: E: wrong-script-interpreter /usr/libexec/vdsm/kvm2ovirt
>>>> /usr/bin/env python
>>>>
>>>
>>> This used to be the recommended way to write scripts, but it is easy to
>>> replace with /usr/bin/python2.
>>>
>>
> It should be /usr/bin/python since python is under "alternatives"
> management
>

But most of the code is python2 only - we recently update (most) scripts to
use
/usr/bin/python2.


>
>
>
>>
>>>
>>>> vdsm.x86_64: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/vm_migrate_hook.py /usr/bin/env python
>>>> vdsm.x86_64: E: wrong-script-interpreter
>>>> /usr/share/vdsm/virt/vm_migrate_hook.py /usr/bin/env python
>>>> vdsm.x86_64: E: non-executable-script
>>>> /usr/share/vdsm/virt/vm_migrate_hook.py 644 /usr/bin/env python
>>>> vdsm.x86_64: E: non-standard-dir-perm /var/lib/libvirt/qemu/channels 775
>>>> vdsm.x86_64: E: non-standard-dir-perm /var/log/core 1777
>>>> vdsm.x86_64: E: dir-or-file-in-var-run /var/run/vdsm
>>>>
>>>
>>> What is wrong with this?
>>>
>>
>> "/var/run may be a temporary filesystem, so any directories or files
>> needed there must be created dynamically at boot time."
>>
>
We create these directories in runtime, not sure why we create them also
during instillation.


>
>> Y.
>>
>>>
>>>
>>>> vdsm.x86_64: E: dir-or-file-in-var-run /var/run/vdsm/payload
>>>> vdsm.x86_64: E: dir-or-file-in-var-run /var/run/vdsm/sourceRoutes
>>>> vdsm.x86_64: E: dir-or-file-in-var-run /var/run/vdsm/trackedInterfaces
>>>> vdsm.x86_64: E: dir-or-file-in-var-run /var/run/vdsm/v2v
>>>> vdsm.x86_64: W: log-files-without-logrotate ['/var/log/core',
>>>> '/var/log/vdsm']
>>>>
>>>
>>> We have logrotate configuration for vdsm, but we don't use the standard
>>> configuration since we need more frequent rotation.
>>>
>>
>>>
>>>> vdsm.x86_64: W: dangerous-command-in-%pre rpm
>>>> vdsm.x86_64: W: dangerous-command-in-%post chmod
>>>> vdsm-api.noarch: E: wrong-script-interpreter
>>>> /usr/lib/python2.7/site-packages/vdsm/api/vdsmapi.py /usr/bin/env python
>>>> vdsm-api.noarch: E: non-executable-script
>>>> /usr/lib/python2.7/site-packages/vdsm/api/vdsmapi.py 644 /usr/bin/env python
>>>> vdsm-cli.noarch: W: non-conffile-in-etc /etc/bash_completion.d/vdsClient
>>>> vdsm-gluster.noarch: W: spelling-error %description -l en_US
>>>> functionalities -> functionalists, functionality, functionalist
>>>> vdsm-gluster.noarch: W: no-documentation
>>>> vdsm-hook-allocate_net.noarch: W: summary-not-capitalized C
>>>> random_network allocation hook for VDSM
>>>> vdsm-hook-allocate_net.noarch: W: spelling-error %description -l en_US
>>>> vms -> vs, ms, ems
>>>> vdsm-hook-allocate_net.noarch: W: no-documentation
>>>> vdsm-hook-allocate_net.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_device_create/10_allocate_net /usr/bin/env
>>>> python
>>>> vdsm-hook-checkimages.noarch: W: no-documentation
>>>> vdsm-hook-checkips.x86_64: W: no-documentation
>>>> vdsm-hook-checkips.x86_64: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/after_get_stats/10_checkips /usr/bin/env python
>>>> vdsm-hook-checkips.x86_64: E: non-executable-script
>>>> /usr/libexec/vdsm/hooks/after_get_stats/checkips_utils.py 644
>>>> /usr/bin/python2
>>>> vdsm-hook-diskunmap.noarch: W: spelling-error Summary(en_US) lun ->
>>>> loon, lung, sun
>>>> vdsm-hook-diskunmap.noarch: W: no-documentation
>>>> vdsm-hook-diskunmap.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_vm_start/50_diskunmap /usr/bin/env python2
>>>> vdsm-hook-ethtool-options.noarch: W: spelling-error Summary(en_US) nics
>>>> -> incs, mics, nicks
>>>> vdsm-hook-ethtool-options.noarch: W: spelling-error %description -l
>>>> en_US nics -> incs, mics, nicks
>>>> vdsm-hook-ethtool-options.noarch: W: no-documentation
>>>> vdsm-hook-ethtool-options.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/after_network_setup/30_ethtool_options /usr/bin/env
>>>> python
>>>> vdsm-hook-extnet.noarch: W: spelling-error Summary(en_US) vNIC -> Venice
>>>> vdsm-hook-extnet.noarch: W: spelling-error Summary(en_US) libvirt ->
>>>> liberty, ovirt
>>>> vdsm-hook-extnet.noarch: W: spelling-error %description -l en_US vNIC
>>>> -> Venice
>>>> vdsm-hook-extnet.noarch: W: spelling-error %description -l en_US
>>>> libvirt -> liberty, ovirt
>>>> vdsm-hook-extnet.noarch: W: spelling-error %description -l en_US
>>>> openvswitch -> switchboard
>>>> vdsm-hook-extnet.noarch: W: no-documentation
>>>> vdsm-hook-extra-ipv4-addrs.x86_64: W: summary-ended-with-dot C Set
>>>> extra ipv4 addresses for vdsm networks.
>>>> vdsm-hook-extra-ipv4-addrs.x86_64: W: no-documentation
>>>> vdsm-hook-extra-ipv4-addrs.x86_64: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/after_network_setup/40_extra_ipv4_addrs
>>>> /usr/bin/env python
>>>> vdsm-hook-fakesriov.x86_64: W: spelling-error %description -l en_US
>>>> hostdevListByCaps
>>>> vdsm-hook-fakesriov.x86_64: W: spelling-error %description -l en_US
>>>> sriov -> Rios
>>>> vdsm-hook-fakesriov.x86_64: W: spelling-error %description -l en_US
>>>> conf -> con, cone, cons
>>>> vdsm-hook-fakesriov.x86_64: W: no-documentation
>>>> vdsm-hook-fakevmstats.noarch: W: spelling-error %description -l en_US
>>>> vmstats -> stats
>>>> vdsm-hook-fakevmstats.noarch: W: spelling-error %description -l en_US
>>>> conf -> con, cone, cons
>>>> vdsm-hook-fakevmstats.noarch: W: no-documentation
>>>> vdsm-hook-faqemu.noarch: W: spelling-error Summary(en_US) qemu -> emu,
>>>> q emu
>>>> vdsm-hook-faqemu.noarch: W: spelling-error %description -l en_US kvm ->
>>>> km
>>>> vdsm-hook-faqemu.noarch: W: spelling-error %description -l en_US conf
>>>> -> con, cone, cons
>>>> vdsm-hook-faqemu.noarch: W: no-documentation
>>>> vdsm-hook-fcoe.noarch: W: no-documentation
>>>> vdsm-hook-fcoe.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_network_setup/50_fcoe /bin/env python
>>>> vdsm-hook-fileinject.noarch: W: no-documentation
>>>> vdsm-hook-floppy.noarch: W: no-documentation
>>>> vdsm-hook-hostusb.noarch: W: no-documentation
>>>> vdsm-hook-hostusb.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_hostusb 440
>>>> vdsm-hook-hostusb.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_hostusb
>>>> vdsm-hook-httpsisoboot.noarch: W: spelling-error Summary(en_US) https
>>>> -> HTTP
>>>> vdsm-hook-httpsisoboot.noarch: W: spelling-error %description -l en_US
>>>> https -> HTTP
>>>> vdsm-hook-httpsisoboot.noarch: W: spelling-error %description -l en_US
>>>> http -> HTTP
>>>> vdsm-hook-httpsisoboot.noarch: W: no-documentation
>>>> vdsm-hook-hugepages.noarch: W: summary-ended-with-dot C Huge pages
>>>> enable user to handle VM with 2048KB page files.
>>>> vdsm-hook-hugepages.noarch: W: no-documentation
>>>> vdsm-hook-hugepages.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_hugepages 440
>>>> vdsm-hook-hugepages.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_hugepages
>>>> vdsm-hook-ipv6.noarch: W: no-documentation
>>>> vdsm-hook-ipv6.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_network_setup/50_ipv6 /usr/bin/env python2
>>>> vdsm-hook-isolatedprivatevlan.noarch: W: spelling-error %description -l
>>>> en_US ip -> pi, up, op
>>>> vdsm-hook-isolatedprivatevlan.noarch: W: spelling-error %description -l
>>>> en_US filterref -> filter ref, filter-ref, filterer
>>>> vdsm-hook-isolatedprivatevlan.noarch: W: spelling-error %description -l
>>>> en_US xml -> XML, ml, x ml
>>>> vdsm-hook-isolatedprivatevlan.noarch: W: no-documentation
>>>> vdsm-hook-isolatedprivatevlan.noarch: E:
>>>> executable-marked-as-config-file
>>>> /etc/libvirt/nwfilter/isolatedprivatevlan-vdsm.xml
>>>> vdsm-hook-isolatedprivatevlan.noarch: E: script-without-shebang
>>>> /etc/libvirt/nwfilter/isolatedprivatevlan-vdsm.xml
>>>> vdsm-hook-localdisk.noarch: W: spelling-error %description -l en_US lvm
>>>> -> lvi, lam, Lvov
>>>> vdsm-hook-localdisk.noarch: W: only-non-binary-in-usr-lib
>>>> vdsm-hook-localdisk.noarch: W: no-documentation
>>>> vdsm-hook-localdisk.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_localdisk 440
>>>> vdsm-hook-localdisk.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_localdisk
>>>> vdsm-hook-macbind.noarch: W: spelling-error Summary(en_US) vNIC ->
>>>> Venice
>>>> vdsm-hook-macbind.noarch: W: spelling-error %description -l en_US vNIC
>>>> -> Venice
>>>> vdsm-hook-macbind.noarch: W: no-documentation
>>>> vdsm-hook-macbind.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_vm_start/50_macbind /usr/bin/env python2
>>>> vdsm-hook-macspoof.noarch: W: spelling-error %description -l en_US
>>>> vnics -> conics
>>>> vdsm-hook-macspoof.noarch: W: no-documentation
>>>> vdsm-hook-nestedvt.noarch: W: spelling-error %description -l en_US
>>>> virtualization -> visualization, actualization, vitalization
>>>> vdsm-hook-nestedvt.noarch: W: spelling-error %description -l en_US kvm
>>>> -> km
>>>> vdsm-hook-nestedvt.noarch: W: no-documentation
>>>> vdsm-hook-nestedvt.noarch: W: non-conffile-in-etc
>>>> /etc/modprobe.d/vdsm-nestedvt.conf
>>>> vdsm-hook-noipspoof.noarch: W: no-documentation
>>>> vdsm-hook-numa.noarch: W: spelling-error %description -l en_US xml ->
>>>> XML, ml, x ml
>>>> vdsm-hook-numa.noarch: W: no-documentation
>>>> vdsm-hook-openstacknet.noarch: W: spelling-error Summary(en_US) vNICs
>>>> -> conics
>>>> vdsm-hook-openstacknet.noarch: W: spelling-error %description -l en_US
>>>> vNICs -> conics
>>>> vdsm-hook-openstacknet.noarch: W: no-documentation
>>>> vdsm-hook-openstacknet.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_openstacknet 440
>>>> vdsm-hook-openstacknet.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_openstacknet
>>>> vdsm-hook-openstacknet.noarch: E: wrong-script-interpreter
>>>> /usr/libexec/vdsm/hooks/before_device_migrate_destination/50_openstacknet
>>>> /usr/bin/env python2
>>>> vdsm-hook-pincpu.noarch: W: no-documentation
>>>> vdsm-hook-promisc.noarch: W: no-documentation
>>>> vdsm-hook-promisc.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_promisc 440
>>>> vdsm-hook-promisc.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_promisc
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error Summary(en_US) cmdline
>>>> -> decline
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> cmdline -> decline
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> libvirt's -> liberty's
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> qemu -> emu, q emu
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> commandline -> command line, command-line, commandment
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> xml -> XML, ml, x ml
>>>> vdsm-hook-qemucmdline.noarch: W: spelling-error %description -l en_US
>>>> namespace -> name space, name-space, names pace
>>>> vdsm-hook-qemucmdline.noarch: W: no-documentation
>>>> vdsm-hook-qos.noarch: W: no-documentation
>>>> vdsm-hook-scratchpad.noarch: W: no-documentation
>>>> vdsm-hook-smbios.noarch: W: spelling-error Summary(en_US) libvirt ->
>>>> liberty, ovirt
>>>> vdsm-hook-smbios.noarch: W: spelling-error %description -l en_US
>>>> libvirt -> liberty, ovirt
>>>> vdsm-hook-smbios.noarch: W: no-documentation
>>>> vdsm-hook-spiceoptions.noarch: W: spelling-error Summary(en_US) vm ->
>>>> cm, v, m
>>>> vdsm-hook-spiceoptions.noarch: W: no-documentation
>>>> vdsm-hook-vfio-mdev.noarch: W: summary-ended-with-dot C Hook to enable
>>>> mdev-capable devices.
>>>> vdsm-hook-vfio-mdev.noarch: W: no-documentation
>>>> vdsm-hook-vhostmd.noarch: W: no-documentation
>>>> vdsm-hook-vhostmd.noarch: E: non-readable
>>>> /etc/sudoers.d/50_vdsm_hook_vhostmd 440
>>>> vdsm-hook-vhostmd.noarch: W: non-conffile-in-etc
>>>> /etc/sudoers.d/50_vdsm_hook_vhostmd
>>>> vdsm-hook-vmdisk.noarch: W: no-documentation
>>>> vdsm-hook-vmfex.noarch: W: summary-not-capitalized C vmfex support for
>>>> VDSM
>>>> vdsm-hook-vmfex.noarch: W: no-documentation
>>>> vdsm-hook-vmfex-dev.noarch: W: spelling-error Summary(en_US) vNIC ->
>>>> Venice
>>>> vdsm-hook-vmfex-dev.noarch: W: spelling-error %description -l en_US
>>>> vNIC -> Venice
>>>> vdsm-hook-vmfex-dev.noarch: W: spelling-error %description -l en_US
>>>> macvtap -> madcap
>>>> vdsm-hook-vmfex-dev.noarch: W: no-documentation
>>>> vdsm-jsonrpc.noarch: W: spelling-error %description -l en_US libvdsm ->
>>>> liberalism
>>>> vdsm-jsonrpc.noarch: W: obsolete-not-provided vdsm-api
>>>> vdsm-jsonrpc.noarch: W: no-documentation
>>>> vdsm-python.noarch: E: non-executable-script
>>>> /usr/lib/python2.7/site-packages/vdsm/tool/dummybr.py 644 /usr/bin/python2
>>>> vdsm-python.noarch: E: non-executable-script
>>>> /usr/lib/python2.7/site-packages/vdsm/tool/nwfilter.py 644 /usr/bin/python2
>>>> vdsm-python.noarch: W: dangerous-command-in-%post rm
>>>> vdsm-tests.noarch: E: non-executable-script
>>>> /usr/share/vdsm/tests/alignmentScanTests.py 644 /usr/bin/python2
>>>>
>>>
>>> This looks easy, this is not a script
>>>
>>>
>>>> vdsm-tests.noarch: E: wrong-script-interpreter
>>>> /usr/share/vdsm/tests/fake-ssh-add /usr/bin/env python
>>>> vdsm-tests.noarch: E: non-executable-script
>>>> /usr/share/vdsm/tests/fake-ssh-add 644 /usr/bin/env python
>>>> vdsm-tests.noarch: E: wrong-script-interpreter
>>>> /usr/share/vdsm/tests/fake-ssh-agent /usr/bin/env python
>>>> vdsm-tests.noarch: E: non-executable-script
>>>> /usr/share/vdsm/tests/fake-ssh-agent 644 /usr/bin/env python
>>>> vdsm-tests.noarch: E: wrong-script-interpreter
>>>> /usr/share/vdsm/tests/fake-virt-v2v /usr/bin/env python
>>>> vdsm-tests.noarch: E: non-executable-script
>>>> /usr/share/vdsm/tests/fake-virt-v2v 644 /usr/bin/env python
>>>> vdsm-tests.noarch: E: script-without-shebang
>>>> /usr/share/vdsm/tests/testValidation.py
>>>>
>>>
>>> This is also not a script, maybe wrong permissions?
>>>
>>>
>>>> vdsm-tests.noarch: E: zero-length
>>>> /usr/share/vdsm/tests/toolTests_empty.conf
>>>>
>>>
>>> This is bogus error, but we can probably replace this with generated
>>> temporary file.
>>>
>>>
>>>> vdsm-xmlrpc.noarch: W: spelling-error %description -l en_US vdsmd
>>>> vdsm-xmlrpc.noarch: W: spelling-error %description -l en_US vdsClient
>>>> -> clientele
>>>> vdsm-xmlrpc.noarch: W: no-documentation
>>>> vdsm-yajsonrpc.noarch: W: no-documentation
>>>> 48 packages and 1 specfiles checked; 49 errors, 120 warnings.
>>>>
>>>
>>> Sandro, can you help with adding a test to vdsm build, failing if the
>>> spec has
>>> errors?
>>>
>>
> Some of the errors may be false positives, but if really needed I can help
> with the test.
>
>
>
>>
>>> This would also would be useful to other projects like ovirt-imageio.
>>>
>>> Nir
>>>
>>>
>>>>
>>>>
>>>> --
>>>>
>>>> SANDRO BONAZZOLA
>>>>
>>>> ASSOCIATE MANAGER, SOFTWARE ENGINEERING, EMEA ENG VIRTUALIZATION R&D
>>>>
>>>> Red Hat EMEA <https://www.redhat.com/>
>>>> <https://red.ht/sig>
>>>> TRIED. TESTED. TRUSTED. <https://redhat.com/trusted>
>>>> <http://www.teraplan.it/redhat-osd-2017/>
>>>> _______________________________________________
>>>> Devel mailing list
>>>> Devel at ovirt.org
>>>> http://lists.ovirt.org/mailman/listinfo/devel
>>>
>>>
>>> _______________________________________________
>>> Devel mailing list
>>> Devel at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/devel
>>>
>>
>>
>
>
> --
>
> SANDRO BONAZZOLA
>
> ASSOCIATE MANAGER, SOFTWARE ENGINEERING, EMEA ENG VIRTUALIZATION R&D
>
> Red Hat EMEA <https://www.redhat.com/>
> <https://red.ht/sig>
> TRIED. TESTED. TRUSTED. <https://redhat.com/trusted>
> <http://www.teraplan.it/redhat-osd-2017/>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/devel/attachments/20171025/a12297af/attachment-0001.html>


More information about the Devel mailing list