From: Laine Stump <laine(a)laine.org>
Subject: Re: [libvirt-users] Updating Multiple VM Guests?
To: libvirt-users(a)redhat.com
Date: Wednesday, November 10, 2010, 1:27 PM
On 11/10/2010 01:20 PM, Kenneth
Stailey wrote:
>
> --- On Wed, 11/10/10, Laine Stump<laine(a)laine.org>
wrote:
>
>> From: Laine Stump<laine(a)laine.org>
>> Subject: Re: [libvirt-users] Updating Multiple VM
Guests?
>> To: libvirt-users(a)redhat.com
>> Date: Wednesday, November 10, 2010, 12:41 PM
>> On 11/10/2010 11:59 AM, Kenneth
>> Stailey wrote:
>>> Hi,
>>>
>>> The
libvirt.org FAQ says that "virsh edit" is
the
>> recommended way of updating the libvirt xml.
>>> If a change has to be made to many VMs "virsh
edit" is
>> tedious, time-consuming and likely to be prone to
careless
>> errors.
>>> Is there a command line approach to updating
multiple
>> VMs?
>>
>> How about:
>>
>> for g in guest1 guest2
guest3 guest4; do
>> virsh dumpxml
--inactive $g
>>> /tmp/g.xml
>> # do whatever sed/etc
commands you
>> want here
>> virsh define
/tmp/g.xml
>> done
>>
>> (or something like that, anyway :-)
> The "sed, etc." is a mistake since XML does not have
guaranteed format.
>
> I suppose XMLStarlet could be used.
>
>
http://xmlstar.sourceforge.net/
Yeah. sed is just my general purpose "replacement for
editing by hand"
token ;-)
Something that is xml-aware would obviously be a much
better choice.
It's too painful to get right anyway. I just used this:
#! /bin/bash
# hack to fixup qemu version numbers in libvirt xml
if [ `id -un` != root ]; then
echo this script only works as root
exit 1
fi
cd /dev/shm
for i in `virsh list --all | awk '/running|shut off/ {print $2}'`
do
virsh dumpxml $i > $i.xml
sed -i.bak -e 's/pc-0.11/pc-0.12/' $i.xml
virsh define $i.xml
done