[virt-tools-list] [PATCH] python-virtinst: type inconsistencies in 'vcpus'
Cole Robinson
crobinso at redhat.com
Wed Feb 9 17:40:18 UTC 2011
On 02/09/2011 05:35 AM, Satoru SATOH wrote:
> Hi,
>
> I looked into this problem further and now feel certain that my previous
> patch (change type of '--vcpus' option) was correct and can fix it.
>
>
> Details:
>
> I run virt-install with the arguments,
>
> "--name foo --nodisks --ram 256 \
> --cdrom /srv/isos/rhel-server-5.6-i386-dvd.iso \
> --hvm --accelerate --vnc \
> --check-cpu \
> --vcpus 2"
>
> and got the following traceback:
>
> ...
> gdb) r "/root/virtinst-debug.py"
> Starting program: /usr/bin/python "/root/virtinst-debug.py"
> [Thread debugging using libthread_db enabled]
> Detaching after fork from child process 11189.
> ERROR Traceback (most recent call last):
> File "/root/virtinst-debug.py", line 25, in <module>
> _vi.main()
> File "/root/vi/vi.py", line 1259, in main
> guest = build_guest_instance(conn, options)
> File "/root/vi/vi.py", line 970, in build_guest_instance
> cli.get_vcpus(options.vcpus, options.check_cpu, guest)
> File "/usr/lib/python2.7/site-packages/virtinst/cli.py", line 733, in get_vcpus
> "but performance will be poor. ") % (vcpus, cpu_num)
> TypeError: %d format: a number is required, not str
> None
> ssato at gescom%
>
> (note: _vi.main is just an wrapper calls virt-install.main with the
> arguments set.)
>
>
> and get_vcpus() in /usr/lib/python2.7/site-packages/virtinst/cli.py
> looks like this:
>
> def get_vcpus(vcpus, check_cpu, guest, image_vcpus=None):
> if vcpus is None and image_vcpus is not None:
> vcpus = int(image_vcpus)
>
> parse_vcpu_option(guest, vcpus, image_vcpus)
>
> conn = guest.conn
> if check_cpu:
> hostinfo = conn.getInfo()
> cpu_num = hostinfo[4] * hostinfo[5] * hostinfo[6] * hostinfo[7]
> if not vcpus <= cpu_num:
> msg = _("You have asked for more virtual CPUs (%d) than there "
> "are physical CPUs (%d) on the host. This will work, "
> "but performance will be poor. ") % (vcpus, cpu_num)
>
> askmsg = _("Are you sure? (yes or no)")
>
> if not prompt_for_yes_or_no(msg, askmsg):
> nice_exit()
>
>
> The type of cpu_num is obviously int:
>
> $ python -c "import libvirt; c = libvirt.open(None); print c.getInfo()[4:]"
> [1, 1, 1, 2]
> $
>
> however vcpus is not int always. Its type is str in some cases (came
> from the --vcpus option), and therefore, the error "TypeError: %d
> format:..." occured, I think.
>
>
> - satoru
>
> On Mon, Feb 07, 2011 at 02:55:14PM +0900, Satoru SATOH wrote:
>> Hi,
>>
>> I encountered a possible bug in python-virtinst (0.500.5-1.fc14) causing
>> the type error such as:
>>
>> # virt-install --connect=qemu:///system --name=rhel-5-4-vm-0 --ram=256 \
>> --arch=i686 --vcpu=2 --keymap=en-us --os-type=linux \
>> --location=http://192.168.151.1/contents/RHEL/5/4/Server/i386/ \
>> --os-variant=rhel5 --disk \
>> path=/var/lib/libvirt/images/rhel-5-4-vm-0/disk-1.qcow2,bus=virtio,format=qcow2,cache=none \
>> --network=network:net-1,model=virtio \
>> --network=network:net-1,model=virtio \
>> --network=network:net-2,model=virtio \
>> --network=network:net-2,model=virtio \
>> --extra-args="ks=http://192.168.151.1/autoinst/rhel-5-4-i386-min.ks.cfg \
>> ksdevice=eth0" --check-cpu --hvm --accelerate --vnc --noreboot \
>> --noautoconsole --wait=20
>> ERROR %d format: a number is required, not str
>>
>>
>> I'm not really sure about the cause of this issue but it seems the
>> following patch may fix it.
>>
>> This patch tries to fix the inconsistencies of type 'vcpu' in cli.py of
>> python-virtinst.
>>
Thanks for the detailed report. FYI in the future, running virt-install with
the --debug flag should print the full backtrace, rather than needing to use gdb.
As you say, in latest virt-install, --vcpus is now a string rather than a
plain int. This is deliberate to facilitate new functionality like specifying
maxvcpus and socket/core/thread topology. So the correct fix is to juss tweak
--check-cpu string format.
I've fixed this upstream now:
http://hg.fedorahosted.org/hg/python-virtinst/rev/cdfd4ebd2233
Thanks,
Cole
>>
>>
>> --- /usr/lib/python2.7/site-packages/virtinst/cli.py.org 2011-02-07 14:19:21.554513828 +0900
>> +++ /usr/lib/python2.7/site-packages/virtinst/cli.py 2011-02-07 14:19:55.955030458 +0900
>> @@ -513,7 +513,7 @@
>> failed = True
>>
>> def vcpu_cli_options(grp):
>> - grp.add_option("", "--vcpus", type="string", dest="vcpus",
>> + grp.add_option("", "--vcpus", type="int", dest="vcpus",
>> help=_("Number of vcpus to configure for your guest. Ex:\n"
>> "--vcpus 5\n"
>> "--vcpus 5,maxcpus=10\n"
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
More information about the virt-tools-list
mailing list