X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=RO%2Fosm_ro%2Fwim%2Fpersistence.py;h=6fbaf8f70154c9f42ec3b2c60e0db597fd251a60;hb=cec23b1a5debca576a454ad0bff778a53df49a33;hp=f0f1ac338397583ef6e9a2023f962848779a2809;hpb=7d782eff123e5b44d41437377ccca66ad1e8b21b;p=osm%2FRO.git diff --git a/RO/osm_ro/wim/persistence.py b/RO/osm_ro/wim/persistence.py index f0f1ac33..6fbaf8f7 100644 --- a/RO/osm_ro/wim/persistence.py +++ b/RO/osm_ro/wim/persistence.py @@ -40,11 +40,12 @@ No domain logic/architectural concern should be present in this file. """ import json import logging +import string from contextlib import contextmanager from hashlib import sha1 from itertools import groupby from operator import itemgetter -from sys import exc_info +# from sys import exc_info # from time import time from uuid import uuid1 as generate_uuid @@ -128,16 +129,16 @@ _PORT_MAPPING_SELECT = ('wim_port_mapping.*', ) _CONFIDENTIAL_FIELDS = ('password', 'passwd') _SERIALIZED_FIELDS = ('config', 'vim_info', 'wim_info', 'conn_info', 'extra', - 'wan_service_mapping_info') + 'service_mapping_info') UNIQUE_PORT_MAPPING_INFO_FIELDS = { - 'dpid-port': ('wan_switch_dpid', 'wan_switch_port') + 'dpid-port': ('switch_dpid', 'switch_port') } """Fields that should be unique for each port mapping that relies on -wan_service_mapping_info. +service_mapping_info. For example, for port mappings of type 'dpid-port', each combination of -wan_switch_dpid and wan_switch_port should be unique (the same switch cannot +switch_dpid and switch_port should be unique (the same switch cannot be connected to two different places using the same port) """ @@ -307,6 +308,11 @@ class WimPersistence(object): if "config" in wim_descriptor: wim_descriptor["config"] = _serialize(wim_descriptor["config"]) + url = wim_descriptor["wim_url"] + wim_descriptor["wim_url"] = url.strip(string.whitespace + "/") + # ^ This avoid the common problem caused by trailing spaces/slashes in + # the URL (due to CTRL+C/CTRL+V) + return self.db.new_row( "wims", wim_descriptor, add_uuid=True, confidential_data=True) @@ -362,6 +368,7 @@ class WimPersistence(object): def get_wim_accounts(self, **kwargs): """Retrieve all the accounts from the database""" kwargs.setdefault('postprocess', _postprocess_wim_account) + kwargs.setdefault('WHERE', {"sdn": "false"}) return self.query(FROM=_WIM_ACCOUNT_JOIN, **kwargs) def get_wim_account(self, uuid_or_name, **kwargs): @@ -507,14 +514,14 @@ class WimPersistence(object): return self.get_datacenters_by(datacenter, tenant, **kwargs)[0] def _create_single_port_mapping(self, properties): - info = properties.setdefault('wan_service_mapping_info', {}) - endpoint_id = properties.get('wan_service_endpoint_id') + info = properties.setdefault('service_mapping_info', {}) + endpoint_id = properties.get('service_endpoint_id') if info.get('mapping_type') and not endpoint_id: - properties['wan_service_endpoint_id'] = ( + properties['service_endpoint_id'] = ( self._generate_port_mapping_id(info)) - properties['wan_service_mapping_info'] = _serialize(info) + properties['service_mapping_info'] = _serialize(info) try: self.db.new_row('wim_port_mappings', properties, @@ -523,10 +530,10 @@ class WimPersistence(object): self.logger.exception(old_exception) ex = InvalidParameters( "The mapping must contain the " - "'pop_switch_dpid', 'pop_switch_port', and " - "wan_service_mapping_info: " - "('wan_switch_dpid' and 'wan_switch_port') or " - "'wan_service_endpoint_id}'") + "'device_id', 'device_interface_id', and " + "service_mapping_info: " + "('switch_dpid' and 'switch_port') or " + "'service_endpoint_id}'") raise ex from old_exception return properties @@ -627,12 +634,12 @@ class WimPersistence(object): original = self.query_one('wim_port_mappings', WHERE={'id': id}) mapping_info = remove_none_items(merge_dicts( - original.get('wan_service_mapping_info') or {}, - properties.get('wan_service_mapping_info') or {})) + original.get('service_mapping_info') or {}, + properties.get('service_mapping_info') or {})) updates = preprocess_record( merge_dicts(original, remove_none_items(properties), - wan_service_mapping_info=mapping_info)) + service_mapping_info=mapping_info)) num_changes = self.db.update_rows('wim_port_mappings', UPDATE=updates, WHERE={'id': id}) @@ -727,7 +734,7 @@ class WimPersistence(object): kwargs.setdefault('error_if_none', False) criteria_fields = ('uuid', 'instance_scenario_id', 'sce_net_id', - 'wim_id', 'wim_account_id') + 'wim_id', 'wim_account_id', 'sdn') criteria = remove_none_items(filter_dict_keys(kwargs, criteria_fields)) kwargs = filter_out_dict_keys(kwargs, criteria_fields) @@ -863,10 +870,7 @@ def _preprocess_wim_account(wim_account): """ wim_account = preprocess_record(wim_account) - created = wim_account.get('created') - wim_account['created'] = ( - 'true' if created is True or created == 'true' else 'false') - + wim_account['sdn'] = False return wim_account @@ -912,8 +916,8 @@ def _postprocess_wim_account(wim_account, hide=_CONFIDENTIAL_FIELDS): def _postprocess_wim_port_mapping(mapping, hide=_CONFIDENTIAL_FIELDS): mapping = _postprocess_record(mapping, hide=hide) - mapping_info = mapping.get('wan_service_mapping_info', None) or {} - mapping['wan_service_mapping_info'] = mapping_info + mapping_info = mapping.get('service_mapping_info', None) or {} + mapping['service_mapping_info'] = mapping_info return mapping