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_cloudst...@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>


Reply via email to