cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike C <mcrosson_cloudst...@nusku.net>
Subject Re: libvirt exception
Date Mon, 01 Jun 2015 18:42:35 GMT
On 2015-05-19 04:13, Rohit Yadav wrote:
> Were able to fix the issue? Do we need to update
> agent/bindir/libvirtqemuhook.in with Wei’s fix?
I can confirm the below patch fixes the issue I was having. Thank you 
for the help in getting this resolved.

Forgive the delay on my response, work got crazy and I had to drop 
testing for awhile.

-- Mike Crosson

On 2015-05-11 03:02, Wei ZHOU wrote:
> Hi Mike,
> 
> Please apply the following patch to cloudstack, and copy the file
> agent/bindir/libvirtqemuhook.in to repace /etc/libvirt/hooks/qemu on 
> your
> hosts
> 
> --start------------
> 
> diff --git a/agent/bindir/libvirtqemuhook.in b/agent/bindir/
> libvirtqemuhook.in
> index 7bf9634..a895280 100755
> --- a/agent/bindir/libvirtqemuhook.in
> +++ b/agent/bindir/libvirtqemuhook.in
> @@ -16,6 +16,7 @@
>  # specific language governing permissions and limitations
>  # under the License.
>  import sys
> +import re
>  from xml.dom.minidom import parse
>  from cloudutils.configFileOps import configFileOps
>  from cloudutils.networkConfig import networkConfig
> @@ -24,21 +25,29 @@ def isOldStyleBridge(brName):
>         return True
>      else:
>         return False
> +def isNewStyleBridge(brName):
> +    if re.match(r"br(\w+)-(\d+)", brName) == None:
> +       return False
> +    else:
> +       return True
>  def getGuestNetworkDevice():
>      netlib = networkConfig()
>      cfo = configFileOps("/etc/cloudstack/agent/agent.properties")
>      guestDev = cfo.getEntry("guest.network.device")
>      enslavedDev = netlib.getEnslavedDev(guestDev, 1)
> -    return enslavedDev
> +    return enslavedDev.split(".")[0]
>  def handleMigrateBegin():
>      try:
>          domain = parse(sys.stdin)
>          for interface in domain.getElementsByTagName("interface"):
>              source = interface.getElementsByTagName("source")[0]
>              bridge = source.getAttribute("bridge")
> -            if not isOldStyleBridge(bridge):
> +            if isOldStyleBridge(bridge):
> +                vlanId = bridge.replace("cloudVirBr","")
> +            elif isNewStyleBridge(bridge):
> +                vlanId = re.sub(r"br(\w+)-","",bridge)
> +            else:
>                  continue
> -            vlanId = bridge.replace("cloudVirBr","")
>              phyDev = getGuestNetworkDevice()
>              newBrName="br" + phyDev + "-" + vlanId
>              source.setAttribute("bridge", newBrName)
> 
> -----end-------------
> 
> Kind regards,
> Wei
> 
> 
> 2015-05-10 7:35 GMT+02:00 Mike C <mcrosson_cloudstack@nusku.net>:
> 
>> On 2015-05-08 20:07, Marcus wrote:
>> 
>>> Can you confirm that those bridges and bond devices exist prior to
>>> attempting migration, and that the VMs are attached to them and work?
>>> Perhaps a 'brctl show' and 'virsh dumpxml'. Those look like they 
>>> should be
>>> cloudstack-generated guest network bridges and libvirt is complaining 
>>> they
>>> don't exist
>>> 
>> Everything as far as I can tell is working minus this migration. I 
>> have a
>> few virtual routers running on this machine and VMs, each environment
>> running on the box seems to be doing working just fine. The base 
>> mgmtbr0,
>> cloudbr0, cloudbr1 all come up at boot prior to CloudStack and are 
>> working.
>> 
>> Command output is below.
>> 
>> Also: the router seems to have been restarted and was allocated on the
>> machine I was trying to migrate it to. Trying to migrate it back 
>> resulted
>> in the same error message.
>> 
>> -- Mike
>> 
>> 
>> # brctl show
>> bridge name     bridge id               STP enabled     interfaces
>> breth0-1209             8000.6805ca095d7f       no              
>> eth0.1209
>> breth0-1221             8000.6805ca095d7f       no              
>> eth0.1221
>>                                                         vnet0
>>                                                         vnet3
>> cloud0          8000.fe00a9fe0380       no              vnet1
>> cloudbr0                8000.6805ca095d7f       no              
>> eth0.1100
>>                                                         vnet2
>> cloudbr1                8000.6805ca095d7f       no              
>> eth0.1200
>> mgmtbr0         8000.002564b522ef       no              eth1
>> virbr0          8000.000000000000       yes
>> 
>> # virsh dumpxml r-93-XML
>> <domain type='kvm' id='18'>
>>   <name>r-93-VM</name>
>>   <uuid>5269e919-564a-4986-92c1-07464e99e3ce</uuid>
>>   <description>Debian GNU/Linux 7(64-bit)</description>
>>   <memory unit='KiB'>262144</memory>
>>   <currentMemory unit='KiB'>262144</currentMemory>
>>   <vcpu placement='static'>1</vcpu>
>>   <cputune>
>>     <shares>500</shares>
>>   </cputune>
>>   <resource>
>>     <partition>/machine</partition>
>>   </resource>
>>   <os>
>>     <type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
>>     <boot dev='cdrom'/>
>>     <boot dev='hd'/>
>>   </os>
>>   <features>
>>     <acpi/>
>>     <apic/>
>>     <pae/>
>>   </features>
>>   <cpu>
>>   </cpu>
>>   <clock offset='utc'/>
>>   <on_poweroff>destroy</on_poweroff>
>>   <on_reboot>restart</on_reboot>
>>   <on_crash>destroy</on_crash>
>>   <devices>
>>     <emulator>/usr/bin/kvm-spice</emulator>
>>     <disk type='file' device='disk'>
>>       <driver name='qemu' type='qcow2' cache='none'/>
>>       <source
>> file='/mnt/d5174632-721e-39ed-b93b-462539f63c77/c1b45654-5e74-420e-bf91-5beb745546f8'/>
>>       <target dev='hda' bus='ide'/>
>>       <alias name='ide0-0-0'/>
>>       <address type='drive' controller='0' bus='0' target='0' 
>> unit='0'/>
>>     </disk>
>>     <disk type='file' device='cdrom'>
>>       <driver name='qemu' type='raw' cache='none'/>
>>       <source file='/usr/share/cloudstack-common/vms/systemvm.iso'/>
>>       <target dev='hdc' bus='ide'/>
>>       <readonly/>
>>       <alias name='ide0-1-0'/>
>>       <address type='drive' controller='0' bus='1' target='0' 
>> unit='0'/>
>>     </disk>
>>     <controller type='usb' index='0'>
>>       <alias name='usb0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>> function='0x2'/>
>>     </controller>
>>     <controller type='pci' index='0' model='pci-root'>
>>       <alias name='pci.0'/>
>>     </controller>
>>     <controller type='ide' index='0'>
>>       <alias name='ide0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>> function='0x1'/>
>>     </controller>
>>     <controller type='virtio-serial' index='0'>
>>       <alias name='virtio-serial0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x06'
>> function='0x0'/>
>>     </controller>
>>     <interface type='bridge'>
>>       <mac address='02:00:6b:5b:00:03'/>
>>       <source bridge='breth0-1221'/>
>>       <bandwidth>
>>         <inbound average='25600' peak='25600'/>
>>         <outbound average='25600' peak='25600'/>
>>       </bandwidth>
>>       <target dev='vnet0'/>
>>       <model type='e1000'/>
>>       <alias name='net0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
>> function='0x0'/>
>>     </interface>
>>     <interface type='bridge'>
>>       <mac address='0e:00:a9:fe:03:80'/>
>>       <source bridge='cloud0'/>
>>       <target dev='vnet1'/>
>>       <model type='e1000'/>
>>       <alias name='net1'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>> function='0x0'/>
>>     </interface>
>>     <interface type='bridge'>
>>       <mac address='06:13:ca:00:00:36'/>
>>       <source bridge='cloudbr0'/>
>>       <bandwidth>
>>         <inbound average='25600' peak='25600'/>
>>         <outbound average='25600' peak='25600'/>
>>       </bandwidth>
>>       <target dev='vnet2'/>
>>       <model type='e1000'/>
>>       <alias name='net2'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x05'
>> function='0x0'/>
>>     </interface>
>>     <serial type='pty'>
>>       <source path='/dev/pts/0'/>
>>       <target port='0'/>
>>       <alias name='serial0'/>
>>     </serial>
>>     <console type='pty' tty='/dev/pts/0'>
>>       <source path='/dev/pts/0'/>
>>       <target type='serial' port='0'/>
>>       <alias name='serial0'/>
>>     </console>
>>     <channel type='unix'>
>>       <source mode='bind' path='/var/lib/libvirt/qemu/r-93-VM.agent'/>
>>       <target type='virtio' name='r-93-VM.vport'/>
>>       <alias name='channel0'/>
>>       <address type='virtio-serial' controller='0' bus='0' port='1'/>
>>     </channel>
>>     <input type='tablet' bus='usb'>
>>       <alias name='input0'/>
>>     </input>
>>     <input type='mouse' bus='ps2'/>
>>     <input type='keyboard' bus='ps2'/>
>>     <graphics type='vnc' port='5900' autoport='yes' 
>> listen='172.16.16.31'>
>>       <listen type='address' address='172.16.16.31'/>
>>     </graphics>
>>     <video>
>>       <model type='cirrus' vram='9216' heads='1'/>
>>       <alias name='video0'/>
>>       <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
>> function='0x0'/>
>>     </video>
>>     <memballoon model='none'>
>>       <alias name='balloon0'/>
>>     </memballoon>
>>   </devices>
>>   <seclabel type='none'/>
>> </domain>
>> 
>> 

Mime
View raw message