projects
/
osm
/
openvim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow idempotency for sdn assist network/port deletion
[osm/openvim.git]
/
osm_openvim
/
ovim.py
diff --git
a/osm_openvim/ovim.py
b/osm_openvim/ovim.py
index
6b95456
..
e3581b7
100755
(executable)
--- a/
osm_openvim/ovim.py
+++ b/
osm_openvim/ovim.py
@@
-43,7
+43,7
@@
import openflow_conn
__author__ = "Alfonso Tierno, Leonardo Mirabal"
__date__ = "$06-Feb-2017 12:07:15$"
__author__ = "Alfonso Tierno, Leonardo Mirabal"
__date__ = "$06-Feb-2017 12:07:15$"
-__version__ = "0.5.2
5-r545
"
+__version__ = "0.5.2
8-r548
"
version_date = "Jul 2018"
database_version = 23 #needed database schema version
version_date = "Jul 2018"
database_version = 23 #needed database schema version
@@
-501,7
+501,7
@@
class ovim():
return content
return content
- def show_network(self, network_id, db_filter={}):
+ def show_network(self, network_id, db_filter={}
, skip_on_not_found=False
):
"""
Get network from DB by id
:param network_id: net Id
"""
Get network from DB by id
:param network_id: net Id
@@
-518,7
+518,9
@@
class ovim():
if result < 0:
raise ovimException(str(content), -result)
elif result == 0:
if result < 0:
raise ovimException(str(content), -result)
elif result == 0:
- raise ovimException("show_network network '%s' not found" % network_id, -result)
+ if skip_on_not_found:
+ return
+ raise ovimException("show_network network '%s' not found" % network_id, HTTP_Not_Found)
else:
convert_boolean(content, ('shared', 'admin_state_up', 'enable_dhcp'))
# get ports from DB
else:
convert_boolean(content, ('shared', 'admin_state_up', 'enable_dhcp'))
# get ports from DB
@@
-784,13
+786,15
@@
class ovim():
else:
raise ovimException(content, -result)
else:
raise ovimException(content, -result)
- def delete_network(self, network_id):
+ def delete_network(self, network_id
, idempotent=True
):
"""
Delete network by network id
:param network_id: network id
:return:
"""
"""
Delete network by network id
:param network_id: network id
:return:
"""
- net_data = self.show_network(network_id)
+ net_data = self.show_network(network_id, skip_on_not_found=idempotent)
+ if not net_data: # network does not exist
+ return
# delete from the data base
result, content = self.db.delete_row('nets', network_id)
# delete from the data base
result, content = self.db.delete_row('nets', network_id)
@@
-1003,6
+1007,8
@@
class ovim():
del port_data['compute_node']
result, uuid = self.db.new_row('ports', port_data, True, True)
del port_data['compute_node']
result, uuid = self.db.new_row('ports', port_data, True, True)
+ # set net status to BUILD
+ self.db.update_rows('nets', {"status": "BUILD"}, WHERE={'uuid': port_data['net_id']})
if result > 0:
try:
self.net_update_ofc_thread(port_data['net_id'], port_data['ofc_id'])
if result > 0:
try:
self.net_update_ofc_thread(port_data['net_id'], port_data['ofc_id'])
@@
-1059,7
+1065,7
@@
class ovim():
self.logger.error(message)
raise ovimException(message, HTTP_Internal_Server_Error)
self.logger.error(message)
raise ovimException(message, HTTP_Internal_Server_Error)
- def delete_port(self, port_id):
+ def delete_port(self, port_id
, idempotent=False
):
# Look for the previous port data
result, ports = self.db.get_table(WHERE={'uuid': port_id, "type": "external"}, FROM='ports')
if result < 0:
# Look for the previous port data
result, ports = self.db.get_table(WHERE={'uuid': port_id, "type": "external"}, FROM='ports')
if result < 0:
@@
-1067,21
+1073,25
@@
class ovim():
# delete from the data base
result, content = self.db.delete_row('ports', port_id)
if result == 0:
# delete from the data base
result, content = self.db.delete_row('ports', port_id)
if result == 0:
+ if idempotent:
+ return
raise ovimException("External port '{}' not found".format(port_id), http_code=HTTP_Not_Found)
elif result < 0:
raise ovimException("Cannot delete port from database: {}".format(content), http_code=-result)
# update network
raise ovimException("External port '{}' not found".format(port_id), http_code=HTTP_Not_Found)
elif result < 0:
raise ovimException("Cannot delete port from database: {}".format(content), http_code=-result)
# update network
- net
work
= ports[0].get('net_id', None)
- if net
work
:
+ net
_id
= ports[0].get('net_id', None)
+ if net
_id
:
# change of net.
# change of net.
+ # set net status to BUILD
+ self.db.update_rows('nets', {"status": "BUILD"}, WHERE={'uuid': net_id})
try:
try:
- self.net_update_ofc_thread(net
work
, ofc_id=ports[0]["ofc_id"], switch_dpid=ports[0]["switch_dpid"])
+ self.net_update_ofc_thread(net
_id
, ofc_id=ports[0]["ofc_id"], switch_dpid=ports[0]["switch_dpid"])
except ovimException as e:
except ovimException as e:
- raise ovimException("Cannot insert a task for delete network '{}' {}".format(net
work
, str(e)),
+ raise ovimException("Cannot insert a task for delete network '{}' {}".format(net
_id
, str(e)),
HTTP_Internal_Server_Error)
except Exception as e:
HTTP_Internal_Server_Error)
except Exception as e:
- raise ovimException("Cannot insert a task for delete network '{}' {}".format(net
work
, str(e)),
+ raise ovimException("Cannot insert a task for delete network '{}' {}".format(net
_id
, str(e)),
HTTP_Internal_Server_Error)
return content
HTTP_Internal_Server_Error)
return content