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
Show replies by date
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(a)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
Applied. Thanks.
Regards,
Aline Manera