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

Changes: v4: Use flag 0 in some libvirt functions v3: rebase with new model. v2: Put the rollback function above the raise, unless, the line will never run. Ramon Medeiros (1): Bug fix #309 - network: Unable to create vlan tagged on Ubuntu src/kimchi/model/networks.py | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) -- 1.8.3.1

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@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
participants (2)
-
Aline Manera
-
Ramon Medeiros