[Kimchi-devel] [PATCH] Bug fix #309 - network: Unable to create vlan tagged on Ubuntu

Ramon Medeiros ramonn at linux.vnet.ibm.com
Mon Feb 17 13:06:27 UTC 2014


Python binding for libvirt does not support conn.changeBegin() and
conn.commit(). To make the change safe, this procedure was changed to a
internal framework: RollbackContext.

Signed-off-by: Ramon Medeiros <ramonn at linux.vnet.ibm.com>
---
 src/kimchi/model/networks.py | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/src/kimchi/model/networks.py b/src/kimchi/model/networks.py
index 05105df..3c64503 100644
--- a/src/kimchi/model/networks.py
+++ b/src/kimchi/model/networks.py
@@ -29,7 +29,7 @@ from kimchi import networkxml
 from kimchi import xmlutils
 from kimchi.exception import InvalidOperation, InvalidParameter
 from kimchi.exception import MissingParameter, NotFoundError, OperationFailed
-
+from kimchi.rollbackcontext import RollbackContext
 
 class NetworksModel(object):
     def __init__(self, **kargs):
@@ -139,18 +139,17 @@ class NetworksModel(object):
         br_xml = networkxml.create_vlan_tagged_bridge_xml(br_name, interface,
                                                           vlan_id)
         conn = self.conn.get()
-        conn.changeBegin()
-        try:
-            vlan_tagged_br = conn.interfaceDefineXML(br_xml)
-            vlan_tagged_br.create()
-        except libvirt.libvirtError as e:
-            conn.changeRollback()
-            raise OperationFailed("KCHNET0010E", {'iface': interface,
-                                                  'err': e.message})
-        else:
-            conn.changeCommit()
-            return br_name
 
+        with RollbackContext() as rollback:
+
+            try:
+                vlan_tagged_br = conn.interfaceDefineXML(br_xml,0)
+                vlan_tagged_br.create(0)
+            except libvirt.libvirtError as e:
+                rollback.prependDefer(vlan_tagged_br.destroy)
+                raise OperationFailed(e.message)
+            else:
+                return br_name
 
 class NetworkModel(object):
     def __init__(self, **kargs):
@@ -262,5 +261,5 @@ class NetworkModel(object):
                 conn = self.conn.get()
                 iface = conn.interfaceLookupByName(bridge)
                 if iface.isActive():
-                    iface.destroy()
+                    iface.destroy(0)
                 iface.undefine()
-- 
1.8.3.1




More information about the Kimchi-devel mailing list