projects
/
osm
/
openvim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed some typos
[osm/openvim.git]
/
osm_openvim
/
ovim.py
diff --git
a/osm_openvim/ovim.py
b/osm_openvim/ovim.py
index
1177d42
..
0ad5258
100755
(executable)
--- a/
osm_openvim/ovim.py
+++ b/
osm_openvim/ovim.py
@@
-2,7
+2,7
@@
# -*- coding: utf-8 -*-
##
# -*- coding: utf-8 -*-
##
-# Copyright 2015 Telef
ónica Investigació
n y Desarrollo, S.A.U.
+# Copyright 2015 Telef
onica Investigacio
n y Desarrollo, S.A.U.
# This file is part of openvim
# All Rights Reserved.
#
# This file is part of openvim
# All Rights Reserved.
#
@@
-43,9
+43,9
@@
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
2-r538
"
-version_date = "
Nov 2017
"
-database_version = 2
2
#needed database schema version
+__version__ = "0.5.2
9-r549
"
+version_date = "
Sep 2018
"
+database_version = 2
3
#needed database schema version
HTTP_Bad_Request = 400
HTTP_Unauthorized = 401
HTTP_Bad_Request = 400
HTTP_Unauthorized = 401
@@
-189,7
+189,6
@@
class ovim():
self.get_version(), self.get_version_date(), self.get_database_version()))
# create database connection for openflow threads
self.config["db"] = self._create_database_connection()
self.get_version(), self.get_version_date(), self.get_database_version()))
# create database connection for openflow threads
self.config["db"] = self._create_database_connection()
- self.config["db_lock"] = threading.Lock()
self.of_test_mode = False if self.config['mode'] == 'normal' or self.config['mode'] == "OF only" else True
self.of_test_mode = False if self.config['mode'] == 'normal' or self.config['mode'] == "OF only" else True
@@
-199,8
+198,8
@@
class ovim():
host_develop_bridge_iface = self.config.get('development_bridge', None)
# get host list from data base before starting threads
host_develop_bridge_iface = self.config.get('development_bridge', None)
# get host list from data base before starting threads
- r, hosts = self.db.get_table(SELECT=('name', 'ip_name', 'user', 'uuid', 'password', 'keyfile'),
- FROM='hosts', WHERE={'status': 'ok'})
+ r, hosts = self.db.get_table(SELECT=('name', 'ip_name', 'user', 'uuid', '
hypervisors', '
password', 'keyfile'),
+ FROM='hosts', WHERE={'status': 'ok'})
#Unikernels extension
if r < 0:
raise ovimException("Cannot get hosts from database {}".format(hosts))
if r < 0:
raise ovimException("Cannot get hosts from database {}".format(hosts))
@@
-210,11
+209,12
@@
class ovim():
thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.config["db"],
password=host['password'],
keyfile=host.get('keyfile', self.config["host_ssh_keyfile"]),
thread = ht.host_thread(name=host['name'], user=host['user'], host=host['ip_name'], db=self.config["db"],
password=host['password'],
keyfile=host.get('keyfile', self.config["host_ssh_keyfile"]),
-
db_lock=self.config["db_lock"],
test=host_test_mode,
+ test=host_test_mode,
image_path=self.config['host_image_path'],
version=self.config['version'], host_id=host['uuid'],
develop_mode=host_develop_mode,
develop_bridge_iface=host_develop_bridge_iface,
image_path=self.config['host_image_path'],
version=self.config['version'], host_id=host['uuid'],
develop_mode=host_develop_mode,
develop_bridge_iface=host_develop_bridge_iface,
+ hypervisors=host['hypervisors'], #Unikernels extension
logger_name=self.logger_name + ".host." + host['name'],
debug=self.config.get('log_level_host'))
logger_name=self.logger_name + ".host." + host['name'],
debug=self.config.get('log_level_host'))
@@
-267,7
+267,7
@@
class ovim():
dhcp_params = self.config.get("dhcp_server")
if dhcp_params:
thread = dt.dhcp_thread(dhcp_params=dhcp_params, test=host_test_mode, dhcp_nets=self.config["dhcp_nets"],
dhcp_params = self.config.get("dhcp_server")
if dhcp_params:
thread = dt.dhcp_thread(dhcp_params=dhcp_params, test=host_test_mode, dhcp_nets=self.config["dhcp_nets"],
- db=self.config["db"],
db_lock=self.config["db_lock"],
+ db=self.config["db"],
logger_name=self.logger_name + ".dhcp",
debug=self.config.get('log_level_of'))
thread.start()
logger_name=self.logger_name + ".dhcp",
debug=self.config.get('log_level_of'))
thread.start()
@@
-324,7
+324,6
@@
class ovim():
"""
Start ofc task for existing ofcs in database
:param db_of:
"""
Start ofc task for existing ofcs in database
:param db_of:
- :param db_lock:
:return:
"""
ofcs = self.get_of_controllers()
:return:
"""
ofcs = self.get_of_controllers()
@@
-452,7
+451,6
@@
class ovim():
ofc_net_same_vlan = False
thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.config["db"],
ofc_net_same_vlan = False
thread = oft.openflow_thread(ofc_uuid, of_conn, of_test=self.of_test_mode, db=self.config["db"],
- db_lock=self.config["db_lock"],
pmp_with_same_vlan=ofc_net_same_vlan,
logger_name=self.logger_name + ".ofc." + ofc_uuid,
debug=self.config.get('log_level_of'))
pmp_with_same_vlan=ofc_net_same_vlan,
logger_name=self.logger_name + ".ofc." + ofc_uuid,
debug=self.config.get('log_level_of'))
@@
-500,7
+498,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
@@
-517,7
+515,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
@@
-525,8
+525,12
@@
class ovim():
WHERE={'net_id': network_id}, LIMIT=100)
if len(ports) > 0:
content[0]['ports'] = ports
WHERE={'net_id': network_id}, LIMIT=100)
if len(ports) > 0:
content[0]['ports'] = ports
-
convert_boolean(content, ('shared', 'admin_state_up', 'enable_dhcp'))
convert_boolean(content, ('shared', 'admin_state_up', 'enable_dhcp'))
+
+ result, flows = self.db.get_table(FROM='of_flows', SELECT=('priority', 'vlan_id', 'ingress_port', 'src_mac', 'dst_mac', 'actions'),
+ WHERE={'net_id': network_id}, LIMIT=100)
+ if len(flows) > 0:
+ content[0]['flows'] = flows
return content[0]
def new_network(self, network):
return content[0]
def new_network(self, network):
@@
-539,7
+543,7
@@
class ovim():
if tenant_id:
result, _ = self.db.get_table(FROM='tenants', SELECT=('uuid',), WHERE={'uuid': tenant_id, "enabled": True})
if result <= 0:
if tenant_id:
result, _ = self.db.get_table(FROM='tenants', SELECT=('uuid',), WHERE={'uuid': tenant_id, "enabled": True})
if result <= 0:
- raise ovimException("set_network error, no tenant found
ed
", -result)
+ raise ovimException("set_network error, no tenant found", -result)
bridge_net = None
# check valid params
bridge_net = None
# check valid params
@@
-779,13
+783,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)
@@
-978,7
+984,7
@@
class ovim():
port_mapping_data = self.get_of_port_mappings(columns, db_filter)
if not len(port_mapping_data):
port_mapping_data = self.get_of_port_mappings(columns, db_filter)
if not len(port_mapping_data):
- raise ovimException("No port mapping found
ed
for '{}'".format(str(db_filter)),
+ raise ovimException("No port mapping found for '{}'".format(str(db_filter)),
HTTP_Not_Found)
elif len(port_mapping_data) > 1:
raise ovimException("Wrong port data was given, please check pci, region & compute id data",
HTTP_Not_Found)
elif len(port_mapping_data) > 1:
raise ovimException("Wrong port data was given, please check pci, region & compute id data",
@@
-998,6
+1004,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'])
@@
-1054,7
+1062,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:
@@
-1062,21
+1070,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
@@
-1421,7
+1433,7
@@
class ovim():
dhcp_host = ht.host_thread(name='openvim_controller', user=ovs_controller_user, host=controller_ip,
password=self.config.get('ovs_controller_password'),
keyfile=self.config.get('ovs_controller_keyfile'),
dhcp_host = ht.host_thread(name='openvim_controller', user=ovs_controller_user, host=controller_ip,
password=self.config.get('ovs_controller_password'),
keyfile=self.config.get('ovs_controller_keyfile'),
- db=self.config["db"],
db_lock=self.config["db_lock"],
test=host_test_mode,
+ db=self.config["db"], test=host_test_mode,
image_path=self.config['host_image_path'], version=self.config['version'],
host_id='openvim_controller', develop_mode=host_develop_mode,
develop_bridge_iface=bridge_ifaces,
image_path=self.config['host_image_path'], version=self.config['version'],
host_id='openvim_controller', develop_mode=host_develop_mode,
develop_bridge_iface=bridge_ifaces,