def setUp(self): core.initialize() core.ModelBase.metadata.create_all(core.get_engine()) # enforce foreign key constraint for sqlite core.get_engine().execute('pragma foreign_keys=on') self.context = context.Context() site_dict = { 'site_id': FAKE_SITE_ID, 'site_name': FAKE_SITE_NAME, 'az_id': FAKE_AZ } config_dict = { 'service_id': FAKE_SERVICE_ID, 'site_id': FAKE_SITE_ID, 'service_type': FAKE_TYPE, 'service_url': FAKE_URL } models.create_site(self.context, site_dict) models.create_site_service_configuration(self.context, config_dict) global FAKE_RESOURCES FAKE_RESOURCES = [{'name': 'res1'}, {'name': 'res2'}] cfg.CONF.set_override(name='top_site_name', override=FAKE_SITE_NAME, group='client') self.client = client.Client() self.client.resource_service_map[FAKE_RESOURCE] = FAKE_TYPE self.client.operation_resources_map['list'].add(FAKE_RESOURCE) self.client.operation_resources_map['create'].add(FAKE_RESOURCE) self.client.operation_resources_map['delete'].add(FAKE_RESOURCE) self.client.operation_resources_map['action'].add(FAKE_RESOURCE) self.client.service_handle_map[FAKE_TYPE] = FakeResHandle(None)
def setUp(self): core.initialize() core.ModelBase.metadata.create_all(core.get_engine()) # enforce foreign key constraint for sqlite core.get_engine().execute('pragma foreign_keys=on') self.context = context.Context() site_dict = { 'site_id': FAKE_SITE_ID, 'site_name': FAKE_SITE_NAME, 'az_id': FAKE_AZ } config_dict = { 'service_id': FAKE_SERVICE_ID, 'site_id': FAKE_SITE_ID, 'service_type': FAKE_TYPE, 'service_url': FAKE_URL } models.create_site(self.context, site_dict) models.create_site_service_configuration(self.context, config_dict) global FAKE_RESOURCES FAKE_RESOURCES = [{'name': 'res1'}, {'name': 'res2'}] cfg.CONF.set_override(name='top_site_name', override=FAKE_SITE_NAME, group='client') self.client = client.Client() self.client.resource_service_map[FAKE_RESOURCE] = FAKE_TYPE self.client.operation_resources_map['list'].add(FAKE_RESOURCE) self.client.operation_resources_map['create'].add(FAKE_RESOURCE) self.client.operation_resources_map['delete'].add(FAKE_RESOURCE) self.client.service_handle_map[FAKE_TYPE] = FakeResHandle(None)
def test_list_endpoint_not_unique(self): # add a new configuration with same site and service type config_dict = { 'service_id': FAKE_SERVICE_ID + '_new', 'site_id': FAKE_SITE_ID, 'service_type': FAKE_TYPE, 'service_url': FAKE_URL } models.create_site_service_configuration(self.context, config_dict) self.assertRaises(exception.EndpointNotUnique, self.client.list_resources, FAKE_RESOURCE, self.context, [])
def _update_endpoint_from_keystone(self, cxt, is_internal): """Update the database by querying service endpoint url from Keystone :param cxt: context object :param is_internal: if True, this method utilizes pre-configured admin username and password to apply an new admin token, this happens only when auto_refresh_endpoint is set to True. if False, token in cxt is directly used, users should prepare admin token themselves :return: None """ if is_internal: admin_context = tricircle_context.Context() admin_context.auth_token = self._get_admin_token() endpoint_map = self._get_endpoint_from_keystone(admin_context) else: endpoint_map = self._get_endpoint_from_keystone(cxt) for region in endpoint_map: # use region name to query site site_filters = [{'key': 'site_name', 'comparator': 'eq', 'value': region}] site_list = models.list_sites(cxt, site_filters) # skip region/site not registered in cascade service if len(site_list) != 1: continue for service in endpoint_map[region]: site_id = site_list[0]['site_id'] config_filters = [{'key': 'site_id', 'comparator': 'eq', 'value': site_id}, {'key': 'service_type', 'comparator': 'eq', 'value': service}] config_list = models.list_site_service_configuration( cxt, config_filters) if len(config_list) > 1: raise exception.EndpointNotUnique(site_id, service) if len(config_list) == 1: config_id = config_list[0]['service_id'] update_dict = { 'service_url': endpoint_map[region][service]} models.update_site_service_configuration( cxt, config_id, update_dict) else: config_dict = { 'service_id': str(uuid.uuid4()), 'site_id': site_id, 'service_name': '%s_%s' % (region, service), 'service_type': service, 'service_url': endpoint_map[region][service] } models.create_site_service_configuration( cxt, config_dict)
def _update_endpoint_from_keystone(self, cxt, is_internal): """Update the database by querying service endpoint url from Keystone :param cxt: context object :param is_internal: if True, this method utilizes pre-configured admin username and password to apply an new admin token, this happens only when auto_refresh_endpoint is set to True. if False, token in cxt is directly used, users should prepare admin token themselves :return: None """ if is_internal: admin_context = tricircle_context.Context() admin_context.auth_token = self._get_admin_token() endpoint_map = self._get_endpoint_from_keystone(admin_context) else: endpoint_map = self._get_endpoint_from_keystone(cxt) for region in endpoint_map: # use region name to query site site_filters = [{'key': 'site_name', 'comparator': 'eq', 'value': region}] site_list = models.list_sites(cxt, site_filters) # skip region/site not registered in cascade service if len(site_list) != 1: continue for service in endpoint_map[region]: site_id = site_list[0]['site_id'] config_filters = [{'key': 'site_id', 'comparator': 'eq', 'value': site_id}, {'key': 'service_type', 'comparator': 'eq', 'value': service}] config_list = models.list_site_service_configurations( cxt, config_filters) if len(config_list) > 1: raise exception.EndpointNotUnique(site_id, service) if len(config_list) == 1: config_id = config_list[0]['service_id'] update_dict = { 'service_url': endpoint_map[region][service]} models.update_site_service_configuration( cxt, config_id, update_dict) else: config_dict = { 'service_id': str(uuid.uuid4()), 'site_id': site_id, 'service_type': service, 'service_url': endpoint_map[region][service] } models.create_site_service_configuration( cxt, config_dict)
def test_create(self): site = {'site_id': 'test_site_uuid', 'site_name': 'test_site', 'az_id': 'test_az_uuid'} site_ret = models.create_site(self.context, site) self.assertEqual(site_ret, site) configuration = { 'service_id': 'test_config_uuid', 'site_id': 'test_site_uuid', 'service_type': 'nova', 'service_url': 'http://test_url' } config_ret = models.create_site_service_configuration(self.context, configuration) self.assertEqual(config_ret, configuration)