diff --git a/src/api-lib/vnc_api.py b/src/api-lib/vnc_api.py index 55d2dbd2c07..ebfcaec28de 100644 --- a/src/api-lib/vnc_api.py +++ b/src/api-lib/vnc_api.py @@ -742,8 +742,8 @@ def _read_args_to_id(self, res_type, fq_name=None, fq_name_str=None, if fq_name_str: return (True, self.fq_name_to_id(res_type, fq_name_str.split(':'))) if ifmap_id: - return (True, self.ifmap_to_id(ifmap_id)) - #end _read_args_to_id + return (False, "ifmap_id is no longer supported") + # end _read_args_to_id def _request_server(self, op, url, data=None, retry_on_error=True, retry_after_authn=False, retry_count=30): @@ -1009,16 +1009,8 @@ def id_to_fq_name_type(self, id): # This is required only for helping ifmap-subscribers using rest publish @check_homepage def ifmap_to_id(self, ifmap_id): - json_body = json.dumps({'ifmap_id': ifmap_id}) - uri = self._action_uri['ifmap-to-id'] - try: - content = self._request_server(rest.OP_POST, uri, data=json_body) - except HttpError as he: - if he.status_code == 404: - return None - - return json.loads(content)['uuid'] - #end ifmap_to_id + return None + # end ifmap_to_id def obj_to_json(self, obj): return json.dumps(obj, default=self._obj_serializer_all) diff --git a/src/config/api-server/SConscript b/src/config/api-server/SConscript index 5669fcc4765..deb080383b5 100644 --- a/src/config/api-server/SConscript +++ b/src/config/api-server/SConscript @@ -55,8 +55,6 @@ for file in setup_sources: local_sources = [ '__init__.py', 'vnc_cfg_api_server.py', - 'vnc_ifmap.py', - 'vnc_ifmap_client.py', 'vnc_db.py', 'vnc_cfg_types.py', 'vnc_auth.py', diff --git a/src/config/api-server/contrail-api.conf b/src/config/api-server/contrail-api.conf index 0114316cdfb..10cd0c9e0bd 100644 --- a/src/config/api-server/contrail-api.conf +++ b/src/config/api-server/contrail-api.conf @@ -2,8 +2,6 @@ log_file = /var/log/contrail/contrail-api.log log_level = SYS_NOTICE log_local = 1 -# ifmap_username = api-server -# ifmap_password = api-server cassandra_server_list = 127.0.0.1:9160 disc_server_ip = 127.0.0.1 disc_server_port = 5998 @@ -22,16 +20,6 @@ disc_server_port = 5998 # release under R1.05 does not support that optimization (especially for port) # list_optimization_enabled = False -[IFMAP_SERVER] -# IF-MAP server configuration -# Listen IP and port -ifmap_listen_ip = 0.0.0.0 -ifmap_listen_port = 8443 -# Key ans certificate files path. If not set automatically create -ifmap_key_path = /var/lib/contrail/api-server/ifmap-cert/key -ifmap_cert_path = /var/lib/contrail/api-server/ifmap-cert/cert -# Credentials: user:passwd[,user:passwd] -ifmap_credentials = control:secret [SANDESH] #sandesh_ssl_enable=false diff --git a/src/config/api-server/contrail-config.rules b/src/config/api-server/contrail-config.rules index 14fac30cb58..a263b60f454 100755 --- a/src/config/api-server/contrail-config.rules +++ b/src/config/api-server/contrail-config.rules @@ -1,6 +1,2 @@ -{ "Rules": [ - {"processname": "contrail-api", "process_state": "PROCESS_STATE_STOPPED", "action": "sudo service ifmap restart"}, - {"processname": "contrail-api", "process_state": "PROCESS_STATE_EXITED", "action": "sudo service ifmap restart"}, - {"processname": "contrail-api", "process_state": "PROCESS_STATE_FATAL", "action": "sudo service ifmap restart"} - ] +{ "Rules": [ ] } diff --git a/src/config/api-server/db_manage.py b/src/config/api-server/db_manage.py index 4f0a45db431..df219ec63e3 100644 --- a/src/config/api-server/db_manage.py +++ b/src/config/api-server/db_manage.py @@ -16,10 +16,6 @@ import cfgm_common from cfgm_common import vnc_cgitb from cfgm_common.utils import cgitb_hook -from cfgm_common.ifmap.client import client -from cfgm_common.ifmap.request import NewSessionRequest -from cfgm_common.ifmap.response import newSessionResult -from cfgm_common.imid import ifmap_read, parse_search_result from cfgm_common.vnc_cassandra import VncCassandraClient import pycassa import utils @@ -44,8 +40,6 @@ class CassWrongRFError(AuditError): pass class FQNIndexMissingError(AuditError): pass class FQNStaleIndexError(AuditError): pass class FQNMismatchError(AuditError): pass -class IfmapMissingIdentifiersError(AuditError): pass -class IfmapExtraIdentifiersError(AuditError): pass class MandatoryFieldsMissingError(AuditError): pass class IpSubnetMissingError(AuditError): pass class VirtualNetworkMissingError(AuditError): pass @@ -136,12 +130,6 @@ def _parse_args(self, args_str): parser.add_argument( "--debug", help="Run in debug mode, default False", action='store_true', default=False) - parser.add_argument( - "--ifmap-servers", nargs='*', - help="List of ifmap-ip:ifmap-port, default from api-conf") - parser.add_argument( - "--ifmap-credentials", - help=": for read-only user") parser.add_argument("--cassandra-user") parser.add_argument("--cassandra-password") @@ -481,14 +469,11 @@ def check_rabbitmq_queue(self): # end check_rabbitmq_queue @checker - def check_fq_name_uuid_ifmap_match(self): - # ensure items in obj-fq-name-table match to - # a. obj-uuid-table, b. local ifmap server + def check_fq_name_uuid_match(self): + # ensure items in obj-fq-name-table match to obj-uuid-table ret_errors = [] logger = self._logger - self._connect_to_ifmap_servers() - obj_fq_name_table = self._cf_dict['obj_fq_name_table'] obj_uuid_table = self._cf_dict['obj_uuid_table'] fq_name_table_all = [] @@ -539,52 +524,8 @@ def check_fq_name_uuid_ifmap_match(self): 'Extra object %s %s %s in obj_uuid_table' %(obj_type, fq_name_str, obj_uuid))) - for mapclient in self._mapclients: - all_ifmap_idents = [] - search_results = parse_search_result( - ifmap_read( - mapclient, - 'contrail:config-root:root', - srch_meta=None, - result_meta='contrail:id-perms' - ) - ) - # search_results is in form of - # [ ({'config-root': 'root'}, ) - # ({'config-root': 'root', - # 'global-system-config': 'default-global-system-config'}, - # ) ] - # convert it into set of identifiers - for ident_s, meta in search_results: - # ref to same type appears as list of idents - # flatten so set can be used - for ident in ident_s.values(): - if type(ident) == list: - all_ifmap_idents.extend(ident) - else: - all_ifmap_idents.append(ident) - all_ifmap_idents = set(all_ifmap_idents) - all_cassandra_idents = set([item[1] for item in uuid_table_all]) - logger.debug("Got %d idents from %s server", - len(all_ifmap_idents), mapclient._client__url[0]) - - extra = all_ifmap_idents - all_cassandra_idents - if (len(extra) == 1) and (extra == set(['root'])): - pass # good - else: - ret_errors.append(IfmapExtraIdentifiersError( - 'Extra identifiers %s in ifmap %s vs obj_uuid_table' - %(extra, mapclient._client__url[0]))) - - extra = all_cassandra_idents - all_ifmap_idents - if extra: - ret_errors.append(IfmapMissingIdentifiersError( - 'Missing identifiers %s in ifmap %s vs obj_uuid_table.\n' \ - %(extra, mapclient._client__url[0]))) - - return ret_errors - # end check_fq_name_uuid_ifmap_match + # end check_fq_name_uuid_match @checker def check_obj_mandatory_fields(self): @@ -1020,44 +961,6 @@ def set_reserved_addrs_in_cassandra(vn_id, fq_name_str): return ret_errors # end _addr_alloc_process_ip_objects - def _connect_to_ifmap_servers(self): - self._mapclients = [] - NAMESPACES = { - 'env': "http://www.w3.org/2003/05/soap-envelope", - 'ifmap': "http://www.trustedcomputinggroup.org/2010/IFMAP/2", - 'meta': - "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2", - 'contrail': "http://www.contrailsystems.com/vnc_cfg.xsd" - } - # pick ifmap servers from args to this utility and if absent - # pick it from contrail-api conf file - if self._args.ifmap_servers: - ifmap_ips_ports = [(ip_port.split(':')) - for ip_port in self._args.ifmap_servers] - else: - ifmap_ips_ports = [(self._api_args.ifmap_listen_ip, - str(self._api_args.ifmap_listen_port))] - if self._args.ifmap_credentials: - ifmap_user, ifmap_passwd = self._args.ifmap_credentials.split(':') - else: - ifmap_user, ifmap_passwd = self._api_args.ifmap_credentials[0] - - for ifmap_ip, ifmap_port in ifmap_ips_ports: - mapclient = client((ifmap_ip, ifmap_port), - ifmap_user, ifmap_passwd, - NAMESPACES) - connected = False - while not connected: - try: - result = mapclient.call('newSession', NewSessionRequest()) - connected = True - except socket.error as e: - time.sleep(3) - - mapclient.set_session_id(newSessionResult(result).get_session_id()) - mapclient.set_publisher_id(newSessionResult(result).get_publisher_id()) - self._mapclients.append(mapclient) - # end _connect_to_ifmap_servers # end class DatabaseChecker @@ -1439,7 +1342,7 @@ def db_check(args_str=''): db_checker.check_zk_mode_and_node_count() db_checker.check_cassandra_keyspace_replication() db_checker.check_obj_mandatory_fields() - db_checker.check_fq_name_uuid_ifmap_match() + db_checker.check_fq_name_uuid_match() db_checker.check_subnet_uuid() db_checker.check_subnet_addr_alloc() db_checker.check_route_targets_id() diff --git a/src/config/api-server/requirements.txt b/src/config/api-server/requirements.txt index f572959a855..59bb8ac88dc 100644 --- a/src/config/api-server/requirements.txt +++ b/src/config/api-server/requirements.txt @@ -3,7 +3,6 @@ vnc_api discoveryclient sandesh sandesh-common -lxml>=2.3.3 gevent==1.1a2 geventhttpclient==1.0a pycassa>=1.7.2 diff --git a/src/config/api-server/setup.py b/src/config/api-server/setup.py index 74896b96e17..d55b6e6370b 100644 --- a/src/config/api-server/setup.py +++ b/src/config/api-server/setup.py @@ -36,15 +36,6 @@ def run(self): package_data={'': ['*.html', '*.css', '*.xml']}, zip_safe=False, long_description="VNC Configuration API Server Implementation", - install_requires=[ - 'lxml>=2.3.2', - 'gevent>=0.13.6', - 'geventhttpclient>=1.0a', - 'pycassa>=1.7.2', - 'netaddr>=0.7.5', - 'bitarray>=0.8.0', - 'psutil>=0.6.0', - ], entry_points = { # Please update sandesh/common/vns.sandesh on process name change 'console_scripts' : [ diff --git a/src/config/api-server/test-requirements.txt b/src/config/api-server/test-requirements.txt index c4becf51248..f8c1b83a2a0 100644 --- a/src/config/api-server/test-requirements.txt +++ b/src/config/api-server/test-requirements.txt @@ -1,4 +1,5 @@ ipdb +lxml>=2.3.3 python-subunit testrepository flexmock diff --git a/src/config/api-server/tests/test_case.py b/src/config/api-server/tests/test_case.py index 450d0f8a517..2a2c02459ce 100644 --- a/src/config/api-server/tests/test_case.py +++ b/src/config/api-server/tests/test_case.py @@ -9,7 +9,6 @@ from vnc_api import vnc_api from cfgm_common import vnc_rdbms -import cfgm_common.ifmap.client as ifmap_client from test_utils import * import test_common @@ -65,11 +64,11 @@ def _create_vn_ri_vmi(self, obj_count=1): return vn_objs, ipam_objs, ri_objs, vmi_objs # end _create_vn_ri_vmi - def assert_ifmap_doesnt_have_ident(self, test_obj): - self.assertTill(self.ifmap_doesnt_have_ident, obj=test_obj) + def assert_vnc_db_doesnt_have_ident(self, test_obj): + self.assertTill(self.vnc_db_doesnt_have_ident, obj=test_obj) - def assert_ifmap_has_ident(self, test_obj): - self.assertTill(self.ifmap_has_ident, obj=test_obj) + def assert_vnc_db_has_ident(self, test_obj): + self.assertTill(self.vnc_db_has_ident, obj=test_obj) # end class ApiServerTestCase @@ -93,30 +92,4 @@ def setUpClass(cls, extra_config_knobs=None, extra_mocks=None): super(ApiServerRDBMSTestCase, cls).setUpClass( db="rdbms", extra_config_knobs=extra_config_knobs, extra_mocks=extra_mocks) -#end class ApiServerRDBMSTestCase - - -class ApiServerIrondTestCase(ApiServerTestCase): - @classmethod - def setUpClass(cls, extra_config_knobs=None, extra_mocks=None): - irond_config = [ - ('DEFAULTS', 'ifmap_server_ip', '127.0.0.1'), - ('DEFAULTS', 'ifmap_health_check_interval', '3600'), - ] - irond_mocks = [ - (ifmap_client.client, '__init__', FakeIfmapClient.initialize), - (ifmap_client.client, 'call', FakeIfmapClient.call), - (ifmap_client.client, 'call_async_result', - FakeIfmapClient.call_async_result), - ] - if extra_config_knobs: - extra_config_knobs.extend(irond_config) - else: - extra_config_knobs = irond_config - if extra_mocks: - extra_mocks.extend(irond_mocks) - else: - extra_mocks = irond_mocks - super(ApiServerIrondTestCase, cls).setUpClass( - extra_config_knobs=extra_config_knobs, extra_mocks=extra_mocks) - +# end class ApiServerRDBMSTestCase diff --git a/src/config/api-server/tests/test_crud_basic.py b/src/config/api-server/tests/test_crud_basic.py index 1e65f8622fa..1ee8788cd93 100644 --- a/src/config/api-server/tests/test_crud_basic.py +++ b/src/config/api-server/tests/test_crud_basic.py @@ -39,7 +39,6 @@ from vnc_api.gen.resource_test import * import cfgm_common from cfgm_common import vnc_plugin_base -from cfgm_common import imid from cfgm_common import vnc_cgitb from cfgm_common import db_json_exim vnc_cgitb.enable(format='text') @@ -281,7 +280,7 @@ def tearDownClass(cls, *args, **kwargs): def test_create_using_lib_api(self): vn_obj = VirtualNetwork('vn-%s' %(self.id())) self._vnc_lib.virtual_network_create(vn_obj) - self.assert_ifmap_has_ident(vn_obj) + self.assert_vnc_db_has_ident(vn_obj) # end test_create_using_lib_api def test_create_using_rest_api(self): @@ -684,7 +683,7 @@ def err_on_publish(orig_method, *args, **kwargs): self.assertTill(lambda: publish_captured[0] == True) # unpatch err publish - self.assert_ifmap_has_ident(obj) + self.assert_vnc_db_has_ident(obj) # end exception types on publish # fake problem on consume from rabbit @@ -717,10 +716,8 @@ def err_on_consume(orig_method, *args, **kwargs): self.assertTill(lambda: consume_captured[0] == True) # unpatch err consume - self.assertTill(self.ifmap_ident_has_link, obj=obj, - link_name='display-name') - self.assertTill(lambda: 'test_update' in self.ifmap_ident_has_link( - obj=obj, link_name='display-name')['meta']) + self.assertTill(self.vnc_db_ident_has_prop, obj=obj, + prop_name='display_name', prop_value='test_update') # end exception types on consume # fake problem on consume and publish at same time @@ -797,10 +794,8 @@ def err_on_publish(orig_method, *args, **kwargs): # unpatch connect # unpatch err consume - self.assertTill(self.ifmap_ident_has_link, obj=obj, - link_name='display-name') - self.assertTill(lambda: 'test_update_2' in self.ifmap_ident_has_link( - obj=obj, link_name='display-name')['meta']) + self.assertTill(self.vnc_db_ident_has_prop, obj=obj, + prop_name='display_name', prop_value='test_update_2') # end test_reconnect_to_rabbit def test_handle_trap_on_exception(self): @@ -833,11 +828,10 @@ def exception_on_vn_read(obj_type, *args, **kwargs): api_server._db_conn._object_db.object_read = orig_read def test_sandesh_trace(self): - from lxml import etree api_server = self._server_info['api_server'] # the test test_obj = self._create_test_object() - self.assert_ifmap_has_ident(test_obj) + self.assert_vnc_db_has_ident(test_obj) self._vnc_lib.virtual_network_delete(id=test_obj.uuid) # and validations @@ -1000,40 +994,6 @@ def test_aliasip_as_instanceip(self): virtual_network_refs=[vn_fixt.getObj()])) # end test_aliasip_as_instanceip - def test_name_with_reserved_xml_char(self, port = '8443'): - self.skipTest("Skipping test_name_with_reserved_xml_char") - vn_name = self.id()+'-&vn<1>"2\'' - vn_obj = VirtualNetwork(vn_name) - # fq_name, fq_name_str has non-escape val, ifmap-id has escaped val - ifmap_id = cfgm_common.imid.get_ifmap_id_from_fq_name(vn_obj.get_type(), - vn_obj.get_fq_name()) - self.assertIsNot(re.search("&vn<1>"2'", ifmap_id), None) - fq_name_str = cfgm_common.imid.get_fq_name_str_from_ifmap_id(ifmap_id) - self.assertIsNone(re.search("&vn<1>"2'", fq_name_str)) - - self._add_detail('Creating network with name %s expecting success' %(vn_name)) - self._vnc_lib.virtual_network_create(vn_obj) - self.assertTill(self.ifmap_has_ident, obj=vn_obj) - ident_str = self.ifmap_has_ident(obj=vn_obj)['ident'] - mch = re.search("&vn<1>"2'", ident_str) - self.assertIsNot(mch, None) - self._vnc_lib.virtual_network_delete(id=vn_obj.uuid) - - vn_name = self.id()+'-vn' - vn_obj = VirtualNetwork(vn_name) - self._add_detail('Creating network with name %s expecting success' %(vn_name)) - self._vnc_lib.virtual_network_create(vn_obj) - self.assert_ifmap_has_ident(vn_obj) - self._vnc_lib.virtual_network_delete(id=vn_obj.uuid) - - rt_name = self.id()+'-route-target:1' - rt_obj = RouteTarget(rt_name) - self._add_detail('Creating network with name %s expecting success' %(rt_name)) - self._vnc_lib.route_target_create(rt_obj) - self.assert_ifmap_has_ident(vn_obj) - self._vnc_lib.route_target_delete(id=rt_obj.uuid) - # end test_name_with_reserved_xml_char - def test_list_lib_api(self): num_objs = 5 proj_obj = Project('%s-project' %(self.id())) @@ -1710,7 +1670,7 @@ def err_on_delete(orig_method, *args, **kwargs): def test_uve_trace_delete_name_from_msg(self): test_obj = self._create_test_object() - self.assert_ifmap_has_ident(test_obj) + self.assert_vnc_db_has_ident(test_obj) db_client = self._api_server._db_conn uve_delete_trace_invoked = [] @@ -1731,7 +1691,7 @@ def assert_on_call(*args, **kwargs): with test_common.patch(db_client, 'dbe_uve_trace', spy_uve_trace): self._delete_test_object(test_obj) - self.assert_ifmap_doesnt_have_ident(test_obj) + self.assert_vnc_db_doesnt_have_ident(test_obj) self.assertEqual(len(uve_delete_trace_invoked), 1, 'uve_trace not invoked on object delete') self.assertEqual(len(uuid_to_fq_name_on_delete_invoked), 0, @@ -3354,10 +3314,6 @@ def tearDownClass(cls, *args, **kwargs): super(TestDBAudit, cls).tearDownClass(*args, **kwargs) # end tearDownClass - def setUp(self): - super(TestDBAudit, self).setUp() - self._args = '--ifmap-servers %s:%s' % (self._api_server_ip, - self._api_ifmap_port) @contextlib.contextmanager def audit_mocks(self): def fake_ks_prop(*args, **kwargs): @@ -3393,8 +3349,8 @@ def test_checker(self): with self.audit_mocks(): from vnc_cfg_api_server import db_manage test_obj = self._create_test_object() - self.assertTill(self.ifmap_has_ident, obj=test_obj) - db_manage.db_check(self._args) + self.assertTill(self.vnc_db_has_ident, obj=test_obj) + db_manage.db_check() # end test_checker def test_checker_missing_mandatory_fields(self): @@ -3422,7 +3378,7 @@ def test_checker_fq_name_mismatch_index_to_object(self): with self.audit_mocks(): from vnc_cfg_api_server import db_manage test_obj = self._create_test_object() - self.assert_ifmap_has_ident(test_obj) + self.assert_vnc_db_has_ident(test_obj) uuid_cf = test_common.CassandraCFs.get_cf('config_db_uuid', 'obj_uuid_table') orig_col_val_ts = uuid_cf.get(test_obj.uuid, @@ -3432,8 +3388,8 @@ def test_checker_fq_name_mismatch_index_to_object(self): wrong_col_val_ts['fq_name'][1]) with uuid_cf.patch_row( test_obj.uuid, wrong_col_val_ts): - db_checker = db_manage.DatabaseChecker(self._args) - errors = db_checker.check_fq_name_uuid_ifmap_match() + db_checker = db_manage.DatabaseChecker() + errors = db_checker.check_fq_name_uuid_match() error_types = [type(x) for x in errors] self.assertIn(db_manage.FQNMismatchError, error_types) self.assertIn(db_manage.FQNStaleIndexError, error_types) @@ -3448,8 +3404,8 @@ def test_checker_fq_name_index_stale(self): uuid_cf = test_common.CassandraCFs.get_cf('config_db_uuid','obj_uuid_table') fq_name_cf = test_common.CassandraCFs.get_cf('config_db_uuid','obj_fq_name_table') with uuid_cf.patch_row(test_obj.uuid, new_columns=None): - db_checker = db_manage.DatabaseChecker(self._args) - errors = db_checker.check_fq_name_uuid_ifmap_match() + db_checker = db_manage.DatabaseChecker() + errors = db_checker.check_fq_name_uuid_match() error_types = [type(x) for x in errors] self.assertIn(db_manage.FQNStaleIndexError, error_types) # test_checker_fq_name_mismatch_stale @@ -3459,7 +3415,7 @@ def test_checker_fq_name_index_missing(self): with self.audit_mocks(): from vnc_cfg_api_server import db_manage test_obj = self._create_test_object() - self.assert_ifmap_has_ident(test_obj) + self.assert_vnc_db_has_ident(test_obj) uuid_cf = test_common.CassandraCFs.get_cf('config_db_uuid','obj_uuid_table') fq_name_cf = test_common.CassandraCFs.get_cf('config_db_uuid','obj_fq_name_table') test_obj_type = test_obj.get_type().replace('-', '_') @@ -3469,8 +3425,8 @@ def test_checker_fq_name_index_missing(self): wrong_col_val_ts = dict((k,v) for k,v in orig_col_val_ts.items() if ':'.join(test_obj.fq_name) not in k) with fq_name_cf.patch_row(test_obj_type, new_columns=wrong_col_val_ts): - db_checker = db_manage.DatabaseChecker(self._args) - errors = db_checker.check_fq_name_uuid_ifmap_match() + db_checker = db_manage.DatabaseChecker() + errors = db_checker.check_fq_name_uuid_match() error_types = [type(x) for x in errors] self.assertIn(db_manage.FQNIndexMissingError, error_types) # test_checker_fq_name_mismatch_missing @@ -3480,19 +3436,18 @@ def test_checker_ifmap_identifier_extra(self): with self.audit_mocks(): from vnc_cfg_api_server import db_manage test_obj = self._create_test_object() - self.assert_ifmap_has_ident(test_obj) + self.assert_vnc_db_has_ident(test_obj) uuid_cf = test_common.CassandraCFs.get_cf('config_db_uuid','obj_uuid_table') with uuid_cf.patch_row(test_obj.uuid, new_columns=None): - db_checker = db_manage.DatabaseChecker(self._args) - errors = db_checker.check_fq_name_uuid_ifmap_match() + db_checker = db_manage.DatabaseChecker() + errors = db_checker.check_fq_name_uuid_match() error_types = [type(x) for x in errors] self.assertIn(db_manage.FQNStaleIndexError, error_types) - self.assertIn(db_manage.IfmapExtraIdentifiersError, error_types) # test_checker_ifmap_identifier_extra def test_checker_ifmap_identifier_missing(self): - # ifmap has doesn't have an identifier but obj_uuid table + # ifmap doesn't have an identifier but obj_uuid table # in cassandra does with self.audit_mocks(): from vnc_cfg_api_server import db_manage @@ -3501,11 +3456,10 @@ def test_checker_ifmap_identifier_missing(self): new_columns={'type': json.dumps(''), 'fq_name':json.dumps(''), 'prop:id_perms':json.dumps('')}): - db_checker = db_manage.DatabaseChecker(self._args) - errors = db_checker.check_fq_name_uuid_ifmap_match() + db_checker = db_manage.DatabaseChecker() + errors = db_checker.check_fq_name_uuid_match() error_types = [type(x) for x in errors] self.assertIn(db_manage.FQNIndexMissingError, error_types) - self.assertIn(db_manage.IfmapMissingIdentifiersError, error_types) # test_checker_ifmap_identifier_missing def test_checker_useragent_subnet_key_missing(self): diff --git a/src/config/api-server/tests/test_ip_alloc.py b/src/config/api-server/tests/test_ip_alloc.py index e4be2f67e22..3b600eb4ca5 100644 --- a/src/config/api-server/tests/test_ip_alloc.py +++ b/src/config/api-server/tests/test_ip_alloc.py @@ -2114,7 +2114,7 @@ def __call__(self, _, *args, **kwargs): with test_common.patch(orig_object, method_name, SpyCreateNode(orig_object, method_name)): self._vnc_lib.instance_ip_create(iip_obj) - self.assertTill(self.ifmap_has_ident, obj=iip_obj) + self.assertTill(self.vnc_db_has_ident, obj=iip_obj) #end test_notify_doesnt_persist diff --git a/src/config/api-server/tests/test_kombu.py b/src/config/api-server/tests/test_kombu.py index 43ded2fe572..df977b38ce4 100644 --- a/src/config/api-server/tests/test_kombu.py +++ b/src/config/api-server/tests/test_kombu.py @@ -35,18 +35,18 @@ class WrongValueException(Exception): pass -class TestIfmapKombuClient(unittest.TestCase): +class TestVncKombuClient(unittest.TestCase): @classmethod def setUpClass(cls, *args, **kwargs): cls.console_handler = logging.StreamHandler() cls.console_handler.setLevel(logging.DEBUG) logger.addHandler(cls.console_handler) - super(TestIfmapKombuClient, cls).setUpClass(*args, **kwargs) + super(TestVncKombuClient, cls).setUpClass(*args, **kwargs) @classmethod def tearDownClass(cls, *args, **kwargs): logger.removeHandler(cls.console_handler) - super(TestIfmapKombuClient, cls).tearDownClass(*args, **kwargs) + super(TestVncKombuClient, cls).tearDownClass(*args, **kwargs) def setUp(self): self.mock_connect = flexmock(operational = True, @@ -97,7 +97,7 @@ def Connection(self, urls, **kwargs): self._url("e.e.e.e", username="eeee", password="xxxx"), self._url("f.f.f.f", username="ffff", password="xxxx", port=5050)] with self.assertRaises(CorrectValueException): - VncServerKombuClient(self.db_client_mgr, servers, self.port, None, + VncServerKombuClient(self.db_client_mgr, servers, self.port, self.username, self.password, self.vhost, 0, False) @@ -126,7 +126,7 @@ def _drain_events(): flexmock(self.mock_connect).should_receive("drain_events").replace_with(_drain_events).twice() servers = "a.a.a.a" - kc = VncServerKombuClient(self.db_client_mgr,servers, self.port,None, + kc = VncServerKombuClient(self.db_client_mgr,servers, self.port, self.username, self.password, self.vhost, 0, False) _lock.wait() @@ -160,7 +160,7 @@ def _publish(args): flexmock(self.mock_connect).should_receive("drain_events").replace_with(_drain_events).once() flexmock(self.mock_producer).should_receive("publish").replace_with(_publish).twice() servers = "a.a.a.a" - kc = VncServerKombuClient(self.db_client_mgr, servers, self.port, None, + kc = VncServerKombuClient(self.db_client_mgr, servers, self.port, self.username, self.password, self.vhost, 0, False) gevent.sleep(0) @@ -171,57 +171,3 @@ def _publish(args): self.assertEqual(len(req_id), 2) self.assertEqual(len(set(req_id)), 1) - -class TestVncRabbitPublish(test_case.ApiServerTestCase): - """ Tests to verify the publish of rabbit msg.""" - @classmethod - def setUpClass(cls): - super(TestVncRabbitPublish, cls).setUpClass() - - def test_out_of_order_rabbit_publish(self): - """ Test to make sure api-server preserves the state of the - object even if the CREATE msg is queued after UPDATE in rabbit - """ - self.wait_till_api_server_idle() - - api_server = self._server_info['api_server'] - orig_dbe_create_publish = api_server._db_conn._msgbus.dbe_create_publish - self.block_untill_update_publish = True - def out_of_order_dbe_create_publish(obj_type, obj_ids, *args, **kwargs): - if obj_type == 'virtual_network': - while self.block_untill_update_publish: - gevent.sleep(1) - return orig_dbe_create_publish(obj_type,obj_ids, *args, **kwargs) - - api_server._db_conn._msgbus.dbe_create_publish = \ - out_of_order_dbe_create_publish - logger.info("Creating VN object, without publishing it to IFMAP.") - vn_obj = VirtualNetwork('vn1') - vn_obj.set_uuid(str(uuid.uuid4())) - ipam_obj = NetworkIpam('ipam1') - vn_obj.add_network_ipam(ipam_obj, VnSubnetsType()) - self._vnc_lib.network_ipam_create(ipam_obj) - vn_create_greenlet = gevent.spawn(self._vnc_lib.virtual_network_create, vn_obj) - gevent.sleep(0) - logger.info("Update VN object, Expected to update the object in", - "Cassandra DB and skip publishing to IFMAP.") - vn_obj = self._vnc_lib.virtual_network_read(id=vn_obj.uuid) - vn_obj.display_name = 'test_update_1' - self._vnc_lib.virtual_network_update(vn_obj) - gevent.sleep(2) - self.assertTill(self.ifmap_doesnt_have_ident, obj=vn_obj) - - logger.info("Unblock create notify to amqp, Create expected to read from DB", - "and publish to IFMAP with the updated object info.") - self.block_untill_update_publish = False - vn_uuid = vn_create_greenlet.get(timeout=3) - self.assertTill(self.ifmap_ident_has_link, obj=vn_obj, - link_name='display-name') - self.assertTrue('test_update_1' in self.ifmap_ident_has_link( - obj=vn_obj, link_name='display-name')['meta']) - - logger.info("update after publishing to IFAMAP, Expected to publish to IFMAP") - vn_obj.display_name = 'test_update_2' - self._vnc_lib.virtual_network_update(vn_obj) - self.assertTill(lambda: 'test_update_2' in self.ifmap_ident_has_link( - obj=vn_obj, link_name='display-name')['meta']) diff --git a/src/config/api-server/tests/test_perms.py b/src/config/api-server/tests/test_perms.py index 5e6fc061a01..d25049136c0 100644 --- a/src/config/api-server/tests/test_perms.py +++ b/src/config/api-server/tests/test_perms.py @@ -5,24 +5,13 @@ import gevent import os import sys -import socket -import errno import uuid import logging import coverage -import fixtures import testtools from testtools.matchers import Equals, MismatchError, Not, Contains from testtools import content, content_type, ExpectedException -import unittest -import re -import json -import copy -from lxml import etree -import inspect -import requests -import stevedore import keystoneclient.v2_0.client as keystone from keystonemiddleware import auth_token diff --git a/src/config/api-server/tests/test_perms2.py b/src/config/api-server/tests/test_perms2.py index 857ece640e1..c061938a2a8 100644 --- a/src/config/api-server/tests/test_perms2.py +++ b/src/config/api-server/tests/test_perms2.py @@ -4,8 +4,6 @@ import gevent import os import sys -import socket -import errno import uuid import logging import coverage @@ -15,20 +13,13 @@ from testtools.matchers import Equals, MismatchError, Not, Contains from testtools import content, content_type, ExpectedException import unittest -import re import json -import copy -from lxml import etree -import inspect -import requests -import stevedore import bottle from vnc_api.vnc_api import * import keystoneclient.exceptions as kc_exceptions import keystoneclient.v2_0.client as keystone from keystonemiddleware import auth_token -from cfgm_common import rest, utils from cfgm_common.rbaclib import * import cfgm_common from cfgm_common import vnc_cgitb diff --git a/src/config/api-server/tests/test_quota.py b/src/config/api-server/tests/test_quota.py index a8ac258c54d..288cf7f496d 100644 --- a/src/config/api-server/tests/test_quota.py +++ b/src/config/api-server/tests/test_quota.py @@ -5,24 +5,13 @@ import gevent import os import sys -import socket -import errno import uuid import logging import coverage -import fixtures import testtools from testtools.matchers import Equals, MismatchError, Not, Contains from testtools import content, content_type, ExpectedException -import unittest -import re -import json -import copy -from lxml import etree -import inspect -import requests -import stevedore from vnc_api.vnc_api import * import cfgm_common diff --git a/src/config/api-server/tests/test_rbac.py b/src/config/api-server/tests/test_rbac.py index 6329bd6696c..3e550f8a3d3 100644 --- a/src/config/api-server/tests/test_rbac.py +++ b/src/config/api-server/tests/test_rbac.py @@ -4,24 +4,14 @@ import gevent import os import sys -import socket -import errno import uuid import logging import coverage -import fixtures import testtools from testtools.matchers import Equals, MismatchError, Not, Contains from testtools import content, content_type, ExpectedException -import unittest -import re import json -import copy -from lxml import etree -import inspect -import requests -import stevedore from vnc_api.vnc_api import * import keystoneclient.exceptions as kc_exceptions diff --git a/src/config/api-server/tests/test_with_irond.py b/src/config/api-server/tests/test_with_irond.py deleted file mode 100644 index d1b637cb2a2..00000000000 --- a/src/config/api-server/tests/test_with_irond.py +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. -# - -import importlib -import inspect -import pkgutil -import sys -sys.path.append('../../common/tests') - -from test_case import ApiServerIrondTestCase -from test_case import ApiServerTestCase -import tests - -IGNORED_MODULES = [ - 'test_case', - 'test_with_irond', - 'test_rdbms', -] - - -def get_all_test_class_for_api_server(package): - results = [] - - if isinstance(package, basestring): - package = importlib.import_module(package) - - for _, name, is_package in pkgutil.walk_packages(package.__path__): - if (not is_package - and (name in IGNORED_MODULES or not name.startswith('test_'))): - continue - full_name = package.__name__ + '.' + name - importlib.import_module(full_name) - if is_package: - results.extend(get_all_test_class_for_api_server(full_name)) - for cls_name, cls in inspect.getmembers(sys.modules[full_name], - inspect.isclass): - if (not cls_name.startswith('Test') or - not issubclass(cls, ApiServerTestCase)): - continue - results.append(cls) - return results - - -for cls in get_all_test_class_for_api_server(tests): - new_cls_name = '%sWithIrond' % cls.__name__ - new_cls = type(new_cls_name, (cls, ApiServerIrondTestCase), {}) - setattr(importlib.import_module(__name__), new_cls.__name__, new_cls) - del cls - del new_cls diff --git a/src/config/api-server/traces.sandesh b/src/config/api-server/traces.sandesh index 1206dfd3400..a8e5e02eb25 100644 --- a/src/config/api-server/traces.sandesh +++ b/src/config/api-server/traces.sandesh @@ -45,14 +45,3 @@ trace sandesh MessageBusNotifyTrace { 4: string error; } -/** - * @description: IF-MAP trace for API server - * @severity: DEBUG - * @action: No action needed - */ -trace sandesh IfmapTrace { - 1: string request_id; - 2: string operation; - 3: string body; - 4: string error; -} diff --git a/src/config/api-server/utils.py b/src/config/api-server/utils.py index 0eec55a5724..a9b5c4d4cbb 100644 --- a/src/config/api-server/utils.py +++ b/src/config/api-server/utils.py @@ -91,21 +91,6 @@ def parse_args(args_str): 'object_cache_entries': '10000', # max number of objects cached for read 'object_cache_exclude_types': '', # csv of object types to *not* cache 'db_engine': 'cassandra', - # IF-MAP client options to connect and maintain irond sessions - 'ifmap_server_ip': '127.0.0.1', - 'ifmap_server_port': "8443", - 'ifmap_username': "api-server", - 'ifmap_password': "api-server", - 'ifmap_queue_size': 10000, - 'ifmap_max_message_size': 1024*1024, - 'ifmap_health_check_interval': '60', # in seconds - } - # ssl options - secopts = { - 'use_certs': False, - 'keyfile': '', - 'certfile': '', - 'ca_certs': '', } # keystone options ksopts = { @@ -123,19 +108,6 @@ def parse_args(args_str): 'cassandra_user' : None, 'cassandra_password' : None } - # ifmap server options - ifmapopts = { - # IF-MAP options to start self-managed and minimalist IF-MAP server - # Listen IP and port - 'ifmap_listen_ip': None, - 'ifmap_listen_port': None, - # Key ans certificate files path. If not set automatically create - 'ifmap_key_path': '/var/lib/contrail/api-server/ifmap-cert/key', - 'ifmap_cert_path': '/var/lib/contrail/api-server/ifmap-cert/cert', - # Credentials: [(user1, password), (user2, password)] - 'ifmap_credentials': [('control', 'secret')], - } - # rdbms options rdbmsopts = { 'rdbms_user' : None, @@ -164,10 +136,6 @@ def parse_args(args_str): if 'default_encoding' in config.options('DEFAULTS'): default_encoding = config.get('DEFAULTS', 'default_encoding') gen.resource_xsd.ExternalEncoding = default_encoding - if 'SECURITY' in config.sections() and\ - 'use_certs' in config.options('SECURITY'): - if config.getboolean('SECURITY', 'use_certs'): - secopts.update(dict(config.items("SECURITY"))) if 'KEYSTONE' in config.sections(): ksopts.update(dict(config.items("KEYSTONE"))) if 'QUOTA' in config.sections(): @@ -181,8 +149,6 @@ def parse_args(args_str): cassandraopts.update(dict(config.items('CASSANDRA'))) if 'RDBMS' in config.sections(): rdbmsopts.update(dict(config.items('RDBMS'))) - if 'IFMAP_SERVER' in config.sections(): - ifmapopts.update(dict(config.items('IFMAP_SERVER'))) if 'SANDESH' in config.sections(): sandeshopts.update(dict(config.items('SANDESH'))) # Override with CLI options @@ -195,11 +161,9 @@ def parse_args(args_str): # Don't mess with format of description formatter_class=argparse.RawDescriptionHelpFormatter, ) - defaults.update(secopts) defaults.update(ksopts) defaults.update(cassandraopts) defaults.update(rdbmsopts) - defaults.update(ifmapopts) defaults.update(sandeshopts) parser.set_defaults(**defaults) @@ -342,37 +306,6 @@ def parse_args(args_str): help="Comma separated values of object types to not cache") parser.add_argument("--db_engine", help="Database engine to use, default cassandra") - parser.add_argument( - "--ifmap_server_ip", help="IP address of ifmap server") - parser.add_argument( - "--ifmap_server_port", help="Port of ifmap server") - parser.add_argument( - "--ifmap_username", help="Username known to ifmap server") - parser.add_argument( - "--ifmap_password", help="Password known to ifmap server") - parser.add_argument( - "--ifmap_queue_size", type=int, help="Size of the queue that holds " - "pending messages to be sent to ifmap server") - parser.add_argument( - "--ifmap_max_message_size", type=int, help="Maximum size of message " - "sent to ifmap server") - parser.add_argument("--ifmap_health_check_interval", - help="Interval seconds to check for ifmap health, default 60") - parser.add_argument("--ifmap_listen_ip", default=None, - help="IP to bind IF-MAP server (If not set, the VNC " - "API server will use IF-MAP client to connect to " - " an external IF-MAP server)") - parser.add_argument("--ifmap_listen_port", - help="TCP port to bind IF-MAP server (If not set, the " - "VNC API server will use IF-MAP client to connect " - " to an external IF-MAP server)") - parser.add_argument("--ifmap_key_path", - help="Key file path to use for IF-MAP server") - parser.add_argument("--ifmap_cert_path", - help="Certificate file path to use for IF-MAP server") - parser.add_argument('--ifmap_credentials', - help="List of user and password: ", - type=user_password, nargs='*') args_obj, remaining_argv = parser.parse_known_args(remaining_argv) args_obj.conf_file = args.conf_file args_obj.config_sections = config diff --git a/src/config/api-server/vnc_cfg_api_server.py b/src/config/api-server/vnc_cfg_api_server.py index 8ba40ec99e2..679239e3d35 100644 --- a/src/config/api-server/vnc_cfg_api_server.py +++ b/src/config/api-server/vnc_cfg_api_server.py @@ -34,7 +34,6 @@ import copy from pprint import pformat from cStringIO import StringIO -from lxml import etree # import GreenletProfiler from cfgm_common import vnc_cgitb @@ -69,14 +68,13 @@ from vnc_db import VncDbClient import cfgm_common -from cfgm_common import ignore_exceptions, imid +from cfgm_common import ignore_exceptions from cfgm_common.uve.vnc_api.ttypes import VncApiCommon, VncApiConfigLog,\ VncApiDebug, VncApiInfo, VncApiNotice, VncApiError from cfgm_common import illegal_xml_chars_RE from sandesh_common.vns.ttypes import Module from sandesh_common.vns.constants import ModuleNames, Module2NodeType,\ - NodeTypeNames, INSTANCE_ID_DEFAULT, API_SERVER_DISCOVERY_SERVICE_NAME,\ - IFMAP_SERVER_DISCOVERY_SERVICE_NAME + NodeTypeNames, INSTANCE_ID_DEFAULT, API_SERVER_DISCOVERY_SERVICE_NAME from provision_defaults import Provision from vnc_quota import * @@ -111,7 +109,6 @@ from sandesh.traces.ttypes import RestApiTrace from vnc_bottle import get_bottle_server from cfgm_common.vnc_greenlets import VncGreenlet -from vnc_ifmap import VncIfmapServer _ACTION_RESOURCES = [ {'uri': '/prop-collection-get', 'link_name': 'prop-collection-get', @@ -126,9 +123,6 @@ 'method': 'POST', 'method_name': 'fq_name_to_id_http_post'}, {'uri': '/id-to-fqname', 'link_name': 'id-to-name', 'method': 'POST', 'method_name': 'id_to_fq_name_http_post'}, - # ifmap-to-id only for ifmap subcribers using rest for publish - {'uri': '/ifmap-to-id', 'link_name': 'ifmap-to-id', - 'method': 'POST', 'method_name': 'ifmap_to_id_http_post'}, {'uri': '/useragent-kv', 'link_name': 'useragent-keyvalue', 'method': 'POST', 'method_name': 'useragent_kv_http_post'}, {'uri': '/db-check', 'link_name': 'database-check', @@ -934,22 +928,15 @@ def http_resource_delete(self, obj_type, id): raise cfgm_common.exceptions.HttpError(404, result) # common handling for all resource delete - parent_obj_type = read_result.get('parent_type') + parent_uuid = read_result.get('parent_uuid') (ok, del_result) = self._delete_common( - get_request(), obj_type, id, parent_obj_type) + get_request(), obj_type, id, parent_uuid) if not ok: (code, msg) = del_result self.config_object_error(id, None, obj_type, 'http_delete', msg) raise cfgm_common.exceptions.HttpError(code, msg) fq_name = read_result['fq_name'] - ifmap_id = imid.get_ifmap_id_from_fq_name(resource_type, fq_name) - obj_ids['imid'] = ifmap_id - if parent_obj_type: - parent_res_type, _ = self._validate_resource_type(parent_obj_type) - parent_imid = cfgm_common.imid.get_ifmap_id_from_fq_name( - parent_res_type, fq_name[:-1]) - obj_ids['parent_imid'] = parent_imid # fail if non-default children or non-derived backrefs exist default_names = {} @@ -1487,7 +1474,6 @@ def __init__(self, args_str=None): self._sandesh.trace_buffer_create(name="DBUVERequestTraceBuf", size=1000) self._sandesh.trace_buffer_create(name="MessageBusNotifyTraceBuf", size=1000) - self._sandesh.trace_buffer_create(name="IfmapTraceBuf", size=1000) self._sandesh.set_logging_params( enable_local_log=self._args.log_local, @@ -1514,12 +1500,6 @@ def __init__(self, args_str=None): self._db_connect(self._args.reset_config) self._db_init_entries() - if (self._args.ifmap_listen_ip is not None and - self._args.ifmap_listen_port is not None): - # As DB are synced, we can serve the custom IF-MAP server - self._vnc_ifmap_server = VncIfmapServer(self, self._args) - gevent.spawn(self._vnc_ifmap_server.run_server) - # API/Permissions check # after db init (uses db_conn) self._rbac = vnc_rbac.VncRbac(self, self._db_conn) @@ -1769,10 +1749,6 @@ def get_pipe_start_app(self): return self._pipe_start_app # end get_pipe_start_app - def get_ifmap_health_check_interval(self): - return float(self._args.ifmap_health_check_interval) - # end get_ifmap_health_check_interval - def get_rabbit_health_check_interval(self): return float(self._args.rabbit_health_check_interval) # end get_rabbit_health_check_interval @@ -2486,12 +2462,6 @@ def id_to_fq_name_http_post(self): return {'fq_name': fq_name, 'type': res_type} # end id_to_fq_name_http_post - def ifmap_to_id_http_post(self): - self._post_common(get_request(), None, None) - uuid = self._db_conn.ifmap_id_to_uuid(get_request().json['ifmap_id']) - return {'uuid': uuid} - # end ifmap_to_id_http_post - # Enables a user-agent to store and retrieve key-val pair # TODO this should be done only for special/quantum plugin def useragent_kv_http_post(self): @@ -2622,11 +2592,7 @@ def list_bulk_collection_http_post(self): # Private Methods def _parse_args(self, args_str): ''' - Eg. python vnc_cfg_api_server.py --ifmap_server_ip 192.168.1.17 - --ifmap_server_port 8443 - --ifmap_username test - --ifmap_password test - --cassandra_server_list + Eg. python vnc_cfg_api_server.py --cassandra_server_list 10.1.2.3:9160 10.1.2.4:9160 --redis_server_ip 127.0.0.1 --redis_server_port 6382 @@ -2653,12 +2619,8 @@ def _parse_args(self, args_str): --cluster_id [--auth keystone] [--default_encoding ascii ] - --ifmap_health_check_interval 60 --object_cache_size 10000 --object_cache_exclude_types '' - --ifmap_listen_ip 0.0.0.0 - --ifmap_listen_port 8443 - --ifmap_credentials control:secret ''' self._args, _ = utils.parse_args(args_str) # end _parse_args @@ -2718,10 +2680,6 @@ def _load_extensions(self): # end _load_extensions def _db_connect(self, reset_config): - ifmap_ip = self._args.ifmap_server_ip - ifmap_port = self._args.ifmap_server_port - user = self._args.ifmap_username - passwd = self._args.ifmap_password cass_server_list = self._args.cassandra_server_list redis_server_ip = self._args.redis_server_ip redis_server_port = self._args.redis_server_port @@ -2760,13 +2718,10 @@ def _db_connect(self, reset_config): cred = {'username': rdbms_user,'password': rdbms_password} self._db_conn = VncDbClient( - self, ifmap_ip, ifmap_port, user, passwd, db_server_list, - rabbit_servers, rabbit_port, rabbit_user, rabbit_password, - rabbit_vhost, rabbit_ha_mode, reset_config, zk_server, - self._args.cluster_id, - db_credential=cred, - db_engine=db_engine, - rabbit_use_ssl=self._args.rabbit_use_ssl, + self, db_server_list, rabbit_servers, rabbit_port, rabbit_user, + rabbit_password, rabbit_vhost, rabbit_ha_mode, reset_config, + zk_server, self._args.cluster_id, db_credential=cred, + db_engine=db_engine, rabbit_use_ssl=self._args.rabbit_use_ssl, kombu_ssl_version=self._args.kombu_ssl_version, kombu_ssl_keyfile= self._args.kombu_ssl_keyfile, kombu_ssl_certfile=self._args.kombu_ssl_certfile, @@ -3314,7 +3269,7 @@ def _http_put_common(self, request, obj_type, obj_uuid, obj_fq_name, # parent_type needed for perms check. None for derived objects (eg. # routing-instance) - def _http_delete_common(self, request, obj_type, uuid, parent_type): + def _http_delete_common(self, request, obj_type, uuid, parent_uuid): # If not connected to zookeeper do not allow operations that # causes the state change if not self._db_conn._zk_db.is_connected(): @@ -3339,22 +3294,15 @@ def _http_delete_common(self, request, obj_type, uuid, parent_type): log.send(sandesh=self._sandesh) # TODO check api + resource perms etc. - if not self.is_multi_tenancy_set() or not parent_type: + if not self.is_multi_tenancy_set() or not parent_uuid: return (True, '') """ Validate parent allows write access. Implicitly trust parent info in the object since coming from our DB. """ - parent_fq_name = fq_name[:-1] - try: - parent_uuid = self._db_conn.fq_name_to_uuid( - parent_type, parent_fq_name) - except NoIdError: - # parent uuid could be null for derived resources such as - # routing-instance - return (True, '') - return self._permissions.check_perms_delete(request, obj_type, uuid, parent_uuid) + return self._permissions.check_perms_delete(request, obj_type, uuid, + parent_uuid) # end _http_delete_common def _http_post_validate(self, obj_type=None, obj_dict=None): @@ -3630,51 +3578,6 @@ def publish_self_to_discovery(self): self.api_server_task = self._disc.publish( API_SERVER_DISCOVERY_SERVICE_NAME, data) - def publish_ifmap_to_discovery(self, state = 'up', msg = ''): - # publish ifmap server - if (self._args.ifmap_listen_ip is not None and - self._args.ifmap_listen_port is not None): - data = { - 'ip-address': self._args.ifmap_listen_ip, - 'port': self._args.ifmap_listen_port, - } - else: - data = { - 'ip-address': self._args.ifmap_server_ip, - 'port': self._args.ifmap_server_port, - } - if self._disc: - self.ifmap_task = self._disc.publish( - IFMAP_SERVER_DISCOVERY_SERVICE_NAME, - data, state, msg) - # end publish_ifmap_to_discovery - - def un_publish_self_to_discovery(self): - # un publish api server - data = { - 'ip-address': self._args.ifmap_server_ip, - 'port': self._args.listen_port, - } - if self._disc: - self._disc.un_publish(API_SERVER_DISCOVERY_SERVICE_NAME, data) - - def un_publish_ifmap_to_discovery(self): - # un publish ifmap server - if (self._args.ifmap_listen_ip is not None and - self._args.ifmap_listen_port is not None): - data = { - 'ip-address': self._args.ifmap_listen_ip, - 'port': self._args.ifmap_listen_port, - } - else: - data = { - 'ip-address': self._args.ifmap_server_ip, - 'port': self._args.ifmap_server_port, - } - if self._disc: - self._disc.un_publish(IFMAP_SERVER_DISCOVERY_SERVICE_NAME, data) - # end un_publish_ifmap_to_discovery - # end class VncApiServer def main(args_str=None, server=None): diff --git a/src/config/api-server/vnc_db.py b/src/config/api-server/vnc_db.py index cdb15bc3347..bf5ba74bdf7 100644 --- a/src/config/api-server/vnc_db.py +++ b/src/config/api-server/vnc_db.py @@ -3,7 +3,7 @@ # """ -Layer that transforms VNC config objects to ifmap representation +Layer that transforms VNC config objects to database representation """ from cfgm_common.zkclient import ZookeeperClient, IndexAllocator from gevent import ssl, monkey @@ -43,9 +43,6 @@ from provision_defaults import * from cfgm_common.exceptions import * from vnc_quota import * -from vnc_ifmap import VncIfmapDb -from vnc_ifmap import VncIfmapServer -from vnc_ifmap_client import VncIfmapClient from pysandesh.gen_py.sandesh.ttypes import SandeshLevel from sandesh_common.vns.constants import USERAGENT_KEYSPACE_NAME from sandesh.traces.ttypes import DBRequestTrace, MessageBusNotifyTrace @@ -260,12 +257,11 @@ def useragent_kv_delete(self, key): class VncServerKombuClient(VncKombuClient): - def __init__(self, db_client_mgr, rabbit_ip, rabbit_port, ifmap_db, + def __init__(self, db_client_mgr, rabbit_ip, rabbit_port, rabbit_user, rabbit_password, rabbit_vhost, rabbit_ha_mode, rabbit_health_check_interval, **kwargs): self._db_client_mgr = db_client_mgr self._sandesh = db_client_mgr._sandesh - self._ifmap_db = ifmap_db listen_port = db_client_mgr.get_server_port() q_name = 'vnc_config.%s-%s' %(socket.gethostname(), listen_port) super(VncServerKombuClient, self).__init__( @@ -365,12 +361,7 @@ def _dbe_create_notification(self, obj_info): str(e)) self.config_log(err_msg, level=SandeshLevel.SYS_ERR) raise - finally: - (ok, result) = self._ifmap_db.object_create(obj_info, obj_dict) - if not ok: - self.config_log(result, level=SandeshLevel.SYS_ERR) - raise Exception(result) - #end _dbe_create_notification + # end _dbe_create_notification def dbe_update_publish(self, obj_type, obj_ids): oper_info = {'oper': 'UPDATE', 'type': obj_type} @@ -397,11 +388,7 @@ def _dbe_update_notification(self, obj_info): msg = "Failed to invoke type specific dbe_update_notification" self.config_log(msg, level=SandeshLevel.SYS_ERR) raise - finally: - (ok, result) = self._ifmap_db.object_update(r_class, new_obj_dict) - if not ok: - raise Exception(result) - #end _dbe_update_notification + # end _dbe_update_notification def dbe_delete_publish(self, obj_type, obj_ids, obj_dict): oper_info = {'oper': 'DELETE', 'type': obj_type, 'obj_dict': obj_dict} @@ -426,12 +413,7 @@ def _dbe_delete_notification(self, obj_info): msg = "Failed to invoke type specific dbe_delete_notification" self.config_log(msg, level=SandeshLevel.SYS_ERR) raise - finally: - (ok, ifmap_result) = self._ifmap_db.object_delete(obj_info) - if not ok: - self.config_log(ifmap_result, level=SandeshLevel.SYS_ERR) - raise Exception(ifmap_result) - #end _dbe_delete_notification + # end _dbe_delete_notification # end class VncKombuClient @@ -514,7 +496,7 @@ def _reconnect_zk(self): def reconnect_zk(self): if self._reconnect_zk_greenlet is None: self._reconnect_zk_greenlet =\ - vnc_greenlets.VncGreenlet("VNC IfMap ZK Reconnect", + vnc_greenlets.VncGreenlet("VNC ZK Reconnect", self._reconnect_zk) # end @@ -639,14 +621,12 @@ def get_sg_from_id(self, sg_id): class VncDbClient(object): - def __init__(self, api_svr_mgr, ifmap_srv_ip, ifmap_srv_port, uname, - passwd, db_srv_list, - rabbit_servers, rabbit_port, rabbit_user, rabbit_password, - rabbit_vhost, rabbit_ha_mode, reset_config=False, - zk_server_ip=None, db_prefix='', db_credential=None, - obj_cache_entries=0, obj_cache_exclude_types=None, - db_engine='cassandra', connection=None, - **kwargs): + def __init__(self, api_svr_mgr, db_srv_list, rabbit_servers, rabbit_port, + rabbit_user, rabbit_password, rabbit_vhost, rabbit_ha_mode, + reset_config=False, zk_server_ip=None, db_prefix='', + db_credential=None, obj_cache_entries=0, + obj_cache_exclude_types=None, db_engine='cassandra', + connection=None, **kwargs): self._db_engine = db_engine self._api_svr_mgr = api_svr_mgr self._sandesh = api_svr_mgr._sandesh @@ -664,32 +644,6 @@ def __init__(self, api_svr_mgr, ifmap_srv_ip, ifmap_srv_port, uname, } self._db_resync_done = gevent.event.Event() - self._self_managed_ifmap_server = (api_svr_mgr._args.ifmap_listen_ip is not None and - api_svr_mgr._args.ifmap_listen_port is not None) - - if api_svr_mgr.get_worker_id() == 0: - if self._self_managed_ifmap_server: - self._ifmap_db = VncIfmapDb(self) - else: - msg = "Connecting to ifmap on %s:%s as %s" \ - % (ifmap_srv_ip, ifmap_srv_port, uname) - self.config_log(msg, level=SandeshLevel.SYS_NOTICE) - - # certificate auth - ssl_options = None - if api_svr_mgr._args.use_certs: - ssl_options = { - 'keyfile': api_svr_mgr._args.keyfile, - 'certfile': api_svr_mgr._args.certfile, - 'ca_certs': api_svr_mgr._args.ca_certs, - 'cert_reqs': ssl.CERT_REQUIRED, - 'ciphers': 'ALL' - } - self._ifmap_db = VncIfmapClient(self, ifmap_srv_ip, - ifmap_srv_port, uname, passwd, - ssl_options) - else: - self._ifmap_db = None msg = "Connecting to zookeeper on %s" % (zk_server_ip) self.config_log(msg, level=SandeshLevel.SYS_NOTICE) @@ -721,8 +675,7 @@ def db_client_init(): self._zk_db = self._object_db self._msgbus = VncServerKombuClient(self, rabbit_servers, - rabbit_port, self._ifmap_db, - rabbit_user, rabbit_password, + rabbit_port, rabbit_user, rabbit_password, rabbit_vhost, rabbit_ha_mode, api_svr_mgr.get_rabbit_health_check_interval(), **kwargs) @@ -759,18 +712,14 @@ def get_api_server(self): # end get_api_server def db_resync(self): - # Read contents from cassandra and publish to ifmap + # Read contents from cassandra and perform DB update if required start_time = datetime.datetime.utcnow() self._object_db.walk(self._dbe_resync) - if self._self_managed_ifmap_server: - self.get_api_server().publish_ifmap_to_discovery() - else: - self._ifmap_db._publish_to_ifmap_enqueue('publish_discovery', 1) self.config_log("Cassandra DB walk completed.", level=SandeshLevel.SYS_INFO) self._update_default_quota() end_time = datetime.datetime.utcnow() - msg = "Time elapsed in syncing ifmap: %s" % (str(end_time - start_time)) + msg = "Time elapsed in resyncing db: %s" % (str(end_time - start_time)) self.config_log(msg, level=SandeshLevel.SYS_DEBUG) self._db_resync_done.set() # end db_resync @@ -796,7 +745,7 @@ def db_read(self): def _uuid_to_longs(self, id): msb_id = id.int >> 64 lsb_id = id.int & ((1 << 64) - 1) - return msb_id, lsb_id + return {'uuid_mslong': msb_id, 'uuid_lslong': lsb_id} # end _uuid_to_longs def set_uuid(self, obj_type, obj_dict, id, do_lock=True): @@ -833,12 +782,8 @@ def set_uuid(self, obj_type, obj_dict, id, do_lock=True): obj_type, fq_name, str(id)) # end do_lock - # set uuid in the perms meta - mslong, lslong = self._uuid_to_longs(id) - obj_dict['id_perms']['uuid'] = {} - obj_dict['id_perms']['uuid']['uuid_mslong'] = mslong - obj_dict['id_perms']['uuid']['uuid_lslong'] = lslong - + # set uuid in id_perms + obj_dict['id_perms']['uuid'] = self._uuid_to_longs(id) obj_dict['uuid'] = str(id) return True @@ -847,18 +792,12 @@ def set_uuid(self, obj_type, obj_dict, id, do_lock=True): def _alloc_set_uuid(self, obj_type, obj_dict): id = uuid.uuid4() ok = self.set_uuid(obj_type, obj_dict, id) - return (ok, obj_dict['uuid']) # end _alloc_set_uuid def match_uuid(self, obj_dict, obj_uuid): - new_mslong, new_lslong = self._uuid_to_longs(uuid.UUID(obj_uuid)) - old_mslong = obj_dict['id_perms']['uuid']['uuid_mslong'] - old_lslong = obj_dict['id_perms']['uuid']['uuid_lslong'] - if new_mslong == old_mslong and new_lslong == old_lslong: - return True - - return False + new_uuid = self._uuid_to_longs(uuid.UUID(obj_uuid)) + return (new_uuid == obj_dict['id_perms']['uuid']) # end match_uuid def update_subnet_uuid(self, subnets): @@ -981,22 +920,6 @@ def _dbe_resync(self, obj_type, obj_uuids): if obj_type == 'instance_ip' and 'subnet_uuid' not in obj_dict: self.iip_update_subnet_uuid(obj_dict) - - # Ifmap alloc - parent_res_type = obj_dict.get('parent_type', None) - (ok, result) = self._ifmap_db.object_alloc( - obj_class, parent_res_type, obj_dict['fq_name']) - if not ok: - msg = "%s(%s), dbe_resync:ifmap_alloc error: %s" % ( - obj_type, obj_uuid, result[1]) - self.config_log(msg, level=SandeshLevel.SYS_ERR) - continue - (my_imid, parent_imid) = result - - # Ifmap create - obj_ids = {'type': obj_type, 'uuid': obj_uuid, 'imid': my_imid, - 'parent_imid': parent_imid} - (ok, result) = self._ifmap_db.object_create(obj_ids, obj_dict) except Exception as e: tb = cfgm_common.utils.detailed_traceback() self.config_log(tb, level=SandeshLevel.SYS_ERR) @@ -1050,7 +973,7 @@ def _generate_db_request_trace(self, oper, obj_type, obj_ids, obj_dict): # end _generate_db_request_trace # Public Methods - # Returns created ifmap_id + # Returns created uuid def dbe_alloc(self, obj_type, obj_dict, uuid_requested=None): try: if uuid_requested: @@ -1062,20 +985,7 @@ def dbe_alloc(self, obj_type, obj_dict, uuid_requested=None): except ResourceExistsError as e: return (False, (409, str(e))) - parent_res_type = obj_dict.get('parent_type') - obj_class = self.get_resource_class(obj_type) - (ok, result) = self._ifmap_db.object_alloc( - obj_class, parent_res_type, obj_dict['fq_name']) - if not ok: - self.dbe_release(obj_type, obj_dict['fq_name']) - return False, result - - (my_imid, parent_imid) = result - obj_ids = { - 'uuid': obj_dict['uuid'], - 'imid': my_imid, - 'parent_imid': parent_imid - } + obj_ids = { 'uuid': obj_dict['uuid'] } return (True, obj_ids) # end dbe_alloc @@ -1085,9 +995,8 @@ def dbe_uve_trace(self, oper, type, uuid, obj_dict): return if type == 'bgp_router': - if 'bgp_router_parameters' not in obj_dict or\ - 'router_type' not in obj_dict['bgp_router_parameters'] or\ - obj_dict['bgp_router_parameters']['router_type'] != 'control-node': + if (obj_dict.get('bgp_router_parameters', {}).get('router_type') != + 'control-node'): return oper = oper.upper() @@ -1202,13 +1111,13 @@ def dbe_create(self, obj_type, obj_ids, obj_dict): obj_type, obj_ids['uuid'], obj_dict) if ok: - # publish to ifmap via msgbus + # publish to msgbus self._msgbus.dbe_create_publish(obj_type, obj_ids, obj_dict) return (ok, result) # end dbe_create - # input id is ifmap-id + uuid + # input id is uuid def dbe_read(self, obj_type, obj_ids, obj_fields=None, ret_readonly=False): try: @@ -1269,7 +1178,7 @@ def dbe_update(self, obj_type, obj_ids, new_obj_dict): (ok, cassandra_result) = self._object_db.object_update( obj_type, obj_ids['uuid'], new_obj_dict) - # publish to ifmap via message bus (rabbitmq) + # publish to message bus (rabbitmq) self._msgbus.dbe_update_publish(obj_type, obj_ids) return (ok, cassandra_result) @@ -1359,7 +1268,7 @@ def dbe_delete(self, obj_type, obj_ids, obj_dict): (ok, cassandra_result) = self._object_db.object_delete( obj_type, obj_ids['uuid']) - # publish to ifmap via message bus (rabbitmq) + # publish to message bus (rabbitmq) self._msgbus.dbe_delete_publish(obj_type, obj_ids, obj_dict) # finally remove mapping in zk @@ -1535,11 +1444,6 @@ def get_shared_objects(self, obj_type, tenant_uuid, domain_uuid): # end get_shared_objects def reset(self): - if self.get_worker_id() == 0: - if self._self_managed_ifmap_server: - VncIfmapServer.reset_graph() - else: - self._ifmap_db.reset() self._msgbus.reset() # end reset diff --git a/src/config/api-server/vnc_ifmap.py b/src/config/api-server/vnc_ifmap.py deleted file mode 100644 index 3f899f1908e..00000000000 --- a/src/config/api-server/vnc_ifmap.py +++ /dev/null @@ -1,725 +0,0 @@ -# -# Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. -# - -from gevent import monkey -monkey.patch_all() - -from cStringIO import StringIO -from os import makedirs -from os.path import dirname -from os.path import exists -from pprint import pformat -import signal -from time import strftime -from time import time - -from bottle import Bottle -from bottle import HTTPError -from bottle import request -from bottle import response -from gevent.queue import Empty -from gevent.queue import PriorityQueue -from lxml import etree -from OpenSSL.crypto import dump_certificate -from OpenSSL.crypto import dump_privatekey -from OpenSSL.crypto import Error as crypto_error -from OpenSSL.crypto import FILETYPE_PEM -from OpenSSL.crypto import load_certificate -from OpenSSL.crypto import load_privatekey -from OpenSSL.crypto import PKey -from OpenSSL.crypto import TYPE_RSA -from OpenSSL.crypto import X509 - -from cfgm_common.ifmap.id import Identity -from cfgm_common.ifmap.metadata import Metadata -from cfgm_common.imid import escape -from cfgm_common.imid import get_ifmap_id_from_fq_name -from cfgm_common import jsonutils as json -from cfgm_common.utils import str_to_class -from gen.resource_xsd import * -from pysandesh.gen_py.sandesh.ttypes import SandeshLevel - -""" -Layer that transforms VNC config objects to ifmap representation, store them in -memory and serves them to controllers though minimalist HTTP IF-MAP server. -""" - - -class VncIfmapServer(Bottle): - r"""Limited IF-MAP v2 server for Contrail. - - Stores in memory the Contrail IF-MAP graph and exposes a limited IF-MAP - HTTP(S) server that permits control nodes to subscribe to the graph's root - and pool it. - - _graph is dict of ident_names where value for each key is dict with keys - 'ident' and 'links' - - 'ident' has ident xml element - - 'links' is a dict with keys of concat(' ') - and values of dict with 'meta' which has meta xml element and 'other' - which has other ident xml element - - cls._graph['contrail:network-ipam:default-domain:default-project:ipam2'] = - { - 'ident': u'', - 'links': { - 'contrail:id-perms': { - 'meta': u'...' - }, - 'contrail:project-network-ipam contrail:project:default-domain:\ - default-project': { - 'other': u'', - 'meta': u'...' - }, - 'contrail:virtual-network-network-ipam contrail:virtual-network:\ - default-domain:default-project:vn2': { - 'other': u'', - 'meta': u'...' - } - } - } - """ - - # NOTE(ethuleau): - # - use tuple for link keys instead of string (link with other ident) - # - Not sure we need to store reverse link in the dict graph - # - Purge stale subscriptions - # - - - # dict contains ifmap graph (as describe above) - _graph = dict() - # list of all subscribers indexed by session-id - _subscribe_list = [] - # XML envelope header - _RSP_ENVELOPE = \ - """ """\ - """ """\ - """ %(result)s """\ - """""" - # Max message item size in search, update and delete result poll request - _ITEM_MAX_MSG_SIZE = 7500000 - (len(_RSP_ENVELOPE) + 66) - - def __init__(self, db_client_mgr, args): - super(VncIfmapServer, self).__init__() - self._host = args.ifmap_listen_ip - self._port = args.ifmap_listen_port - self._db_client_mgr = db_client_mgr - self._key_path = args.ifmap_key_path - self._cert_path = args.ifmap_cert_path - self._credentials = args.ifmap_credentials - - # Set the signal handler to snapshot ifmap graph in temporary file - signal.signal(signal.SIGUSR2, VncIfmapServer._dump_ifmap_dict) - - # Define bottle routes - self.get('/', callback=self._export_xml) - self.post('/', callback=self._call) - - def _log(self, msg, level): - self._db_client_mgr.config_log(msg, level) - - def _create_self_signed_cert(self): - key = None - cert = None - - if exists(self._key_path): - try: - with open(self._key_path, 'r') as key_file: - key = load_privatekey(FILETYPE_PEM, key_file.read()) - except crypto_error: - pass - - if exists(self._cert_path): - try: - with open(self._cert_path, 'r') as cert_file: - cert = load_certificate(FILETYPE_PEM, cert_file.read()) - except crypto_error: - pass - - if key is None: - key = PKey() - key.generate_key(TYPE_RSA, 2048) - if not exists(dirname(self._key_path)): - makedirs(dirname(self._key_path)) - with open(self._key_path, "w") as key_file: - key_file.write( - dump_privatekey(FILETYPE_PEM, key)) - - if cert is None: - cert = X509() - cert.get_subject().C = "US" - cert.get_subject().ST = "California" - cert.get_subject().L = "Palo Alto" - cert.get_subject().O = "Juniper Networks" - cert.get_subject().OU = "Contrail" - cert.get_subject().CN = "Contrail's IF-MAP v2" - cert.set_serial_number(1) - cert.gmtime_adj_notBefore(0) - cert.gmtime_adj_notAfter(10*365*24*60*60) # Ten years - cert.set_issuer(cert.get_subject()) - cert.set_pubkey(key) - cert.sign(key, 'sha1') - - if not exists(dirname(self._cert_path)): - makedirs(dirname(self._cert_path)) - with open(self._cert_path, 'w') as cert_file: - cert_file.write(dump_certificate(FILETYPE_PEM, cert)) - - def _validate_session_id(self, method, xml_body): - if method == 'newSession': - return - - session_id = xml_body[0].get('session-id') - if (session_id is None or - int(session_id) > (len(self._subscribe_list) - 1)): - msg = ("Session ID %s was not found. Please create a new session." - % session_id) - self._log(msg, SandeshLevel.SYS_WARN) - result = etree.Element('errorResult', errorCode='InvalidSessionID') - err_str = etree.SubElement(result, 'errorString') - err_str.text = msg - return self._RSP_ENVELOPE % {'result': etree.tostring(result)} - - def _export_xml(self): - response.content_type = 'text/xml; charset="UTF-8"' - buffer = StringIO() - VncIfmapServer._export_root_graph(buffer) - result = buffer.getvalue() - result = ('%s' - '' % buffer.getvalue()) - buffer.close - return self._RSP_ENVELOPE % {'result': result} - - @classmethod - def _export_root_graph(cls, outfile): - graph = cls._graph.copy() - visited_links = set() - for id_name in graph: - ident = graph[id_name]['ident'] - property_items = '' - for link_key, link_info in graph[id_name]['links'].iteritems(): - if link_info is None or link_info.get('meta') is None: - continue - if link_info.get('other') is not None: - if '%s %s' % (link_info['other'], ident) in visited_links: - continue - outfile.write('%s%s%s' % - (ident, link_info['other'], - link_info['meta'])) - visited_links.add('%s %s' % (ident, link_info['other'])) - else: - property_items += link_info['meta'][10:-11] - if property_items: - outfile.write('%s%s' - '' % - (ident, property_items)) - - @classmethod - def _dump_ifmap_dict(cls, signum, frame): - file_name = ('/tmp/api-server-ifmap-dict_%s.txt' % - strftime('%Y%m%d-%H%M%S')) - with open(file_name, "w") as file: - file.write(pformat(cls._graph)) - - @classmethod - def get_links(cls, id_name): - """Return a copy of links of an IF-MAP identity.""" - if id_name in cls._graph: - return cls._graph[id_name].get('links', {}).copy() - return {} - - @classmethod - def update(cls, id1_name, id2_name=None, metadatas=None): - """Create or update identity with link and metadata provided.""" - if metadatas is None or not metadatas: - return - - id1_str = unicode(Identity(name=id1_name, type="other", - other_type="extended")) - if id1_name not in cls._graph: - cls._graph[id1_name] = {'ident': id1_str, 'links': {}} - - if id2_name is None: - property_items = '' - for metadata in metadatas: - metadata_name = metadata._Metadata__name - meta_string = unicode(metadata) - - link_key = metadata_name - link_info = {'meta': meta_string} - cls._graph[id1_name]['links'][link_key] = link_info - property_items += meta_string[10:-11] - if property_items: - items = ('%s%s' % - (id1_str, property_items)) - else: - id2_str = unicode(Identity(name=id2_name, type="other", - other_type="extended")) - if id2_name not in cls._graph: - cls._graph[id2_name] = {'ident': id2_str, 'links': {}} - - items = '' - for metadata in metadatas: - metadata_name = metadata._Metadata__name - meta_string = unicode(metadata) - - link_key = '%s %s' % (metadata_name, id2_name) - link_info = {'meta': meta_string, 'other': id2_str} - cls._graph[id1_name]['links'][link_key] = link_info - items += "%s%s%s" % (id1_str, id2_str, - meta_string) - - link_key = '%s %s' % (metadata_name, id1_name) - link_info = {'meta': meta_string, 'other': id1_str} - cls._graph[id2_name]['links'][link_key] = link_info - - for queue in cls._subscribe_list: - if queue is not None: - queue.put((2, time(), 'updateResult', items)) - - @classmethod - def delete(cls, id_name, link_keys=None): - """Delete metadata and link of an identity. - - If no link or metadata provided, all the identity is evinced - """ - if cls._graph.get(id_name) is None: - return - id_str = cls._graph[id_name].get('ident') - if id_str is None or cls._graph[id_name].get('links') is None: - # Stale ifmap identity, remove it and ignore it - del cls._graph.get[id_name] - return - - if link_keys: - items = '' - property_items = '' - for link_key in link_keys: - link_info = cls._graph[id_name]['links'].pop(link_key, None) - if link_info is None: - continue - metadata = link_info['meta'] - if link_info.get('other') is None: - property_items += metadata[10:-11] - else: - meta_name = link_key.split()[0] - other_name = link_key.split()[1] - rev_link_key = '%s %s' % (meta_name, id_name) - if other_name in cls._graph: - cls._graph[other_name]['links'].pop(rev_link_key, None) - items += "%s%s%s" %\ - (id_str, link_info['other'], link_info['meta']) - # delete ident if no links left - if not cls._graph[other_name]['links']: - del cls._graph[other_name] - if property_items: - items += ('%s%s' - % (id_str, property_items)) - # delete ident if no links left - if not cls._graph[id_name]['links']: - del cls._graph[id_name] - - for queue in cls._subscribe_list: - if queue is not None: - queue.put((2, time(), 'deleteResult', items)) - else: - # No links provided, delete all ident's links - cls.delete(id_name, cls.get_links(id_name).keys()) - - @classmethod - def reset_graph(cls): - """Wipe all IF-MAP graph and revoke all subscriptions.""" - cls._graph.clear() - cls._subscribe_list = [] - - def _call(self): - if request.auth not in self._credentials: - error = HTTPError(401, "Access denied") - error.add_header('WWW-Authenticate', 'Basic realm="private"') - return error - - method = request.headers.get('SOAPAction') - xml_body = etree.fromstring(request.body.read())[0] - response.content_type = 'text/xml; charset="UTF-8"' - - valide_session_response = self._validate_session_id(method, xml_body) - if valide_session_response is not None: - return valide_session_response - - if method == 'newSession': - result = etree.Element('newSessionResult') - session_id = len(self._subscribe_list) - result.set("session-id", str(session_id)) - result.set("ifmap-publisher-id", "111") - result.set("max-poll-result-size", str(self._ITEM_MAX_MSG_SIZE)) - self._subscribe_list.append(None) - msg = "New session %d established." % session_id - self._log(msg, SandeshLevel.SYS_DEBUG) - return self._RSP_ENVELOPE % {'result': etree.tostring(result)} - elif method == 'subscribe': - session_id = int(xml_body[0].get('session-id')) - self._subscribe_list[session_id] = PriorityQueue() - buffer = StringIO() - try: - VncIfmapServer._export_root_graph(buffer) - self._subscribe_list[session_id].put( - (1, time(), 'searchResult', buffer.getvalue())) - finally: - buffer.close() - result = etree.Element('subscribeReceived') - msg = "Session %d has subscribed to the root graph" % session_id - self._log(msg, SandeshLevel.SYS_DEBUG) - return self._RSP_ENVELOPE % {'result': etree.tostring(result)} - elif method == 'poll': - session_id = int(xml_body[0].get('session-id')) - queue = self._subscribe_list[session_id] - if queue is None: - msg = "Session ID %d did not subscribed to the graph's root. "\ - "Please subscribe before polling." % session_id - self._log(msg, SandeshLevel.SYS_WARN) - result = etree.Element('errorResult', errorCode='AccessDenied') - err_str = etree.SubElement(result, 'errorString') - err_str.text = msg - return self._RSP_ENVELOPE % {'result': etree.tostring(result)} - - _, _, action, items = queue.get() - while True: - try: - _, _, new_action, new_item = queue.peek(timeout=1) - except Empty: - break - if new_action != action: - break - if (len(items) + len(new_item)) > self._ITEM_MAX_MSG_SIZE: - break - try: - items += queue.get_nowait()[3] - except Empty: - break - - poll_str = ('<%s name="root">%s' % - (action, items, action)) - msg = "Session %d polled and get %s" % (session_id, action) - self._log(msg, SandeshLevel.SYS_DEBUG) - return self._RSP_ENVELOPE % {'result': poll_str} - elif method == 'search': - # grab ident string; lookup graph with match meta and return - start_name = xml_body[0][0].get('name') - match_links = xml_body[0].get('match-links', 'all') - if match_links != 'all': - match_links = set(match_links.split(' or ')) - result_filter = xml_body[0].get('result-filter', 'all') - if result_filter != 'all': - result_filter = set(result_filter.split(' or ')) - - visited_nodes = set([]) - result_items = [] - def visit_node(ident_name): - if ident_name in visited_nodes: - return - visited_nodes.add(ident_name) - # add all metas on current to result, visit further nodes - to_visit_nodes = set([]) - ident_str = VncIfmapServer._graph[ident_name]['ident'] - links = VncIfmapServer._graph[ident_name]['links'] - property_items = '' - for link_key, link_info in links.iteritems(): - meta_name = link_key.split()[0] - if 'other' in link_info: - to_visit_nodes.add(link_key.split()[1]) - if (result_filter != 'all' and - meta_name in result_filter): - result_items.append( - '%s%s%s' % (ident_str, - link_info['other'], link_info['meta'])) - elif (result_filter != 'all' and - meta_name in result_filter): - property_items += link_info['meta'][10:-11] - if property_items: - result_items.append('%s%s' - '' % - (ident_str, property_items)) - - # all metas on ident walked - for new_node in to_visit_nodes: - visit_node(new_node) - # end visit_node - - visit_node(start_name) - - search_str = ('%s' % - ''.join(result_items)) - return VncIfmapServer._RSP_ENVELOPE % {'result': search_str} - else: - msg = "IF-MAP method '%s' is not implemented." % method - self._log(msg, level=SandeshLevel.SYS_DEBUG) - result = etree.Element('errorResult', errorCode='InvalidMethod') - err_str = etree.SubElement(result, 'errorString') - err_str.text = msg - return self._RSP_ENVELOPE % {'result': etree.tostring(result)} - - def run_server(self): - """Start to bind custom IF-MAP server.""" - self._create_self_signed_cert() - - try: - self.run(host=self._host, port=self._port, server='gevent', - server_side=True, keyfile=self._key_path, - certfile=self._cert_path) - except KeyboardInterrupt: - # quietly handle Ctrl-C - pass - - -class VncIfmapDb(object): - """Transforms VNC config objects to IF-MAP representation. - - Transforms VNC config objects to ifmap representation and store them in - the VncIfmapServer _graph dict directly, don't use the IF-MAP HTTP API. - """ - - # If the property is not relevant at all, define the property - # with None. If it is partially relevant, then define the fn. - # which would handcraft the generated xml for the object. - IFMAP_PUBLISH_SKIP_LIST = { - # Format - : None | - u"perms2": None, - u"id_perms": '_build_idperms_ifmap_obj', - } - - def __init__(self, db_client_mgr): - self._db_client_mgr = db_client_mgr - - def _log(self, msg, level): - self._db_client_mgr.config_log(msg, level) - - @staticmethod - def _build_idperms_ifmap_obj(prop_field, values): - prop_xml = u'' - prop_xml += unicode(json.dumps(values[u'uuid'][u'uuid_mslong'])) - prop_xml += u'' - prop_xml += unicode(json.dumps(values[u'uuid'][u'uuid_lslong'])) - prop_xml += u'' - prop_xml += unicode(json.dumps(values[u'enable'])) - prop_xml += u'' - return prop_xml - - @staticmethod - def object_alloc(obj_class, parent_res_type, fq_name): - """Allocate IF-MAP ID of the resource and its parent.""" - res_type = obj_class.resource_type - my_fqn = ':'.join(fq_name) - parent_fqn = ':'.join(fq_name[:-1]) - - ifmap_id = 'contrail:%s:%s' % (res_type, my_fqn) - if parent_fqn: - if parent_res_type is None: - err_msg = "Parent: %s type is none for: %s" % (parent_fqn, - my_fqn) - return False, (409, err_msg) - parent_ifmap_id = 'contrail:' + parent_res_type + ':' + parent_fqn - else: # parent is config-root - parent_ifmap_id = 'contrail:config-root:root' - - return True, (escape(ifmap_id), escape(parent_ifmap_id)) - - def _object_set(self, obj_class, ifmap_id, obj_dict, existing_links=None): - # Properties Metadata - metadatas = [] - for prop_field in obj_class.prop_fields: - prop_value = obj_dict.get(prop_field) - if prop_value is None: - continue - # construct object of xsd-type and get its xml repr - # e.g. virtual_network_properties - prop_field_types = obj_class.prop_field_types[prop_field] - is_simple = not prop_field_types['is_complex'] - prop_type = prop_field_types['xsd_type'] - # e.g. virtual-network-properties - meta_name = obj_class.prop_field_metas[prop_field] - meta_long_name = 'contrail:%s' % meta_name - meta_value = '' - meta_elements = '' - - if prop_field in self.IFMAP_PUBLISH_SKIP_LIST: - # Field not relevant, skip publishing to IfMap - if not self.IFMAP_PUBLISH_SKIP_LIST[prop_field]: - continue - # Call the handler fn to generate the relevant fields. - try: - func = getattr(self, - self.IFMAP_PUBLISH_SKIP_LIST[prop_field]) - meta_elements = func(prop_field, prop_value) - except AttributeError: - log_str = ("%s is marked for partial publish to Ifmap but " - "handler not defined" % prop_field) - self._log(log_str, level=SandeshLevel.SYS_DEBUG) - continue - elif is_simple: - meta_value = escape(str(prop_value)) - else: # complex type - prop_cls = str_to_class(prop_type, __name__) - buf = StringIO() - # perms might be inserted at server as obj. - # obj construction diff from dict construction. - if isinstance(prop_value, dict): - prop_cls(**prop_value).exportChildren(buf, - level=1, - name_=meta_name, - pretty_print=False) - elif isinstance(prop_value, list): - for elem in prop_value: - if isinstance(elem, dict): - prop_cls(**elem).exportChildren(buf, - level=1, - name_=meta_name, - pretty_print=False) - else: - elem.exportChildren(buf, - level=1, - name_=meta_name, - pretty_print=False) - else: # object - prop_value.exportChildren(buf, - level=1, - name_=meta_name, - pretty_print=False) - meta_elements = buf.getvalue() - buf.close() - meta = Metadata(meta_name, - meta_value, - {'ifmap-cardinality': 'singleValue'}, - ns_prefix='contrail', - elements=meta_elements) - # If obj is new (existing metas is none) or - # if obj does not have this meta (or) - # or if the meta is different from what we have currently, - # then update - if (not existing_links or - meta_long_name not in existing_links or - ('meta' in existing_links[meta_long_name] and - unicode(meta) != existing_links[meta_long_name]['meta'])): - metadatas.append(meta) - # end for all property types - VncIfmapServer.update(ifmap_id, metadatas=metadatas) - - # References Metadata - for ref_field in obj_class.ref_fields: - refs = obj_dict.get(ref_field) - if not refs: - continue - - for ref in refs: - ref_fq_name = ref['to'] - ref_fld_types_list = list(obj_class.ref_field_types[ref_field]) - ref_res_type = ref_fld_types_list[0] - ref_link_type = ref_fld_types_list[1] - ref_meta = obj_class.ref_field_metas[ref_field] - ref_ifmap_id = get_ifmap_id_from_fq_name(ref_res_type, - ref_fq_name) - ref_data = ref.get('attr') - if ref_data: - buf = StringIO() - attr_cls = str_to_class(ref_link_type, __name__) - attr_cls(**ref_data).exportChildren(buf, - level=1, - name_=ref_meta, - pretty_print=False) - ref_link_xml = buf.getvalue() - buf.close() - else: - ref_link_xml = '' - metadata = Metadata(ref_meta, - '', - {'ifmap-cardinality': 'singleValue'}, - ns_prefix='contrail', - elements=ref_link_xml) - VncIfmapServer.update(ifmap_id, ref_ifmap_id, [metadata]) - # end for all ref types - return (True, '') - - def object_create(self, obj_ids, obj_dict): - """From resource ID, create the corresponding IF-MAP identity.""" - obj_ifmap_id = obj_ids['imid'] - obj_type = obj_ids['type'] - obj_class = self._db_client_mgr.get_resource_class(obj_type) - - if 'parent_type' not in obj_dict: - # parent is config-root - parent_type = 'config-root' - parent_ifmap_id = 'contrail:config-root:root' - else: - parent_type = obj_dict['parent_type'] - parent_ifmap_id = obj_ids.get('parent_imid', None) - - # Parent Link Meta - parent_cls = self._db_client_mgr.get_resource_class(parent_type) - parent_link_meta = parent_cls.children_field_metas.get( - '%ss' % (obj_type)) - if parent_link_meta: - metadata = Metadata(parent_link_meta, - '', - {'ifmap-cardinality': 'singleValue'}, - ns_prefix='contrail') - VncIfmapServer.update(parent_ifmap_id, obj_ifmap_id, - metadatas=[metadata]) - - return self._object_set(obj_class, obj_ifmap_id, obj_dict) - - def object_update(self, obj_cls, new_obj_dict): - """From resource ID, update the corresponding IF-MAP identity.""" - ifmap_id = get_ifmap_id_from_fq_name(obj_cls.resource_type, - new_obj_dict['fq_name']) - # read in refs from ifmap to determine which ones become inactive after - # update - existing_links = VncIfmapServer.get_links(ifmap_id) - - if not existing_links: - # UPDATE notify queued before CREATE notify, Skip publish to IFMAP. - return (True, '') - - # remove properties that are no longer active - delete_links = [] - for prop, meta in obj_cls.prop_field_metas.items(): - meta_name = 'contrail:%s' % meta - if meta_name in existing_links and new_obj_dict.get(prop) is None: - delete_links.append(meta_name) - - # remove refs that are no longer active - refs = dict((obj_cls.ref_field_metas[rf], - obj_cls.ref_field_types[rf][0]) - for rf in obj_cls.ref_fields) - # refs = {'virtual-network-qos-forwarding-class': 'qos-forwarding-...', - # 'virtual-network-network-ipam': 'network-ipam', - # 'virtual-network-network-policy': 'network-policy', - # 'virtual-network-route-table': 'route-table'} - for meta, ref_res_type in refs.items(): - old_refs = set(link_key for link_key in existing_links.keys() - if meta in link_key) - new_refs = set() - ref_obj_type = self._db_client_mgr.get_resource_class( - ref_res_type).object_type - for ref in new_obj_dict.get(ref_obj_type + '_refs', []): - to_imid = get_ifmap_id_from_fq_name(ref_res_type, ref['to']) - new_refs.add('contrail:%s %s' % (meta, to_imid)) - - delete_links.extend(list(old_refs - new_refs)) - - if delete_links: - VncIfmapServer.delete(ifmap_id, delete_links) - - return self._object_set(obj_cls, ifmap_id, new_obj_dict, - existing_links) - - def object_delete(self, obj_ids): - """From resource ID, delete the corresponding IF-MAP identity.""" - VncIfmapServer.delete(obj_ids['imid']) - return (True, '') diff --git a/src/config/api-server/vnc_ifmap_client.py b/src/config/api-server/vnc_ifmap_client.py deleted file mode 100644 index aca822bdd11..00000000000 --- a/src/config/api-server/vnc_ifmap_client.py +++ /dev/null @@ -1,790 +0,0 @@ -# -# Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. -# -from gevent import monkey; monkey.patch_all() - -import gevent -from gevent.queue import Queue, Empty -from lxml import etree -import socket -import signal -import cStringIO -import StringIO -import time - -from cfgm_common import ignore_exceptions -from cfgm_common import jsonutils as json -from cfgm_common.ifmap.client import client -from cfgm_common.ifmap.id import Identity -from cfgm_common.ifmap.metadata import Metadata -from cfgm_common.ifmap.operations import PublishDeleteOperation -from cfgm_common.ifmap.operations import PublishUpdateOperation -from cfgm_common.ifmap.request import EndSessionRequest -from cfgm_common.ifmap.request import NewSessionRequest -from cfgm_common.ifmap.request import PublishRequest -from cfgm_common.ifmap.response import newSessionResult -from cfgm_common.imid import escape -from cfgm_common.imid import ifmap_wipe -from cfgm_common.imid import get_ifmap_id_from_fq_name -from cfgm_common.imid import entity_is_present -from cfgm_common.utils import detailed_traceback -from cfgm_common.utils import str_to_class -from cfgm_common import vnc_greenlets -from gen.resource_xsd import * -from provision_defaults import Provision -from pysandesh.connection_info import ConnectionState -from pysandesh.gen_py.process_info.ttypes import ConnectionStatus -from pysandesh.gen_py.process_info.ttypes import ConnectionType as ConnType -from pysandesh.gen_py.sandesh.ttypes import SandeshLevel -from sandesh.traces.ttypes import IfmapTrace - - -@ignore_exceptions -def trace_msg(trace_objs=[], trace_name='', sandesh_hdl=None, error_msg=None): - for trace_obj in trace_objs: - if error_msg: - trace_obj.error = error_msg - trace_obj.trace_msg(name=trace_name, sandesh=sandesh_hdl) -# end trace_msg - - -def build_idperms_ifmap_obj(prop_field, values): - prop_xml = u'' - prop_xml += unicode(json.dumps(values[u'uuid'][u'uuid_mslong'])) - prop_xml += u'' - prop_xml += unicode(json.dumps(values[u'uuid'][u'uuid_lslong'])) - prop_xml += u'' - prop_xml += unicode(json.dumps(values[u'enable'])) - prop_xml += u'' - return prop_xml - - -class VncIfmapClient(object): - - # * Not all properties in an object needs to be published - # to IfMap. - # * In some properties, not all fields are relevant - # to be publised to IfMap. - # If the property is not relevant at all, define the property - # with None. If it is partially relevant, then define the fn. - # which would handcraft the generated xml for the object. - IFMAP_PUBLISH_SKIP_LIST = { - # Format - : None | - u"perms2" : None, - u"id_perms" : build_idperms_ifmap_obj - } - - def handler(self, signum, frame): - file = open("/tmp/api-server-ifmap-cache.txt", "w") - file.write(pformat(self._id_to_metas)) - file.close() - - def __init__(self, db_client_mgr, ifmap_srv_ip, ifmap_srv_port, - uname, passwd, ssl_options): - self._ifmap_srv_ip = ifmap_srv_ip - self._ifmap_srv_port = ifmap_srv_port - self._username = uname - self._password = passwd - self._ssl_options = ssl_options - self._dequeue_greenlet = None - self._CONTRAIL_XSD = "http://www.contrailsystems.com/vnc_cfg.xsd" - self._IPERMS_NAME = "id-perms" - self._NAMESPACES = { - 'env': "http://www.w3.org/2003/05/soap-envelope", - 'ifmap': "http://www.trustedcomputinggroup.org/2010/IFMAP/2", - 'meta': - "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2", - 'contrail': self._CONTRAIL_XSD - } - - self._db_client_mgr = db_client_mgr - self._sandesh = db_client_mgr._sandesh - - ConnectionState.update(conn_type = ConnType.IFMAP, - name = 'IfMap', status = ConnectionStatus.INIT, message = '', - server_addrs = ["%s:%s" % (ifmap_srv_ip, ifmap_srv_port)]) - self._conn_state = ConnectionStatus.INIT - self._is_ifmap_up = False - self._queue = Queue(self._get_api_server()._args.ifmap_queue_size) - - self.reset() - - # Set the signal handler - signal.signal(signal.SIGUSR2, self.handler) - - self._init_conn() - self._publish_config_root() - self._health_checker_greenlet =\ - vnc_greenlets.VncGreenlet('VNC IfMap Health Checker', - self._health_checker) - # end __init__ - - @classmethod - def object_alloc(cls, obj_class, parent_res_type, fq_name): - res_type = obj_class.resource_type - my_fqn = ':'.join(fq_name) - parent_fqn = ':'.join(fq_name[:-1]) - - my_imid = 'contrail:%s:%s' %(res_type, my_fqn) - if parent_fqn: - if parent_res_type is None: - err_msg = "Parent: %s type is none for: %s" % (parent_fqn, - my_fqn) - return False, (409, err_msg) - parent_imid = 'contrail:' + parent_res_type + ':' + parent_fqn - else: # parent is config-root - parent_imid = 'contrail:config-root:root' - - # Normalize/escape special chars - my_imid = escape(my_imid) - parent_imid = escape(parent_imid) - - return True, (my_imid, parent_imid) - # end object_alloc - - def object_set(self, obj_class, my_imid, existing_metas, obj_dict): - update = {} - - # Properties Meta - for prop_field in obj_class.prop_fields: - field = obj_dict.get(prop_field) - if field is None: - continue - # construct object of xsd-type and get its xml repr - # e.g. virtual_network_properties - prop_field_types = obj_class.prop_field_types[prop_field] - is_simple = not prop_field_types['is_complex'] - prop_type = prop_field_types['xsd_type'] - # e.g. virtual-network-properties - prop_meta = obj_class.prop_field_metas[prop_field] - - if prop_field in VncIfmapClient.IFMAP_PUBLISH_SKIP_LIST: - # Field not relevant, skip publishing to IfMap - if not VncIfmapClient.IFMAP_PUBLISH_SKIP_LIST[prop_field]: - continue - # Call the handler fn to generate the relevant fields. - if callable(VncIfmapClient.IFMAP_PUBLISH_SKIP_LIST[prop_field]): - prop_xml = VncIfmapClient.IFMAP_PUBLISH_SKIP_LIST[prop_field]( - prop_field, field) - meta = Metadata(prop_meta, '', - {'ifmap-cardinality':'singleValue'}, ns_prefix='contrail', - elements=prop_xml) - else: - log_str = '%s is marked for partial publish\ - to Ifmap but handler not defined' %( - prop_field) - self.config_log(log_str, level=SandeshLevel.SYS_DEBUG) - continue - elif is_simple: - norm_str = escape(str(field)) - meta = Metadata(prop_meta, norm_str, - {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail') - else: # complex type - prop_cls = str_to_class(prop_type, __name__) - buf = cStringIO.StringIO() - # perms might be inserted at server as obj. - # obj construction diff from dict construction. - if isinstance(field, dict): - prop_cls(**field).exportChildren( - buf, level=1, name_=prop_meta, pretty_print=False) - elif isinstance(field, list): - for elem in field: - if isinstance(elem, dict): - prop_cls(**elem).exportChildren( - buf, level=1, name_=prop_meta, pretty_print=False) - else: - elem.exportChildren( - buf, level=1, name_=prop_meta, pretty_print=False) - else: # object - field.exportChildren( - buf, level=1, name_=prop_meta, pretty_print=False) - prop_xml = buf.getvalue() - buf.close() - meta = Metadata(prop_meta, '', - {'ifmap-cardinality':'singleValue'}, ns_prefix='contrail', - elements=prop_xml) - - # If obj is new (existing metas is none) or - # if obj does not have this prop_meta (or) - # or if the prop_meta is different from what we have currently, - # then update - if (not existing_metas or - not prop_meta in existing_metas or - ('' in existing_metas[prop_meta] and - str(meta) != str(existing_metas[prop_meta]['']))): - self._update_id_self_meta(update, meta) - # end for all property types - - # References Meta - for ref_field in obj_class.ref_fields: - refs = obj_dict.get(ref_field) - if not refs: - continue - for ref in refs: - ref_fq_name = ref['to'] - ref_fld_types_list = list( - obj_class.ref_field_types[ref_field]) - ref_res_type = ref_fld_types_list[0] - ref_link_type = ref_fld_types_list[1] - ref_meta = obj_class.ref_field_metas[ref_field] - ref_imid = get_ifmap_id_from_fq_name(ref_res_type, ref_fq_name) - ref_data = ref.get('attr') - if ref_data: - buf = cStringIO.StringIO() - attr_cls = str_to_class(ref_link_type, __name__) - attr_cls(**ref_data).exportChildren( - buf, level=1, name_=ref_meta, pretty_print=False) - ref_link_xml = buf.getvalue() - buf.close() - else: - ref_link_xml = '' - meta = Metadata(ref_meta, '', - {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail', - elements=ref_link_xml) - self._update_id_pair_meta(update, ref_imid, meta) - # end for all ref types - - self._publish_update(my_imid, update) - return (True, '') - # end object_set - - def object_create(self, obj_ids, obj_dict): - obj_type = obj_ids['type'] - obj_class = self._db_client_mgr.get_resource_class(obj_type) - if not 'parent_type' in obj_dict: - # parent is config-root - parent_type = 'config-root' - parent_imid = 'contrail:config-root:root' - else: - parent_type = obj_dict['parent_type'] - parent_imid = obj_ids.get('parent_imid', None) - - # Parent Link Meta - update = {} - parent_cls = self._db_client_mgr.get_resource_class(parent_type) - parent_link_meta = parent_cls.children_field_metas.get('%ss' %(obj_type)) - if parent_link_meta: - meta = Metadata(parent_link_meta, '', - {'ifmap-cardinality':'singleValue'}, ns_prefix = 'contrail') - self._update_id_pair_meta(update, obj_ids['imid'], meta) - self._publish_update(parent_imid, update) - - (ok, result) = self.object_set(obj_class, obj_ids['imid'], None, obj_dict) - return (ok, result) - # end object_create - - def _object_read_to_meta_index(self, ifmap_id): - # metas is a dict where key is meta-name and val is list of dict of - # form [{'meta':meta}, {'id':id1, 'meta':meta}, {'id':id2, 'meta':meta}] - metas = {} - if ifmap_id in self._id_to_metas: - metas = self._id_to_metas[ifmap_id].copy() - return metas - # end _object_read_to_meta_index - - def object_update(self, obj_cls, new_obj_dict): - ifmap_id = get_ifmap_id_from_fq_name(obj_cls.resource_type, - new_obj_dict['fq_name']) - # read in refs from ifmap to determine which ones become inactive after update - existing_metas = self._object_read_to_meta_index(ifmap_id) - - if not existing_metas: - # UPDATE notify queued before CREATE notify, Skip publish to IFMAP. - return (True, '') - - # remove properties that are no longer active - props = obj_cls.prop_field_metas - for prop, meta in props.items(): - if meta in existing_metas and new_obj_dict.get(prop) is None: - self._delete_id_self_meta(ifmap_id, meta) - - # remove refs that are no longer active - delete_list = [] - refs = dict((obj_cls.ref_field_metas[rf], - obj_cls.ref_field_types[rf][0]) - for rf in obj_cls.ref_fields) - #refs = {'virtual-network-qos-forwarding-class': 'qos-forwarding-class', - # 'virtual-network-network-ipam': 'network-ipam', - # 'virtual-network-network-policy': 'network-policy', - # 'virtual-network-route-table': 'route-table'} - for meta, ref_res_type in refs.items(): - old_set = set(existing_metas.get(meta, {}).keys()) - new_set = set() - ref_obj_type = self._db_client_mgr.get_resource_class( - ref_res_type).object_type - for ref in new_obj_dict.get(ref_obj_type+'_refs', []): - to_imid = get_ifmap_id_from_fq_name(ref_res_type, ref['to']) - new_set.add(to_imid) - - for inact_ref in old_set - new_set: - delete_list.append((inact_ref, meta)) - - if delete_list: - self._delete_id_pair_meta_list(ifmap_id, delete_list) - - (ok, result) = self.object_set(obj_cls, ifmap_id, existing_metas, new_obj_dict) - return (ok, result) - # end object_update - - def object_delete(self, obj_ids): - ifmap_id = obj_ids['imid'] - parent_imid = obj_ids.get('parent_imid') - existing_metas = self._object_read_to_meta_index(ifmap_id) - meta_list = [] - for meta_name, meta_infos in existing_metas.items(): - # Delete all refs/links in the object. - # Refs are identified when the key is a non-empty string. - meta_list.extend( - [(k, meta_name) - for k in meta_infos if k != '']) - - if parent_imid: - # Remove link from parent - meta_list.append((parent_imid, None)) - - if meta_list: - self._delete_id_pair_meta_list(ifmap_id, meta_list) - - # Remove all property metadata associated with this ident - self._delete_id_self_meta(ifmap_id, None) - - return (True, '') - # end object_delete - - def _init_conn(self): - self._mapclient = client(("%s" % (self._ifmap_srv_ip), - "%s" % (self._ifmap_srv_port)), - self._username, self._password, - self._NAMESPACES, self._ssl_options) - - connected = False - while not connected: - try: - resp_xml = self._mapclient.call('newSession', NewSessionRequest()) - except socket.error as e: - msg = 'Failed to establish IF-MAP connection: %s' % str(e) - self.config_log(msg, level=SandeshLevel.SYS_WARN) - time.sleep(3) - continue - - resp_doc = etree.parse(StringIO.StringIO(resp_xml)) - err_codes = resp_doc.xpath( - '/env:Envelope/env:Body/ifmap:response/errorResult/@errorCode', - namespaces=self._NAMESPACES) - if not err_codes: - connected = True - else: - msg = "Failed to establish IF-MAP connection: %s" % err_codes - self.config_log(msg, level=SandeshLevel.SYS_WARN) - session_id = self._mapclient.get_session_id() - try: - self._mapclient.call('endSession', - EndSessionRequest(session_id)) - except socket.error as e: - msg = "Failed to end the IF-MAP session %s: %s" %\ - (session_id, str(e)) - self.config_log(msg, level=SandeshLevel.SYS_WARN) - time.sleep(3) - - ConnectionState.update(conn_type = ConnType.IFMAP, - name = 'IfMap', status = ConnectionStatus.UP, message = '', - server_addrs = ["%s:%s" % (self._ifmap_srv_ip, - self._ifmap_srv_port)]) - self._conn_state = ConnectionStatus.UP - msg = 'IFMAP connection ESTABLISHED' - self.config_log(msg, level=SandeshLevel.SYS_NOTICE) - - self._mapclient.set_session_id( - newSessionResult(resp_xml).get_session_id()) - self._mapclient.set_publisher_id( - newSessionResult(resp_xml).get_publisher_id()) - # end _init_conn - - def _get_api_server(self): - return self._db_client_mgr._api_svr_mgr - # end _get_api_server - - def reset(self): - self._id_to_metas = {} - while not self._queue.empty(): - self._queue.get_nowait() - - if (self._dequeue_greenlet is not None and - gevent.getcurrent() != self._dequeue_greenlet): - self._dequeue_greenlet.kill() - self._dequeue_greenlet =\ - vnc_greenlets.VncGreenlet("VNC IfMap Dequeue", - self._ifmap_dequeue_task) - - # end reset - - def _publish_config_root(self): - # Remove all resident data - result = ifmap_wipe(self._mapclient) - if result is None: - msg = "Cannot purge the IF-MAP server before publishing root graph" - self.config_log(msg, level=SandeshLevel.SYS_WARN) - # Build default config-root - buf = cStringIO.StringIO() - perms = Provision.defaults.perms - perms.exportChildren(buf, level=1, pretty_print=False) - id_perms_xml = buf.getvalue() - buf.close() - update = {} - meta = Metadata(self._IPERMS_NAME, '', - {'ifmap-cardinality': 'singleValue'}, - ns_prefix='contrail', elements=id_perms_xml) - self._update_id_self_meta(update, meta) - self._publish_update("contrail:config-root:root", update) - # end _publish_config_root - - def config_log(self, msg, level): - self._db_client_mgr.config_log(msg, level) - # end config_log - - @ignore_exceptions - def _generate_ifmap_trace(self, oper, body): - req_id = get_trace_id() - ifmap_trace = IfmapTrace(request_id=req_id) - ifmap_trace.operation = oper - ifmap_trace.body = body - - return ifmap_trace - # end _generate_ifmap_trace - - def _publish_to_ifmap_enqueue(self, oper, oper_body, do_trace=True): - # safety check, if we proceed ifmap-server reports error - # asking for update|delete in publish - if not oper_body: - return - self._queue.put((oper, oper_body, do_trace)) - # end _publish_to_ifmap_enqueue - - def _ifmap_dequeue_task(self): - while True: - try: - self._publish_to_ifmap_dequeue() - except Exception as e: - tb = detailed_traceback() - self.config_log(tb, level=SandeshLevel.SYS_ERR) - - def _publish_to_ifmap_dequeue(self): - def _publish(requests, traces, publish_discovery=False): - if not requests: - return - ok = False - # Continue to trying publish requests until the queue is full. - # When queue is full, ifmap is totally resync from db - while not ok: - ok, err_msg = self._publish_to_ifmap(''.join(requests)) - if ok: - trace_msg(traces, 'IfmapTraceBuf', self._sandesh) - else: - trace_msg(traces, 'IfmapTraceBuf', self._sandesh, - error_msg=err_msg) - if publish_discovery and ok: - self._get_api_server().publish_ifmap_to_discovery() - self._is_ifmap_up = True - if not ok: - msg = ("%s. IF-MAP sending queue size: %d/%d" % - (err_msg, self._queue.qsize(), - self._get_api_server()._args.ifmap_queue_size)) - self.config_log(msg, level=SandeshLevel.SYS_WARN) - gevent.sleep(1) - # end _publish - - while True: - # block until there is data in the queue - (oper, oper_body, do_trace) = self._queue.get() - requests = [] - requests_len = 0 - traces = [] - while True: - # drain the queue till empty or max message size - # or change of oper because ifmap does not like - # different operations in same message - if oper == 'publish_discovery': - _publish(requests, traces, True) - break - if do_trace: - trace = self._generate_ifmap_trace(oper, oper_body) - traces.append(trace) - requests.append(oper_body) - requests_len += len(oper_body) - if (requests_len > - self._get_api_server()._args.ifmap_max_message_size): - _publish(requests, traces) - break - old_oper = oper - try: - (oper, oper_body, do_trace) = self._queue.get_nowait() - if oper != old_oper: - _publish(requests, traces) - requests = [] - requests_len = 0 - traces = [] - continue - except Empty: - _publish(requests, traces) - break - # end _publish_to_ifmap_dequeue - - def _publish_to_ifmap(self, oper_body): - try: - not_published = True - retry_count = 0 - resp_xml = None - while not_published: - sess_id = self._mapclient.get_session_id() - req_xml = PublishRequest(sess_id, oper_body) - resp_xml = self._mapclient.call('publish', req_xml) - - resp_doc = etree.parse(StringIO.StringIO(resp_xml)) - err_codes = resp_doc.xpath( - '/env:Envelope/env:Body/ifmap:response/errorResult/@errorCode', - namespaces=self._NAMESPACES) - if err_codes: - if retry_count == 0: - log_str = 'Error publishing to ifmap, req: %s, resp: %s' \ - %(req_xml, resp_xml) - self.config_log(log_str, level=SandeshLevel.SYS_ERR) - - ConnectionState.update( - conn_type = ConnType.IFMAP, - name = 'IfMap', - status = ConnectionStatus.INIT, - message = 'Session lost, renew it', - server_addrs = ["%s:%s" % (self._ifmap_srv_ip, - self._ifmap_srv_port)]) - self._conn_state = ConnectionStatus.INIT - self._is_ifmap_up = False - retry_count = retry_count + 1 - self._init_conn() - - if self._ifmap_restarted(): - msg = "IF-MAP servers restarted, re-populate it" - self.config_log(msg, level=SandeshLevel.SYS_ERR) - - self.reset() - self._get_api_server().publish_ifmap_to_discovery( - 'down', msg) - - self._publish_config_root() - self._db_client_mgr.db_resync() - self._publish_to_ifmap_enqueue('publish_discovery', 1) - - else: # successful publish - not_published = False - break - # end while not_published - - if retry_count: - log_str = 'Success publishing to ifmap after %d tries' \ - %(retry_count) - self.config_log(log_str, level=SandeshLevel.SYS_ERR) - - return True, resp_xml - except Exception as e: - # Failed to publish the operation due to unknown error. - # Probably a connection issue with the ifmap server. - msg = "Failed to publish request %s: %s" % (oper_body, str(e)) - return False, msg - # end _publish_to_ifmap - - def _build_request(self, id1_name, id2_name, meta_list, delete=False): - request = '' - id1 = unicode(Identity(name=id1_name, type="other", - other_type="extended")) - if id2_name != 'self': - id2 = unicode(Identity(name=id2_name, type="other", - other_type="extended")) - else: - id2 = None - for m in meta_list: - if delete: - filter = unicode(m) if m else None - op = PublishDeleteOperation(id1=id1, id2=id2, - filter=filter) - else: - op = PublishUpdateOperation(id1=id1, id2=id2, - metadata=unicode(m), - lifetime='forever') - request += unicode(op) - return request - - def _delete_id_self_meta(self, self_imid, meta_name): - contrail_metaname = 'contrail:' + meta_name if meta_name else None - del_str = self._build_request(self_imid, 'self', [contrail_metaname], - True) - self._publish_to_ifmap_enqueue('delete', del_str) - - try: - - # del meta from cache and del id if this was last meta - if meta_name: - del self._id_to_metas[self_imid][meta_name] - if not self._id_to_metas[self_imid]: - del self._id_to_metas[self_imid] - else: - del self._id_to_metas[self_imid] - - except KeyError: - # Case of delete received for an id which we do not know about. - # Could be a case of duplicate delete. - # There is nothing for us to do here. Just log and proceed. - msg = "Delete received for unknown imid(%s) meta_name(%s)." % \ - (self_imid, meta_name) - self.config_log(msg, level=SandeshLevel.SYS_DEBUG) - - # end _delete_id_self_meta - - def _delete_id_pair_meta_list(self, id1, meta_list): - del_str = '' - for id2, metadata in meta_list: - contrail_metadata = 'contrail:' + metadata if metadata else None - del_str += self._build_request(id1, id2, [contrail_metadata], True) - - self._publish_to_ifmap_enqueue('delete', del_str) - - # del meta,id2 from cache and del id if this was last meta - def _id_to_metas_delete(id1, id2, meta_name): - if id1 not in self._id_to_metas: - return - if meta_name not in self._id_to_metas[id1]: - return - if not self._id_to_metas[id1][meta_name]: - del self._id_to_metas[id1][meta_name] - if not self._id_to_metas[id1]: - del self._id_to_metas[id1] - return - - # if meta is prop, noop - if id2 in self._id_to_metas[id1][meta_name]: - del self._id_to_metas[id1][meta_name][id2] - #end _id_to_metas_delete - - for id2, metadata in meta_list: - if metadata: - # replace with remaining refs - _id_to_metas_delete(id1, id2, metadata) - _id_to_metas_delete(id2, id1, metadata) - else: # no meta specified remove all links from id1 to id2 - for meta_name in self._id_to_metas.get(id1, {}).keys(): - _id_to_metas_delete(id1, id2, meta_name) - for meta_name in self._id_to_metas.get(id2, {}).keys(): - _id_to_metas_delete(id2, id1, meta_name) - # end _delete_id_pair_meta_list - - def _update_id_self_meta(self, update, meta): - """ update: dictionary of the type - update[ | 'self'] = list(metadata) - """ - mlist = update.setdefault('self', []) - mlist.append(meta) - # end _update_id_self_meta - - def _update_id_pair_meta(self, update, to_id, meta): - mlist = update.setdefault(to_id, []) - mlist.append(meta) - # end _update_id_pair_meta - - def _publish_update(self, self_imid, update): - requests = [] - self_metas = self._id_to_metas.setdefault(self_imid, {}) - for id2, metalist in update.items(): - request = self._build_request(self_imid, id2, metalist) - - # remember what we wrote for diffing during next update - old_metalist = [] - for m in metalist: - meta_name = m._Metadata__name[9:] - - # Objects have two types of members - Props and refs/links. - # Props are cached in id_to_metas as - # id_to_metas[self_imid][meta_name][''] - # (with empty string as key) - - # Links are cached in id_to_metas as - # id_to_metas[self_imid][meta_name][id2] - # id2 is used as a key - - if id2 == 'self': - self_metas[meta_name] = {'' : m} - continue - - if meta_name in self_metas: - old_metalist.append(self_metas[meta_name]) - # Update the link/ref - self_metas[meta_name][id2] = m - else: - # Create a new link/ref - self_metas[meta_name] = {id2 : m} - - # Reverse linking from id2 to id1 - self._id_to_metas.setdefault(id2, {}) - - if meta_name in self._id_to_metas[id2]: - self._id_to_metas[id2][meta_name][self_imid] = m - else: - self._id_to_metas[id2][meta_name] = {self_imid : m} - - old_request = self._build_request(self_imid, id2, old_metalist) - if request != old_request: - requests.append(request) - - upd_str = ''.join(requests) - self._publish_to_ifmap_enqueue('update', upd_str) - # end _publish_update - - def _ifmap_restarted(self): - return not entity_is_present(self._mapclient, 'config-root', ['root']) - - def _health_checker(self): - while True: - try: - # do the healthcheck only if we are connected - if self._conn_state == ConnectionStatus.DOWN: - continue - meta = Metadata('display-name', '', - {'ifmap-cardinality': 'singleValue'}, - ns_prefix='contrail', elements='') - request_str = self._build_request('healthcheck', 'self', [meta]) - self._publish_to_ifmap_enqueue('update', request_str, do_trace=False) - - # Confirm the existence of the following default global entities in IFMAP. - search_list = [ - ('global-system-config', ['default-global-system-config']), - ] - for type, fq_name in search_list: - if not entity_is_present(self._mapclient, type, fq_name): - raise Exception("%s not found in IFMAP DB" % ':'.join(fq_name)) - - # If we had unpublished the IFMAP server to discovery server earlier - # publish it back now since it is valid now. - if not self._is_ifmap_up: - self._get_api_server().publish_ifmap_to_discovery('up', '') - self._is_ifmap_up = True - ConnectionState.update(conn_type = ConnType.IFMAP, - name = 'IfMap', - status = ConnectionStatus.UP, - message = '', - server_addrs = ["%s:%s" % (self._ifmap_srv_ip, - self._ifmap_srv_port)]) - except Exception as e: - log_str = 'IFMAP Healthcheck failed: %s' %(str(e)) - self.config_log(log_str, level=SandeshLevel.SYS_ERR) - if self._is_ifmap_up: - self._get_api_server().publish_ifmap_to_discovery('down', - 'IFMAP DB - Invalid state') - self._is_ifmap_up = False - ConnectionState.update(conn_type = ConnType.IFMAP, - name = 'IfMap', - status = ConnectionStatus.DOWN, - message = 'Invalid IFMAP DB State', - server_addrs = ["%s:%s" % (self._ifmap_srv_ip, - self._ifmap_srv_port)]) - finally: - gevent.sleep( - self._get_api_server().get_ifmap_health_check_interval()) - # end _health_checker -# end class VncIfmapClient diff --git a/src/config/common/SConscript b/src/config/common/SConscript index b0f3499be03..6a1a0ffd1ce 100644 --- a/src/config/common/SConscript +++ b/src/config/common/SConscript @@ -26,7 +26,6 @@ local_sources = [ 'utils.py', 'rbaclib.py', 'jsonutils.py', - 'imid.py', 'svc_info.py', 'rest.py', 'vnc_plugin_base.py', diff --git a/src/config/common/imid.py b/src/config/common/imid.py deleted file mode 100644 index 9b2b765910e..00000000000 --- a/src/config/common/imid.py +++ /dev/null @@ -1,390 +0,0 @@ -# -# Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. -# -# This file deals with the ifmap id handling for both vnc-user-visible entities -# and bgp-visible entities - -import uuid -import re -import StringIO -from lxml import etree -import gevent -import socket - -from cfgm_common import exceptions -from cfgm_common.ifmap.client import client -from ifmap.request import NewSessionRequest, RenewSessionRequest, \ - EndSessionRequest, PublishRequest, SearchRequest, \ - SubscribeRequest, PurgeRequest, PollRequest -from ifmap.id import IPAddress, MACAddress, Device, AccessRequest, Identity, \ - CustomIdentity -from ifmap.operations import PublishUpdateOperation, PublishNotifyOperation, \ - PublishDeleteOperation, SubscribeUpdateOperation,\ - SubscribeDeleteOperation -from ifmap.util import attr, link_ids -from ifmap.response import Response, newSessionResult -from ifmap.metadata import Metadata - -_XML_ESCAPE_SEARCH_PATTERN = re.compile(r'[<>&\"\']').search -_XML_UNESCAPE_SEARCH_PATTERN = re.compile(r'(&|<|>|"|')').search - -_TENANT_GRP = "(?P.*)" -_VPC_GRP = "(?P.*)" -_VN_GRP = "(?P.*)" -_SG_GRP = "(?P.*)" -_POL_GRP = "(?P.*)" -_INST_GRP = "(?P.*)" -_PORT_GRP = "(?P.*)" - -_TENANT_ID_RE = "contrail:tenant:%s" % (_TENANT_GRP) -_VPC_NAME_RE = "contrail:network-group:%s:%s" % (_TENANT_GRP, _VPC_GRP) -_VN_NAME_RE = "contrail:virtual-network:%s:%s:%s" % ( - _TENANT_GRP, _VPC_GRP, _VN_GRP) -_SG_NAME_RE = "contrail:security-group:%s:%s:%s" % ( - _TENANT_GRP, _VPC_GRP, _SG_GRP) -_POL_NAME_RE = "contrail:policy:%s:%s:%s" % (_TENANT_GRP, _VPC_GRP, _POL_GRP) -_INST_ID_RE = "contrail:instance:%s:%s:%s:%s" \ - % (_TENANT_GRP, _VPC_GRP, _VN_GRP, _INST_GRP) -_PORT_ID_RE = "contrail:port:%s:%s:%s:%s:%s" \ - % (_TENANT_GRP, _VPC_GRP, _VN_GRP, _INST_GRP, _PORT_GRP) - -_CT_NS = "contrail" -_ROOT_IMID = _CT_NS + ":config-root:root" - -_SOAP_XSD = "http://www.w3.org/2003/05/soap-envelope" -_IFMAP_XSD = "http://www.trustedcomputinggroup.org/2010/IFMAP/2" -_IFMAP_META_XSD = "http://www.trustedcomputinggroup.org/2010/IFMAP-METADATA/2" -_CONTRAIL_XSD = "http://www.contrailsystems.com/vnc_cfg.xsd" - -# Parse ifmap-server returned search results and create list of tuples -# of (ident-1, ident-2, link-attribs) - - -def parse_result_items(result_items, my_imid=None): - all_result_list = [] - for r_item in result_items: - children = r_item.getchildren() - num_children = len(children) - if num_children == 1: # ignore ident-only result-items - continue - elif num_children == 2: - result_info = [children[0], None, children[1]] - elif num_children == 3: - result_info = [children[0], children[1], children[2]] - else: - raise Exception('Result item of length %s not handled!' - % (num_children)) - all_result_list.append(result_info) - - if not my_imid: - return all_result_list - - # strip ones that don't originate from or to my_imid - filtered_result_list = [] - for (ident_1, ident_2, meta) in all_result_list: - if (((ident_2 is not None) and (ident_2.attrib['name'] == my_imid)) or - (ident_1.attrib['name'] == my_imid)): - if meta is None: - filtered_result_list.append((ident_1, ident_2, None)) - else: - # search gives all props under one metadata. expand it. - for m_elem in meta: - filtered_result_list.append((ident_1, ident_2, m_elem)) - - return filtered_result_list -# end parse_result_items - - -def get_ifmap_id_from_fq_name(type, fq_name): - my_fqn = ':' + ':'.join(fq_name) - my_imid = 'contrail:' + type + escape(my_fqn) - - return my_imid -# end get_ifmap_id_from_fq_name - - -def get_type_from_ifmap_id(ifmap_id): - type = ifmap_id.split(':')[1] - return type -# end get_type_from_ifmap_id - - -def get_fq_name_str_from_ifmap_id(ifmap_id): - return re.sub(r'contrail:.*?:', '', unescape(ifmap_id)) -# end get_fq_name_str_from_ifmap_id - - -def get_fq_name_from_ifmap_id(ifmap_id): - type = get_type_from_ifmap_id(ifmap_id) - # route-target has ':' in the name, so handle it as a special case - if type=='route-target': - return [':'.join(unescape(ifmap_id).split(':')[2:])] - return unescape(ifmap_id).split(':')[2:] -# end get_fq_name_from_ifmap_id - -def get_vm_id_from_interface(vmi_obj): - if vmi_obj.parent_type=='virtual-machine': - return vmi_obj.parent_uuid - else: - vm_refs = vmi_obj.get_virtual_machine_refs() - return vm_refs[0]['uuid'] if vm_refs else None -# end get_vmi_id_from_interface - -def subscribe_root(ssrc_mapc): - #self._ident_type_subscribe(_CLOUD_IMID, "ct:member-of") - ident = str(Identity(name=_ROOT_IMID, type="other", - other_type="extended")) - subreq = SubscribeRequest( - ssrc_mapc.get_session_id(), - operations=str(SubscribeUpdateOperation("root", ident, - {"max-depth": "255", }))) - - result = ssrc_mapc.call('subscribe', subreq) -# end _subscribe_root - - -def ssrc_initialize(args): - ssrc_mapc = ifmap_server_connect(args) - result = ssrc_mapc.call('newSession', NewSessionRequest()) - ssrc_mapc.set_session_id(newSessionResult(result).get_session_id()) - ssrc_mapc.set_publisher_id(newSessionResult(result).get_publisher_id()) - subscribe_root(ssrc_mapc) - return ssrc_mapc -# end ssrc_initialize - - -def arc_initialize(args, ssrc_mapc): - # - # Poll requests go on ARC channel which don't do newSession but - # share session-id with ssrc channel. so 2 connections to server but 1 - # session/session-id in ifmap-server (mamma mia!) - # - arc_mapc = ifmap_server_connect(args) - arc_mapc.set_session_id(ssrc_mapc.get_session_id()) - arc_mapc.set_publisher_id(ssrc_mapc.get_publisher_id()) - - return arc_mapc -# end arc_initialize - - -def ifmap_server_connect(args): - _CLIENT_NAMESPACES = { - 'env': _SOAP_XSD, - 'ifmap': _IFMAP_XSD, - 'meta': _IFMAP_META_XSD, - _CT_NS: _CONTRAIL_XSD - } - - ssl_options = None - if args.use_certs: - ssl_options = { - 'keyfile': args.keyfile, - 'certfile': args.certfile, - 'ca_certs': args.ca_certs, - 'cert_reqs': ssl.CERT_REQUIRED, - 'ciphers': 'ALL' - } - return client(("%s" % (args.ifmap_server_ip), - "%s" % (args.ifmap_server_port)), - args.ifmap_username, args.ifmap_password, - _CLIENT_NAMESPACES, ssl_options) -# end ifmap_server_connect - - -def parse_poll_result(poll_result_str): - _XPATH_NAMESPACES = { - 'a': _SOAP_XSD, - 'b': _IFMAP_XSD, - 'c': _CONTRAIL_XSD - } - - soap_doc = etree.parse(StringIO.StringIO(poll_result_str)) - #soap_doc.write(sys.stdout, pretty_print=True) - - xpath_error = '/a:Envelope/a:Body/b:response/errorResult' - error_results = soap_doc.xpath(xpath_error, - namespaces=_XPATH_NAMESPACES) - - if error_results: - if error_results[0].get('errorCode') == 'InvalidSessionID': - raise exceptions.InvalidSessionID(etree.tostring(error_results[0])) - raise Exception(etree.tostring(error_results[0])) - - xpath_expr = '/a:Envelope/a:Body/b:response/pollResult' - poll_results = soap_doc.xpath(xpath_expr, - namespaces=_XPATH_NAMESPACES) - - result_list = [] - for result in poll_results: - children = result.getchildren() - for child in children: - result_type = child.tag - if result_type == 'errorResult': - raise Exception(etree.tostring(child)) - - result_items = child.getchildren() - item_list = parse_result_items(result_items) - for item in item_list: - ident1 = item[0] - ident2 = item[1] - meta = item[2] - idents = {} - ident1_imid = ident1.attrib['name'] - ident1_type = get_type_from_ifmap_id(ident1_imid) - idents[ident1_type] = get_fq_name_str_from_ifmap_id( - ident1_imid) - if ident2 is not None: - ident2_imid = ident2.attrib['name'] - ident2_type = get_type_from_ifmap_id(ident2_imid) - if ident1_type == ident2_type: - idents[ident1_type] = [ - idents[ident1_type], - get_fq_name_str_from_ifmap_id(ident2_imid)] - else: - idents[ident2_type] = get_fq_name_str_from_ifmap_id( - ident2_imid) - result_list.append((result_type, idents, meta)) - return result_list -# end parse_poll_result - -def parse_search_result(search_result_str): - _XPATH_NAMESPACES = { - 'a': _SOAP_XSD, - 'b': _IFMAP_XSD, - 'c': _CONTRAIL_XSD - } - - if search_result_str is None: - return [] - - soap_doc = etree.parse(StringIO.StringIO(search_result_str)) - #soap_doc.write(sys.stdout, pretty_print=True) - - xpath_error = '/a:Envelope/a:Body/b:response/errorResult' - error_results = soap_doc.xpath(xpath_error, - namespaces=_XPATH_NAMESPACES) - - if error_results: - if error_results[0].get('errorCode') == 'InvalidSessionID': - raise exceptions.InvalidSessionID(etree.tostring(error_results[0])) - raise Exception(etree.tostring(error_results[0])) - - xpath_expr = '/a:Envelope/a:Body/b:response/searchResult' - search_results = soap_doc.xpath(xpath_expr, - namespaces=_XPATH_NAMESPACES) - - result_list = [] - for result in search_results: - result_items = result.getchildren() - item_list = parse_result_items(result_items) - for item in item_list: - ident1 = item[0] - ident2 = item[1] - meta = item[2] - idents = {} - ident1_imid = ident1.attrib['name'] - ident1_type = get_type_from_ifmap_id(ident1_imid) - idents[ident1_type] = get_fq_name_str_from_ifmap_id( - ident1_imid) - if ident2 is not None: - ident2_imid = ident2.attrib['name'] - ident2_type = get_type_from_ifmap_id(ident2_imid) - if ident1_type == ident2_type: - idents[ident1_type] = [ - idents[ident1_type], - get_fq_name_str_from_ifmap_id(ident2_imid)] - else: - idents[ident2_type] = get_fq_name_str_from_ifmap_id( - ident2_imid) - result_list.append((idents, meta)) - return result_list -# end parse_search_result - -def ifmap_call(mapclient, method, request_str): - retry = 0 - - while retry <= 3: - try: - return mapclient.call(method, request_str) - except socket.error as e: - retry += 1 - gevent.sleep(3) - -def ifmap_read(mapclient, ifmap_id, srch_meta=None, result_meta=None, - max_depth=10): - start_id = str( - Identity(name=ifmap_id, type='other', other_type='extended')) - - def _search(start_id, match_meta=None, result_meta=None, - max_depth=1): - # set ifmap search parmeters - srch_params = {} - srch_params['max-depth'] = str(max_depth) - srch_params['max-size'] = '50000000' - - if match_meta is not None: - srch_params['match-links'] = match_meta - - # all => don't set result-filter, so server returns all id + meta - if result_meta is None or result_meta == "all": - pass - else: - srch_params['result-filter'] = result_meta - - srch_req = SearchRequest(mapclient.get_session_id(), start_id, - search_parameters=srch_params - ) - - return ifmap_call(mapclient, 'search', srch_req) - # end _search - - return _search(start_id, srch_meta, result_meta, max_depth=max_depth) -# end ifmap_read - -def ifmap_read_all(mapclient, srch_meta=None, result_meta='all'): - return ifmap_read(mapclient, 'contrail:config-root:root', - srch_meta, result_meta) -# end ifmap_read_all - - -def entity_is_present(mapclient, type, fq_name): - ifmap_id = get_ifmap_id_from_fq_name(type, fq_name) - try: - search_results = parse_search_result(ifmap_read(mapclient, ifmap_id, - max_depth=1)) - if search_results is None: - return False - for ident, meta in search_results: - if (type == ident.keys()[0] and - ident.values()[0].split(':') == fq_name and - 'id-perms' in [c.xpath('local-name()') for c in meta]): - return True - except Exception: - return False - - -def ifmap_wipe(mapclient): - purge_req = PurgeRequest(mapclient.get_session_id(), - mapclient.get_publisher_id()) - return ifmap_call(mapclient, 'purge', purge_req) - - -def escape(data): - if _XML_ESCAPE_SEARCH_PATTERN(data): - return data.replace('&', r'&')\ - .replace('<', r'<')\ - .replace('>', r'>')\ - .replace('\"', r'"')\ - .replace('\'', r''') - return data -# end escape - -def unescape(data): - if _XML_UNESCAPE_SEARCH_PATTERN(data): - return data.replace('&', r'&')\ - .replace('<', r'<')\ - .replace('>', r'>')\ - .replace('"', r'"')\ - .replace(''', r"'") - return data -# end unescape diff --git a/src/config/common/tests/test_common.py b/src/config/common/tests/test_common.py index e304f1d7330..e1a32c46003 100644 --- a/src/config/common/tests/test_common.py +++ b/src/config/common/tests/test_common.py @@ -16,7 +16,6 @@ from flexmock import flexmock from webtest import TestApp import contextlib -from lxml import etree from netaddr import IPNetwork, IPAddress from vnc_api.vnc_api import * @@ -24,7 +23,6 @@ import discoveryclient.client as disc_client import cfgm_common.zkclient from cfgm_common.uve.vnc_api.ttypes import VncApiConfigLog -from cfgm_common import imid from cfgm_common import vnc_cgitb from cfgm_common.utils import cgitb_hook @@ -199,25 +197,18 @@ def create_api_server_instance(test_id, config_knobs, db=None): ret_server_info['service_port'] = get_free_port(allocated_sockets) ret_server_info['introspect_port'] = get_free_port(allocated_sockets) ret_server_info['admin_port'] = get_free_port(allocated_sockets) - ret_server_info['ifmap_port'] = get_free_port(allocated_sockets) ret_server_info['allocated_sockets'] = allocated_sockets - with_irond = [conf for conf in config_knobs - if (conf[0] == 'DEFAULTS' and conf[1] == 'ifmap_server_ip')] - if with_irond: - ret_server_info['ifmap_server_ip'] = with_irond[0][2] if db == "rdbms": ret_server_info['greenlet'] = gevent.spawn(launch_api_server_rdbms, test_id, ret_server_info['ip'], ret_server_info['service_port'], ret_server_info['introspect_port'], ret_server_info['admin_port'], - ret_server_info['ifmap_port'], config_knobs, - ret_server_info.get('ifmap_server_ip')) + config_knobs) else: # default cassandra backend ret_server_info['greenlet'] = gevent.spawn(launch_api_server, test_id, ret_server_info['ip'], ret_server_info['service_port'], ret_server_info['introspect_port'], ret_server_info['admin_port'], - ret_server_info['ifmap_port'], config_knobs, - ret_server_info.get('ifmap_server_ip')) + config_knobs) block_till_port_listened(ret_server_info['ip'], ret_server_info['service_port']) extra_env = {'HTTP_HOST': ret_server_info['ip'], @@ -248,10 +239,6 @@ def destroy_api_server_instance(server_info): vhost_url = server_info['api_server']._db_conn._msgbus._urls FakeKombu.reset(vhost_url) FakeNovaClient.reset() - if server_info.get('ifmap_server_ip') is not None: - FakeIfmapClient.reset(server_info['ifmap_port']) - else: - vnc_cfg_api_server.VncIfmapServer.reset_graph() CassandraCFs.reset() FakeKazooClient.reset() FakeExtensionManager.reset() @@ -268,24 +255,12 @@ def destroy_api_server_instance_issu(server_info): # end destroy_api_server_instance def launch_api_server(test_id, listen_ip, listen_port, http_server_port, - admin_port, ifmap_port, conf_sections, - ifmap_server_ip=None): + admin_port, conf_sections): args_str = "" - ifmap_cert_dir = None args_str = args_str + "--listen_ip_addr %s " % (listen_ip) args_str = args_str + "--listen_port %s " % (listen_port) args_str = args_str + "--http_server_port %s " % (http_server_port) args_str = args_str + "--admin_port %s " % (admin_port) - if ifmap_server_ip is not None: - args_str = args_str + "--ifmap_server_ip %s " % ifmap_server_ip - args_str = args_str + "--ifmap_server_port %s " % ifmap_port - else: - args_str = args_str + "--ifmap_listen_ip %s " % listen_ip - args_str = args_str + "--ifmap_listen_port %s " % ifmap_port - ifmap_cert_dir = tempfile.mkdtemp() - args_str = args_str + "--ifmap_key_path %s/key " % ifmap_cert_dir - args_str = args_str + "--ifmap_cert_path %s/cert " % ifmap_cert_dir - args_str = args_str + "--cassandra_server_list 0.0.0.0:9160 " args_str = args_str + "--log_local " @@ -308,13 +283,10 @@ def launch_api_server(test_id, listen_ip, listen_port, http_server_port, server = vnc_cfg_api_server.VncApiServer(args_str) gevent.getcurrent().api_server = server vnc_cfg_api_server.main(args_str, server) - if ifmap_cert_dir is not None: - shutil.rmtree(ifmap_cert_dir) -#end launch_api_server +# end launch_api_server def launch_api_server_rdbms(test_id, listen_ip, listen_port, http_server_port, - admin_port, ifmap_port, conf_sections, - ifmap_server_ip=None): + admin_port, conf_sections): db_file = "./test_db_%s.db" % test_id args_str = "" @@ -322,15 +294,6 @@ def launch_api_server_rdbms(test_id, listen_ip, listen_port, http_server_port, args_str = args_str + "--listen_port %s " % (listen_port) args_str = args_str + "--http_server_port %s " % (http_server_port) args_str = args_str + "--admin_port %s " % (admin_port) - if ifmap_server_ip is not None: - args_str = args_str + "--ifmap_server_ip %s " % ifmap_server_ip - args_str = args_str + "--ifmap_server_port %s " % ifmap_port - else: - args_str = args_str + "--ifmap_listen_ip %s " % listen_ip - args_str = args_str + "--ifmap_listen_port %s " % ifmap_port - ifmap_cert_dir = tempfile.mkdtemp() - args_str = args_str + "--ifmap_key_path %s/key " % ifmap_cert_dir - args_str = args_str + "--ifmap_cert_path %s/cert " % ifmap_cert_dir args_str = args_str + "--db_engine rdbms " args_str = args_str + "--rdbms_connection sqlite:///%s " % db_file args_str = args_str + "--log_local " @@ -357,9 +320,7 @@ def launch_api_server_rdbms(test_id, listen_ip, listen_port, http_server_port, server = vnc_cfg_api_server.VncApiServer(args_str) gevent.getcurrent().api_server = server vnc_cfg_api_server.main(args_str, server) - if ifmap_cert_dir is not None: - shutil.rmtree(ifmap_cert_dir) -#end launch_api_server_rdbms +# end launch_api_server_rdbms def launch_svc_monitor(test_id, api_server_ip, api_server_port): args_str = "" @@ -616,7 +577,7 @@ def _create_test_object(self): def _delete_test_object(self, obj): self._vnc_lib.virtual_network_delete(id=obj.uuid) - def ifmap_has_ident(self, obj=None, id=None, type_fq_name=None): + def vnc_db_has_ident(self, obj=None, id=None, type_fq_name=None): if obj: _type = obj.get_type() _fq_name = obj.get_fq_name() @@ -627,56 +588,38 @@ def ifmap_has_ident(self, obj=None, id=None, type_fq_name=None): _type = type_fq_name[0] _fq_name = type_fq_name[1] - ifmap_id = imid.get_ifmap_id_from_fq_name(_type, _fq_name) - if self._ifmap_server_ip is not None: - port = str(self._api_ifmap_port) - if ifmap_id in FakeIfmapClient._graph[port]: - # Old ifmap fake client store identity and link in lxml object - # in memory, we need to convert them in string - return self._xml_to_string( - FakeIfmapClient._graph[port][ifmap_id]) - else: - if ifmap_id in vnc_cfg_api_server.VncIfmapServer._graph: - return vnc_cfg_api_server.VncIfmapServer._graph[ifmap_id] - - return None - - @staticmethod - def _xml_to_string(xml_ifmap_dict): - string_ifmap_dict = {} - if 'ident' in xml_ifmap_dict: - string_ifmap_dict['ident'] = etree.tostring(xml_ifmap_dict['ident']) - if 'links' in xml_ifmap_dict: - string_ifmap_dict['links'] = dict() - for meta_name, meta in xml_ifmap_dict['links'].items(): - string_ifmap_dict['links'][meta_name] = dict() - if 'meta' in meta: - string_ifmap_dict['links'][meta_name]['meta'] = etree.tostring(meta['meta']) - if 'other' in meta: - string_ifmap_dict['links'][meta_name]['other'] = etree.tostring(meta['other']) - return string_ifmap_dict - - def ifmap_ident_has_link(self, obj=None, id=None, type_fq_name=None, - link_name=None): - ifmap_dict = self.ifmap_has_ident(obj=obj, id=id, - type_fq_name=type_fq_name) - - if ifmap_dict is None: + try: + vnc_obj = self._vnc_lib._object_read(_type, _fq_name) + except NoIdError: return None + return vnc_obj - match = [s for s in ifmap_dict['links'] if link_name in s] - if len(match) == 1: - return ifmap_dict['links'][match[0]] + def vnc_db_ident_has_prop(self, obj, prop_name, prop_value): + vnc_obj = self.vnc_db_has_ident(obj=obj) - def ifmap_doesnt_have_ident(self, obj=None, id=None, type_fq_name=None): - return not self.ifmap_has_ident(obj=obj, id=id, - type_fq_name=type_fq_name) + if vnc_obj is None: + return False - def ifmap_ident_doesnt_have_link(self, obj=None, id=None, - type_fq_name=None, link_name=None): - return not self.ifmap_ident_has_link(obj=obj, id=id, - type_fq_name=type_fq_name, - link_name=link_name) + return getattr(vnc_obj, prop_name) == prop_value + + def vnc_db_ident_has_ref(self, obj, ref_name, ref_fq_name): + vnc_obj = self.vnc_db_has_ident(obj=obj) + if vnc_obj is None: + return False + + refs = getattr(vnc_obj, ref_name, []) + for ref in refs: + if ref['to'] == ref_fq_name: + return True + + return False + + def vnc_db_doesnt_have_ident(self, obj=None, id=None, type_fq_name=None): + return not self.vnc_db_has_ident(obj=obj, id=id, + type_fq_name=type_fq_name) + + def vnc_db_ident_doesnt_have_ref(self, obj, ref_name, ref_fq_name=None): + return not self.vnc_db_ident_has_ref(obj, ref_name, ref_fq_name) def assertTill(self, expr_or_cb, *cb_args, **cb_kwargs): tries = 0 @@ -716,13 +659,11 @@ def setUpClass(cls, extra_mocks=None, extra_config_knobs=None, db=None): cls._api_server_ip = cls._server_info['ip'] cls._api_server_port = cls._server_info['service_port'] cls._api_admin_port = cls._server_info['admin_port'] - cls._api_ifmap_port = cls._server_info['ifmap_port'] cls._api_svr_greenlet = cls._server_info['greenlet'] cls._api_svr_app = cls._server_info['app'] cls._vnc_lib = cls._server_info['api_conn'] cls._api_server_session = cls._server_info['api_session'] cls._api_server = cls._server_info['api_server'] - cls._ifmap_server_ip = cls._server_info.get('ifmap_server_ip') except Exception as e: cls.tearDownClass() raise @@ -753,15 +694,8 @@ def wait_till_api_server_idle(self): vhost_url = self._api_server._db_conn._msgbus._urls while not FakeKombu.is_empty(vhost_url, 'vnc_config'): gevent.sleep(0.001) - if self._ifmap_server_ip is not None: - while self._api_server._db_conn._ifmap_db._queue.qsize() > 0: - gevent.sleep(0.001) # wait_till_api_server_idle - def get_obj_imid(self, obj): - return imid.get_ifmap_id_from_fq_name(obj._type, obj.get_fq_name_str()) - # end get_obj_imid - def create_virtual_network(self, vn_name, vn_subnet='10.0.0.0/24'): vn_obj = VirtualNetwork(name=vn_name) ipam_fq_name = [ diff --git a/src/config/common/tests/test_utils.py b/src/config/common/tests/test_utils.py index 54bae5b2eb0..9e441e9feeb 100644 --- a/src/config/common/tests/test_utils.py +++ b/src/config/common/tests/test_utils.py @@ -21,7 +21,6 @@ import uuid import six import contextlib -from lxml import etree try: from collections import OrderedDict, defaultdict except ImportError: @@ -40,7 +39,6 @@ from novaclient import exceptions as nc_exc from cfgm_common.exceptions import ResourceExistsError -from cfgm_common.imid import escape, unescape def stub(*args, **kwargs): pass @@ -533,323 +531,6 @@ def reset(cls): # end class FakeNovaClient -class FakeIfmapClient(object): - # _graph is dict of ident_names where val for each key is - # dict with keys 'ident' and 'links' - # 'ident' has ident xml element - # 'links' is a dict with keys of concat(' '') - # and vals of dict with 'meta' which has meta xml element and - # 'other' which has other ident xml element - # eg. cls._graph['contrail:network-ipam:default-domain:default-project: - # ipam2'] = - # 'ident': , - # 'links': {'contrail:id-perms': {'meta': }, - # 'contrail:project-network-ipam - # contrail:project:default-domain:default-project': - # {'other': , - # 'meta': }, - # 'contrail:virtual-network-network-ipam contrail: - # virtual-network:default-domain:default-project:vn2': - # {'other': , - # 'meta': }}} - _graph = defaultdict(dict) - _published_messages = defaultdict(list) # all messages published so far - _subscribe_lists = defaultdict(list) # list of all subscribers indexed by session-id - _PUBLISH_ENVELOPE = \ - """ """\ - """ """\ - """ %(body)s """ - - _RSP_ENVELOPE = \ - """ """\ - """ """\ - """ %(result)s """\ - """""" - - @classmethod - def reset(cls, port): - cls._graph[port].clear() - cls._published_messages[port] = [] # all messages published so far - cls._subscribe_lists[port] = [] # list of all subscribers indexed by session-id - # end reset - - @staticmethod - def initialize(self, *args, **kwargs): - self.port = args[0][1] - self._client__url = args[0] - # end initialize - - @classmethod - def _update_publish(cls, port, upd_root): - subscribe_item = etree.Element('resultItem') - subscribe_item.extend(deepcopy(upd_root)) - from_name = escape(upd_root[0].attrib['name']) - to_name = None - if not from_name in cls._graph[port]: - cls._graph[port][from_name] = {'ident': upd_root[0], 'links': {}} - - if len(upd_root) == 2: - meta_name = re.sub("{.*}", "contrail:", upd_root[1][0].tag) - link_key = meta_name - link_info = {'meta': upd_root[1]} - cls._graph[port][from_name]['links'][link_key] = link_info - elif len(upd_root) == 3: - meta_name = re.sub("{.*}", "contrail:", upd_root[2][0].tag) - to_name = escape(upd_root[1].attrib['name']) - link_key = '%s %s' % (meta_name, to_name) - link_info = {'meta': upd_root[2], 'other': upd_root[1]} - cls._graph[port][from_name]['links'][link_key] = link_info - - if not to_name in cls._graph[port]: - cls._graph[port][to_name] = {'ident': upd_root[1], 'links': {}} - link_key = '%s %s' % (meta_name, from_name) - link_info = {'meta': upd_root[2], 'other': upd_root[0]} - cls._graph[port][to_name]['links'][link_key] = link_info - else: - raise Exception("Unknown ifmap update: %s" % - (etree.tostring(upd_root))) - - subscribe_result = etree.Element('updateResult') - subscribe_result.append(subscribe_item) - return subscribe_result, (from_name, to_name) - # end _update_publish - - @classmethod - def _delete_publish(cls, port, del_root): - from_name = escape(del_root[0].attrib['name']) - to_name = None - if from_name not in cls._graph[port]: - link_keys = [] - elif 'filter' in del_root.attrib: - meta_name = del_root.attrib['filter'] - if len(del_root) == 1: - link_key = meta_name - elif len(del_root) == 2: - to_name = escape(del_root[1].attrib['name']) - link_key = '%s %s' % (meta_name, to_name) - else: - raise Exception("Unknown ifmap delete: %s" % - (etree.tostring(del_root))) - - link_keys = [link_key] - - else: # delete all metadata on this ident or between pair of idents - if len(del_root) == 1: - link_keys = cls._graph[port][from_name]['links'].keys() - elif len(del_root) == 2: - to_name = escape(del_root[1].attrib['name']) - link_keys = [] - for link_key in cls._graph[port][from_name]['links']: - link_info = cls._graph[port][from_name]['links'][link_key] - if 'other' in link_info: - if link_key.split()[1] == to_name: - link_keys.append(link_key) - else: - raise Exception("Unknown ifmap delete: %s" % - (etree.tostring(del_root))) - - subscribe_result = etree.Element('deleteResult') - for link_key in link_keys: - subscribe_item = etree.Element('resultItem') - subscribe_item.extend(deepcopy(del_root)) - link_info = cls._graph[port][from_name]['links'][link_key] - # generate id1, id2, meta for poll for the case where - # del of ident for all metas requested but we have a - # ref meta to another ident - if len(del_root) == 1 and 'other' in link_info: - to_ident_elem = link_info['other'] - subscribe_item.append(to_ident_elem) - subscribe_item.append(deepcopy(link_info['meta'])) - subscribe_result.append(subscribe_item) - meta_name = re.sub( - "{.*}", "contrail:", link_info['meta'][0].tag) - if 'other' in link_info: - other_name = escape(link_info['other'].attrib['name']) - rev_link_key = '%s %s' % (meta_name, from_name) - if other_name in cls._graph[port]: - del cls._graph[port][other_name]['links'][rev_link_key] - if not cls._graph[port][other_name]['links']: - del cls._graph[port][other_name] - del cls._graph[port][from_name]['links'][link_key] - - # delete ident if no links left - if from_name in cls._graph[port] and not cls._graph[port][from_name]['links']: - del cls._graph[port][from_name] - - if len(subscribe_result) == 0: - subscribe_item = etree.Element('resultItem') - subscribe_item.extend(deepcopy(del_root)) - subscribe_result.append(subscribe_item) - - return subscribe_result, (from_name, to_name) - # end _delete_publish - - @classmethod - def _validate_session_id(cls, port, method, body): - if method == 'newSession': - return - - session_id = getattr(body, - '_%sRequest__session_id' % method.capitalize(), - 'False session id') - if (not session_id.isdigit() or - int(session_id) > (len(cls._subscribe_lists[port]) - 1)): - result = etree.Element('errorResult', errorCode='InvalidSessionID') - err_str = etree.SubElement(result, 'errorString') - err_str.text = "Session not found." - result_env = cls._RSP_ENVELOPE % {'result': etree.tostring(result)} - return result_env - - @staticmethod - def call(client, method, body): - cls = FakeIfmapClient - port = client.port - - valide_session_response = cls._validate_session_id(port, method, body) - if valide_session_response is not None: - return valide_session_response - - if method == 'publish': - pub_env = cls._PUBLISH_ENVELOPE % { - 'body': body._PublishRequest__operations} - pub_env = pub_env.encode('utf-8') - env_root = etree.fromstring(pub_env) - poll_result = etree.Element('pollResult') - _items = [] - for pub_root in env_root[0]: - # pub_root = env_root[0][0] - if pub_root.tag == 'update': - subscribe_result, info = cls._update_publish(port, pub_root) - _items.append(('update', subscribe_result, info)) - elif pub_root.tag == 'delete': - subscribe_result, info = cls._delete_publish(port, pub_root) - _items.append(('delete', subscribe_result, info)) - else: - raise Exception( - "Unknown ifmap publish: %s" - % (etree.tostring(pub_root))) - poll_result.append(subscribe_result) - - for sl in cls._subscribe_lists[port]: - if sl is not None: - sl.put(poll_result) - - for (oper, result, info) in _items: - if oper == 'update': - search_result = deepcopy(result) - search_result.tag = 'searchResult' - cls._published_messages[port].append((search_result, info)) - else: - cls._published_messages[port] = [ - (r,i) for (r, i) in cls._published_messages[port] - if (i != info and i != info [::-1])] - result = etree.Element('publishReceived') - result_env = cls._RSP_ENVELOPE % {'result': etree.tostring(result)} - return result_env - elif method == 'search': - # grab ident string; lookup graph with match meta and return - srch_id_str = body._SearchRequest__identifier - mch = re.match('=2.3.3 gevent==1.1a2 geventhttpclient==1.0a pycassa>=1.7.2 diff --git a/src/config/schema-transformer/config_db.py b/src/config/schema-transformer/config_db.py index ae69f2e2afa..8f547b783cc 100644 --- a/src/config/schema-transformer/config_db.py +++ b/src/config/schema-transformer/config_db.py @@ -1085,12 +1085,12 @@ def policy_to_acl_rule(self, prule, dynamic): # end policy_to_acl_rule def add_acl_rule(self, sa, sp, da, dp, proto, rule_uuid, action, direction, - service_ri = None): + service_ri=None): action_list = copy.deepcopy(action) action_list.set_assign_routing_instance(service_ri) match = MatchConditionType(proto, sa, sp, da, dp) acl_direction_comp = self._manager._args.acl_direction_comp - if acl_direction_comp: + if acl_direction_comp: acl = AclRuleType(match, action_list, rule_uuid, direction) else: acl = AclRuleType(match, action_list, rule_uuid) @@ -1231,7 +1231,6 @@ def evaluate(self): acl_list.update_acl_entries(static_acl_entries) self.acl_rule_count = len(static_acl_entries.get_acl_rule()) - self.acl = _access_control_list_update(self.acl, self.obj.name, self.obj, static_acl_entries) self.dynamic_acl = _access_control_list_update(self.dynamic_acl, @@ -1931,7 +1930,7 @@ def __init__(self, name, obj=None): for connection in self.connections: remote_ri_fq_name = connection.split(':') if remote_ri_fq_name[-1] == remote_ri_fq_name[-2]: - vn.connections.add(':'.join(remote_ri_fq_name[0:-1] )) + vn.connections.add(':'.join(remote_ri_fq_name[0:-1])) vmi_refs = self.obj.get_virtual_machine_interface_back_refs() or [] self.virtual_machine_interfaces = set([':'.join(ref['to']) for ref in vmi_refs]) @@ -2433,8 +2432,7 @@ def init(cls): # To handle each case, we mark them with two separate flags, # which will be reset when appropriate calls are made. # Any service chains for which these flags are still set after - # all search results are received from ifmap, we will delete/ - # destroy them + # all objects are read from database, we will delete/destroy them chain.present_stale = True chain.created_stale = chain.created if not hasattr(chain, 'partially_created'): @@ -2906,7 +2904,6 @@ def _port_is_subset(lhs, rhs): return (lhs.start_port >= rhs.start_port and (rhs.end_port == -1 or lhs.end_port <= rhs.end_port)) - @staticmethod def _address_is_subset(lhs, rhs): if not(rhs.subnet or lhs.subnet or lhs.subnet_list or rhs.subnet_list): @@ -3574,7 +3571,6 @@ def _set_vrf_assign_table(self, vrf_table): VirtualMachineInterfaceST.delete(self.name) # _set_vrf_assign_table - def handle_st_object_req(self): resp = super(VirtualMachineInterfaceST, self).handle_st_object_req() resp.obj_refs = [ @@ -4035,9 +4031,9 @@ def update(self, obj=None): def get_allocated_interface_ip(self, side, version): vm_pt_list = [] - for vm_name in self.virtual_machines or []: + for vm_name in self.virtual_machines or []: vm_pt_list.append(VirtualMachineST.get(vm_name)) - for pt_name in self.port_tuples or []: + for pt_name in self.port_tuples or []: vm_pt_list.append(PortTupleST.get(pt_name)) for vm_pt in vm_pt_list: if not vm_pt: @@ -4265,6 +4261,7 @@ def handle_st_object_req(self): # end handle_st_object_req # end RoutingPolicyST + class RouteAggregateST(DBBaseST): _dict = {} obj_type = 'route_aggregate' @@ -4395,6 +4392,7 @@ def handle_st_object_req(self): # end handle_st_object_req # end PortTupleST + class BgpvpnST(DBBaseST): _dict = {} obj_type = 'bgpvpn' diff --git a/src/config/schema-transformer/requirements.txt b/src/config/schema-transformer/requirements.txt index 5a96f9e02b2..dc6f7c60404 100644 --- a/src/config/schema-transformer/requirements.txt +++ b/src/config/schema-transformer/requirements.txt @@ -1,4 +1,3 @@ -lxml>=2.3.3 gevent==1.1a2 geventhttpclient==1.0a pycassa>=1.7.2 diff --git a/src/config/schema-transformer/test/test_bgp.py b/src/config/schema-transformer/test/test_bgp.py index b2ce1f8c3e6..9759e08e295 100644 --- a/src/config/schema-transformer/test/test_bgp.py +++ b/src/config/schema-transformer/test/test_bgp.py @@ -201,7 +201,7 @@ def test_asn(self): # create vn1 vn1_name = self.id() + 'vn1' vn1_obj = self.create_virtual_network(vn1_name, '10.0.0.0/24') - self.assertTill(self.ifmap_has_ident, obj=vn1_obj) + self.assertTill(self.vnc_db_has_ident, obj=vn1_obj) self.check_ri_asn(self.get_ri_name(vn1_obj), 'target:64512:8000001') diff --git a/src/config/schema-transformer/test/test_policy.py b/src/config/schema-transformer/test/test_policy.py index 50da7d9411a..6ae9c39fb8e 100644 --- a/src/config/schema-transformer/test/test_policy.py +++ b/src/config/schema-transformer/test/test_policy.py @@ -4,6 +4,8 @@ import sys import gevent +import gevent.monkey +gevent.monkey.patch_all() from testtools.matchers import Contains from vnc_api.vnc_api import (VirtualNetwork, SequenceType, @@ -130,7 +132,7 @@ def test_basic_policy(self): self._vnc_lib.virtual_network_create(vn2_obj) for obj in [vn1_obj, vn2_obj]: - self.assertTill(self.ifmap_has_ident, obj=obj) + self.assertTill(self.vnc_db_has_ident, obj=obj) self.check_ri_ref_present(self.get_ri_name(vn1_obj), self.get_ri_name(vn2_obj)) @@ -176,11 +178,8 @@ def test_multiple_policy(self): np1.set_network_policy_entries(np1.network_policy_entries) self._vnc_lib.network_policy_update(np1) - self.assertTill( - self.ifmap_ident_has_link, - type_fq_name=('routing-instance', self.get_ri_name(vn1_obj)), - link_name='contrail:connection contrail:routing-instance:%s' % - ':'.join(self.get_ri_name(vn2_obj))) + self.check_ri_ref_present(self.get_ri_name(vn1_obj), + self.get_ri_name(vn2_obj)) np1.network_policy_entries.policy_rule[0].action_list.simple_action = 'pass' np1.set_network_policy_entries(np1.network_policy_entries) self._vnc_lib.network_policy_update(np1) @@ -188,11 +187,8 @@ def test_multiple_policy(self): np2.set_network_policy_entries(np2.network_policy_entries) self._vnc_lib.network_policy_update(np2) - self.assertTill( - self.ifmap_ident_has_link, - type_fq_name=('routing-instance', self.get_ri_name(vn2_obj)), - link_name='contrail:connection contrail:routing-instance:%s' % - ':'.join(self.get_ri_name(vn1_obj))) + self.check_ri_ref_present(self.get_ri_name(vn1_obj), + self.get_ri_name(vn2_obj)) vn1_obj.del_network_policy(np1) vn2_obj.del_network_policy(np2) self._vnc_lib.virtual_network_update(vn1_obj) @@ -298,7 +294,7 @@ def test_policy_with_cidr(self): vn1.set_network_policy(np, vnp) self._vnc_lib.virtual_network_update(vn1) - self.assertTill(self.ifmap_has_ident, obj=vn1) + self.assertTill(self.vnc_db_has_ident, obj=vn1) self.check_vn_ri_state(fq_name=self.get_ri_name(vn1)) @@ -338,7 +334,7 @@ def test_policy_with_cidr_and_vn(self): vn1.set_network_policy(np, vnp) self._vnc_lib.virtual_network_update(vn1) - self.assertTill(self.ifmap_has_ident, obj=vn1) + self.assertTill(self.vnc_db_has_ident, obj=vn1) self.check_vn_ri_state(fq_name=self.get_ri_name(vn1)) @@ -362,7 +358,7 @@ def test_vn_delete(self): vn_name = self.id() + 'vn' vn = self.create_virtual_network(vn_name, "10.1.1.0/24") gevent.sleep(2) - self.assertTill(self.ifmap_has_ident, obj=vn) + self.assertTill(self.vnc_db_has_ident, obj=vn) self.check_vn_ri_state(fq_name=self.get_ri_name(vn)) @@ -424,8 +420,8 @@ def test_compressed_policy(self): self._vnc_lib.virtual_network_update(vn1) self._vnc_lib.virtual_network_update(vn2) - self.assertTill(self.ifmap_has_ident, obj=vn1) - self.assertTill(self.ifmap_has_ident, obj=vn2) + self.assertTill(self.vnc_db_has_ident, obj=vn1) + self.assertTill(self.vnc_db_has_ident, obj=vn2) self.check_vn_ri_state(fq_name=self.get_ri_name(vn1)) self.check_vn_ri_state(fq_name=self.get_ri_name(vn2)) @@ -467,8 +463,8 @@ def test_compressed_policy_with_cidr(self): self._vnc_lib.virtual_network_update(vn1) self._vnc_lib.virtual_network_update(vn2) - self.assertTill(self.ifmap_has_ident, obj=vn1) - self.assertTill(self.ifmap_has_ident, obj=vn2) + self.assertTill(self.vnc_db_has_ident, obj=vn1) + self.assertTill(self.vnc_db_has_ident, obj=vn2) self.check_vn_ri_state(fq_name=self.get_ri_name(vn1)) self.check_vn_ri_state(fq_name=self.get_ri_name(vn2)) diff --git a/src/config/schema-transformer/test/test_service_policy.py b/src/config/schema-transformer/test/test_service_policy.py index 650020744bd..b33bd6993e9 100644 --- a/src/config/schema-transformer/test/test_service_policy.py +++ b/src/config/schema-transformer/test/test_service_policy.py @@ -410,12 +410,13 @@ def service_policy_test_with_version(self, version=None): self._vnc_lib.routing_policy_create(rp) self.wait_to_get_object(config_db.RoutingPolicyST, rp.get_fq_name_str()) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=rp, link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=rp, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) rp.del_service_instance(si_obj) self._vnc_lib.routing_policy_update(rp) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=rp, + ref_name='routing_instance_refs') self._vnc_lib.routing_policy_delete(id=rp.uuid) rlist = RouteListType(route=['100.0.0.0/24']) @@ -428,12 +429,13 @@ def service_policy_test_with_version(self, version=None): ra.get_fq_name_str()) ra = self._vnc_lib.route_aggregate_read(id=ra.uuid) self.assertEqual(ra.get_aggregate_route_nexthop(), v4_service_chain_address) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=ra, link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=ra, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) ra.del_service_instance(si_obj) self._vnc_lib.route_aggregate_update(ra) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=rp, + ref_name='routing_instance_refs') self._vnc_lib.route_aggregate_delete(id=ra.uuid) vn1_obj.del_network_policy(np) @@ -647,7 +649,7 @@ def test_multi_service_in_policy(self): vn2_uuid = self._vnc_lib.virtual_network_update(vn2_obj) for obj in [vn1_obj, vn2_obj]: - self.assertTill(self.ifmap_has_ident, obj=obj) + self.assertTill(self.vnc_db_has_ident, obj=obj) sc = self.wait_to_get_sc() sc_ri_names = ['service-'+sc+'-default-domain_default-project_' + s for s in service_names] @@ -849,13 +851,13 @@ def test_multi_policy_service_chain(self): self._vnc_lib.routing_policy_create(rp) self.wait_to_get_object(config_db.RoutingPolicyST, rp.get_fq_name_str()) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=rp, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) rp.del_service_instance(si_obj) self._vnc_lib.routing_policy_update(rp) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=rp, + ref_name='routing_instance_refs') self._vnc_lib.routing_policy_delete(id=rp.uuid) rlist = RouteListType(route=['100.0.0.0/24']) @@ -869,13 +871,13 @@ def test_multi_policy_service_chain(self): ra = self._vnc_lib.route_aggregate_read(id=ra.uuid) self.assertEqual(ra.get_aggregate_route_nexthop(), '10.0.0.%s' % (253-i)) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=ra, - link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=ra, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) ra.del_service_instance(si_obj) self._vnc_lib.route_aggregate_update(ra) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=ra, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=ra, + ref_name='routing_instance_refs') self._vnc_lib.route_aggregate_delete(id=ra.uuid) for np in policies: @@ -990,13 +992,13 @@ def _test_multi_rule_service_chain(self): self._vnc_lib.routing_policy_create(rp) self.wait_to_get_object(config_db.RoutingPolicyST, rp.get_fq_name_str()) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=rp, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) rp.del_service_instance(si_obj) self._vnc_lib.routing_policy_update(rp) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=rp, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=rp, + ref_name='routing_instance_refs') self._vnc_lib.routing_policy_delete(id=rp.uuid) rlist = RouteListType(route=['100.0.0.0/24']) @@ -1010,13 +1012,13 @@ def _test_multi_rule_service_chain(self): ra = self._vnc_lib.route_aggregate_read(id=ra.uuid) self.assertEqual(ra.get_aggregate_route_nexthop(), service_chain_address) - link_name = ':'.join(self.get_ri_name(vn1_obj, sc_ri_name)) - self.assertTill(self.ifmap_ident_has_link, obj=ra, - link_name=link_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=ra, ref_name='routing_instance_refs', + ref_fq_name=self.get_ri_name(vn1_obj, sc_ri_name)) ra.del_service_instance(si_obj) self._vnc_lib.route_aggregate_update(ra) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=ra, - link_name=link_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=ra, + ref_name='routing_instance_refs') self._vnc_lib.route_aggregate_delete(id=ra.uuid) vn1_obj.del_network_policy(np) @@ -1197,7 +1199,7 @@ def test_analyzer(self): vn2_uuid = self._vnc_lib.virtual_network_update(vn2_obj) for obj in [vn1_obj, vn2_obj]: - self.assertTill(self.ifmap_has_ident, obj=obj) + self.assertTill(self.vnc_db_has_ident, obj=obj) svc_ri_fq_name = 'default-domain:default-project:svc-vn-left:svc-vn-left'.split(':') self.check_ri_ref_present(svc_ri_fq_name, self.get_ri_name(vn1_obj)) @@ -1330,16 +1332,17 @@ def test_fip(self): self._vnc_lib.floating_ip_update(fip_obj) fip_obj = self._vnc_lib.floating_ip_read(fip_obj.get_fq_name()) - self.assertTill(self.ifmap_ident_has_link, obj=fip_obj, - link_name=vmi_fq_name) + self.assertTill(self.vnc_db_ident_has_ref, + obj=fip_obj, ref_name='virtual_machine_interface_refs', + ref_fq_name=vmi_fq_name.split(':')) fip = fip_obj.get_floating_ip_address() self.check_vrf_assign_table(vmi.get_fq_name(), fip, True) fip_fq_name = fip_obj.get_fq_name() self._vnc_lib.floating_ip_delete(fip_fq_name) - self.assertTill(self.ifmap_ident_doesnt_have_link, obj=fip_obj, - link_name=vmi_fq_name) + self.assertTill(self.vnc_db_ident_doesnt_have_ref, obj=fip_obj, + ref_name='virtual_machine_interface_refs') self.check_vrf_assign_table(vmi.get_fq_name(), fip, False) self.delete_network_policy(np) @@ -1412,7 +1415,7 @@ def test_interface_mirror(self): [('left', vn1_obj)], service_name, False, service_mode='transparent', service_type='analyzer') - self.assertTill(self.ifmap_has_ident, obj=vn1_obj) + self.assertTill(self.vnc_db_has_ident, obj=vn1_obj) # create virtual machine interface with interface mirror property vmi_name = self.id() + 'vmi1' diff --git a/src/config/svc-monitor/svc_monitor/svc_monitor.py b/src/config/svc-monitor/svc_monitor/svc_monitor.py index 619da2b9db2..56dab2757e0 100644 --- a/src/config/svc-monitor/svc_monitor/svc_monitor.py +++ b/src/config/svc-monitor/svc_monitor/svc_monitor.py @@ -27,7 +27,6 @@ import logging import logging.handlers -from cfgm_common.imid import * from cfgm_common import importutils from cfgm_common import svc_info from cfgm_common import vnc_cgitb diff --git a/src/ifmap/client/config_amqp_client.cc b/src/ifmap/client/config_amqp_client.cc index aa8b9b63c95..b3a66ef827b 100644 --- a/src/ifmap/client/config_amqp_client.cc +++ b/src/ifmap/client/config_amqp_client.cc @@ -198,16 +198,16 @@ bool ConfigAmqpClient::ProcessMessage(const string &json_message) { oper = itr->value.GetString(); } else if (key == "type") { obj_type = itr->value.GetString(); - } else if (key == "imid") { - string temp_imid = itr->value.GetString(); - iterator_range r = find_nth(temp_imid, ":", 1); - if (r.empty()) { - std::cout << "Failed to get fetch name from ampq message" - << std::endl; - continue; + } else if (key == "obj_dict") { + ostringstream os; + size_t sz = itr->value["fq_name"].GetArray().Size(); + for (size_t i=0; ivalue["fq_name"][SizeType(i)].GetString(); + if (i < sz-1) { + os << ":"; + } } - obj_name = - temp_imid.substr(distance(temp_imid.begin(), r.begin())+1); + obj_name = os.str(); } else if (key == "uuid") { uuid_str = itr->value.GetString(); } diff --git a/src/ifmap/testdata/server_parser_test.json b/src/ifmap/testdata/server_parser_test.json index 955652ff205..72bfd9327da 100644 --- a/src/ifmap/testdata/server_parser_test.json +++ b/src/ifmap/testdata/server_parser_test.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -28,7 +28,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -56,7 +56,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -109,7 +109,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn4\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e84-b58d-d196211eb4dc\",\"imid\":\"contrail:virtual_network:vn4\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn4\"]},\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e84-b58d-d196211eb4dc\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -134,7 +134,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn5\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e85-b58d-d196211eb4dd\",\"imid\":\"contrail:virtual_network:vn5\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn5\"]},\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e85-b58d-d196211eb4dd\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", diff --git a/src/ifmap/testdata/server_parser_test01.1.json b/src/ifmap/testdata/server_parser_test01.1.json index 7b42f8911a0..a2dd5b62ba0 100644 --- a/src/ifmap/testdata/server_parser_test01.1.json +++ b/src/ifmap/testdata/server_parser_test01.1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -35,7 +35,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", diff --git a/src/ifmap/testdata/server_parser_test01.json b/src/ifmap/testdata/server_parser_test01.json index f67b538b4e9..5c5ceb80ea7 100644 --- a/src/ifmap/testdata/server_parser_test01.json +++ b/src/ifmap/testdata/server_parser_test01.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", diff --git a/src/ifmap/testdata/server_parser_test1.json b/src/ifmap/testdata/server_parser_test1.json index 5825564e537..914524af57e 100644 --- a/src/ifmap/testdata/server_parser_test1.json +++ b/src/ifmap/testdata/server_parser_test1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -61,7 +61,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -77,7 +77,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -88,7 +88,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { } } diff --git a/src/ifmap/testdata/server_parser_test10.json b/src/ifmap/testdata/server_parser_test10.json index d6cfb8653f2..ac7da5e2887 100644 --- a/src/ifmap/testdata/server_parser_test10.json +++ b/src/ifmap/testdata/server_parser_test10.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -49,7 +49,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -65,7 +65,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test10_p1.json b/src/ifmap/testdata/server_parser_test10_p1.json index 90d679c2b71..e30283a9cd0 100644 --- a/src/ifmap/testdata/server_parser_test10_p1.json +++ b/src/ifmap/testdata/server_parser_test10_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -52,7 +52,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -68,7 +68,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"5:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"5:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test11.json b/src/ifmap/testdata/server_parser_test11.json index d6cfb8653f2..ac7da5e2887 100644 --- a/src/ifmap/testdata/server_parser_test11.json +++ b/src/ifmap/testdata/server_parser_test11.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -49,7 +49,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -65,7 +65,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test11_p1.json b/src/ifmap/testdata/server_parser_test11_p1.json index c5dfd7c3b75..28ea7001372 100644 --- a/src/ifmap/testdata/server_parser_test11_p1.json +++ b/src/ifmap/testdata/server_parser_test11_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -52,7 +52,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -68,7 +68,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"5:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"5:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test15.json b/src/ifmap/testdata/server_parser_test15.json index aa01223adfa..53680f2baf8 100644 --- a/src/ifmap/testdata/server_parser_test15.json +++ b/src/ifmap/testdata/server_parser_test15.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -21,7 +21,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -60,7 +60,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"3:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"3:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -81,7 +81,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"4:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"gsc\"]},\"type\":\"global_system_config\",\"uuid\":\"4:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -103,7 +103,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -125,7 +125,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -147,7 +147,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test16.json b/src/ifmap/testdata/server_parser_test16.json index fa183fa745d..6c875d0cb08 100644 --- a/src/ifmap/testdata/server_parser_test16.json +++ b/src/ifmap/testdata/server_parser_test16.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"2:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"2:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -61,7 +61,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"3:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"gsc\"]},\"type\":\"global_system_config\",\"uuid\":\"3:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -83,7 +83,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"4:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"4:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -106,7 +106,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -128,7 +128,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"6:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"6:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -145,7 +145,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"7:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"7:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test16_p1.json b/src/ifmap/testdata/server_parser_test16_p1.json index 91b413d9e76..ae1341608a4 100644 --- a/src/ifmap/testdata/server_parser_test16_p1.json +++ b/src/ifmap/testdata/server_parser_test16_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -17,7 +17,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -48,7 +48,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"3:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"3:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -68,7 +68,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"gsc\"]},\"type\":\"global_system_config\",\"uuid\":\"5:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -90,7 +90,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"6:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"6:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -116,7 +116,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"8:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"8:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -138,7 +138,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"9:8c5eeb87-0b08-4b0c-b53f-0a036805575c\",\"imid\":\"contrail:global_system_config:gsc\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"gsc\\\"]\",\"type\":\"global_system_config\",\"uuid\":\"9:8c5eeb87-0b08-4b0c-b53f-0a036805575c\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -155,7 +155,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"10:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"10:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test1_p1.json b/src/ifmap/testdata/server_parser_test1_p1.json index 33c64d87d3e..89b90934386 100644 --- a/src/ifmap/testdata/server_parser_test1_p1.json +++ b/src/ifmap/testdata/server_parser_test1_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -64,7 +64,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -80,7 +80,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -91,7 +91,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { } } diff --git a/src/ifmap/testdata/server_parser_test2.json b/src/ifmap/testdata/server_parser_test2.json index 189f0f6e441..aca921e3b5b 100644 --- a/src/ifmap/testdata/server_parser_test2.json +++ b/src/ifmap/testdata/server_parser_test2.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -61,7 +61,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -82,7 +82,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -103,7 +103,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", diff --git a/src/ifmap/testdata/server_parser_test2_p1.json b/src/ifmap/testdata/server_parser_test2_p1.json index 94b86f00ed1..88b7b9f8c99 100644 --- a/src/ifmap/testdata/server_parser_test2_p1.json +++ b/src/ifmap/testdata/server_parser_test2_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -15,7 +15,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -34,7 +34,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -58,7 +58,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -79,7 +79,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"7:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"7:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -100,7 +100,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"8:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"8:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", diff --git a/src/ifmap/testdata/server_parser_test3.json b/src/ifmap/testdata/server_parser_test3.json index 85628f14f83..723e19a809c 100644 --- a/src/ifmap/testdata/server_parser_test3.json +++ b/src/ifmap/testdata/server_parser_test3.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e82-b58d-d196211eb4da": { "fq_name": "[\"vn2\"]", @@ -15,7 +15,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e83-b58d-d196211eb4db": { "fq_name": "[\"vn3\"]", @@ -25,25 +25,25 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { } }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"3:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { } }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"4:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { } }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"5:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { } } diff --git a/src/ifmap/testdata/server_parser_test4.json b/src/ifmap/testdata/server_parser_test4.json index 11780e8b986..6954f65cd3a 100644 --- a/src/ifmap/testdata/server_parser_test4.json +++ b/src/ifmap/testdata/server_parser_test4.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"2:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"2:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -49,7 +49,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", diff --git a/src/ifmap/testdata/server_parser_test7_p1.json b/src/ifmap/testdata/server_parser_test7_p1.json index 40b6c416e39..2169fb64d10 100644 --- a/src/ifmap/testdata/server_parser_test7_p1.json +++ b/src/ifmap/testdata/server_parser_test7_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"0:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", @@ -12,7 +12,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"1:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -28,7 +28,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -48,7 +48,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"DELETE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", @@ -62,7 +62,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4725-b53f-0a0368055375": { "fq_name": "[\"vm1\"]", diff --git a/src/ifmap/testdata/server_parser_test9.json b/src/ifmap/testdata/server_parser_test9.json index a55bc3c0cfb..a252b07fa86 100644 --- a/src/ifmap/testdata/server_parser_test9.json +++ b/src/ifmap/testdata/server_parser_test9.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -49,7 +49,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"3:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -65,7 +65,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", diff --git a/src/ifmap/testdata/server_parser_test9_p1.json b/src/ifmap/testdata/server_parser_test9_p1.json index 44feb057f7b..dbba29807ad 100644 --- a/src/ifmap/testdata/server_parser_test9_p1.json +++ b/src/ifmap/testdata/server_parser_test9_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vr1\"]},\"type\":\"virtual_router\",\"uuid\":\"0:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -16,7 +16,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vm1\\\"]\",\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\",\"imid\":\"contrail:virtual_machine:vm1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vm1\"]},\"type\":\"virtual_machine\",\"uuid\":\"1:8c5eeb87-0b08-4725-b53f-0a0368055375\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -32,7 +32,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"2:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -52,7 +52,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"4:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", @@ -71,7 +71,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\",\"imid\":\"contrail:virtual_router:vr1\"}", + "message": "{\"oper\":\"UPDATE\",\"fq_name\":\"[\\\"vr1\\\"]\",\"type\":\"virtual_router\",\"uuid\":\"6:8c5eeb87-0b08-4724-b53f-0a0368055374\"}", "db": { "8c5eeb87-0b08-4724-b53f-0a0368055374": { "fq_name": "[\"vr1\"]", diff --git a/src/ifmap/testdata/server_parser_test_p1.json b/src/ifmap/testdata/server_parser_test_p1.json index 79fcb688827..4b58575ac37 100644 --- a/src/ifmap/testdata/server_parser_test_p1.json +++ b/src/ifmap/testdata/server_parser_test_p1.json @@ -1,7 +1,7 @@ [ { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn1\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\",\"imid\":\"contrail:virtual_network:vn1\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn1\"]},\"type\":\"virtual_network\",\"uuid\":\"0:634ae160-d3ef-4e81-b58d-d196211eb4d9\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -20,7 +20,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn2\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\",\"imid\":\"contrail:virtual_network:vn2\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn2\"]},\"type\":\"virtual_network\",\"uuid\":\"1:634ae160-d3ef-4e82-b58d-d196211eb4da\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -40,7 +40,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn3\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\",\"imid\":\"contrail:virtual_network:vn3\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn3\"]},\"type\":\"virtual_network\",\"uuid\":\"2:634ae160-d3ef-4e83-b58d-d196211eb4db\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -83,7 +83,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn4\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e84-b58d-d196211eb4dc\",\"imid\":\"contrail:virtual_network:vn4\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn4\"]},\"type\":\"virtual_network\",\"uuid\":\"6:634ae160-d3ef-4e84-b58d-d196211eb4dc\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]", @@ -108,7 +108,7 @@ }, { "operation": "rabbit_enqueue", - "message": "{\"oper\":\"CREATE\",\"fq_name\":\"[\\\"vn5\\\"]\",\"type\":\"virtual_network\",\"uuid\":\"7:634ae160-d3ef-4e85-b58d-d196211eb4dd\",\"imid\":\"contrail:virtual_network:vn5\"}", + "message": "{\"oper\":\"CREATE\",\"obj_dict\":{\"fq_name\":[\"vn5\"]},\"type\":\"virtual_network\",\"uuid\":\"7:634ae160-d3ef-4e85-b58d-d196211eb4dd\"}", "db": { "634ae160-d3ef-4e81-b58d-d196211eb4d9": { "fq_name": "[\"vn1\"]",