def create_endpoint(self, context, endpoint): core.check_endpoint_url(endpoint['url']) ref = self._assign_unique_id(self._normalize_dict(endpoint)) ref = self._validate_endpoint_region(ref, context) initiator = notifications._get_request_audit_info(context) ref = self.catalog_api.create_endpoint(ref['id'], ref, initiator) return EndpointV3.wrap_member(context, ref)
def create_endpoint(self, context, endpoint): """Create three v3 endpoint refs based on a legacy ref.""" self.assert_admin(context) # according to the v2 spec publicurl is mandatory self._require_attribute(endpoint, 'publicurl') # service_id is necessary self._require_attribute(endpoint, 'service_id') # we should check publicurl, adminurl, internalurl # if invalid, we should raise an exception to reject # the request for interface in INTERFACES: interface_url = endpoint.get(interface + 'url') if interface_url: core.check_endpoint_url(interface_url) initiator = notifications._get_request_audit_info(context) if endpoint.get('region') is not None: try: self.catalog_api.get_region(endpoint['region']) except exception.RegionNotFound: region = dict(id=endpoint['region']) self.catalog_api.create_region(region, initiator) legacy_endpoint_ref = endpoint.copy() urls = {} for i in INTERFACES: # remove all urls so they aren't persisted them more than once url = '%surl' % i if endpoint.get(url): # valid urls need to be persisted urls[i] = endpoint.pop(url) elif url in endpoint: # null or empty urls can be discarded endpoint.pop(url) legacy_endpoint_ref.pop(url) legacy_endpoint_id = uuid.uuid4().hex for interface, url in urls.items(): endpoint_ref = endpoint.copy() endpoint_ref['id'] = uuid.uuid4().hex endpoint_ref['legacy_endpoint_id'] = legacy_endpoint_id endpoint_ref['interface'] = interface endpoint_ref['url'] = url endpoint_ref['region_id'] = endpoint_ref.pop('region') self.catalog_api.create_endpoint(endpoint_ref['id'], endpoint_ref, initiator) legacy_endpoint_ref['id'] = legacy_endpoint_id return {'endpoint': legacy_endpoint_ref}