Merge "Validate transport zone type upon neutron startup"

This commit is contained in:
Zuul 2021-05-04 19:56:06 +00:00 committed by Gerrit Code Review
commit 8947b35ee7
2 changed files with 29 additions and 40 deletions

View File

@ -55,6 +55,12 @@ class NsxPAvailabilityZone(v3_az.NsxV3AvailabilityZone):
# NOTE(annak): we may need to generalize this for API calls # NOTE(annak): we may need to generalize this for API calls
# requiring path ids # requiring path ids
name_or_id = getattr(self, config_name) name_or_id = getattr(self, config_name)
err_msg = (_("Could not find %(res)s %(id)s for availability "
"zone %(az)s") % {
'res': config_name,
'id': name_or_id,
'az': self.name})
if not name_or_id: if not name_or_id:
if auto_config: if auto_config:
# If the field not specified, the system will auto-configure # If the field not specified, the system will auto-configure
@ -76,9 +82,23 @@ class NsxPAvailabilityZone(v3_az.NsxV3AvailabilityZone):
raise nsx_exc.NsxPluginException(err_msg=msg) raise nsx_exc.NsxPluginException(err_msg=msg)
return None return None
# If filtering was specified, we need to ensure the configured
# resource matches the filter
def verify_resource_matches_filter(result):
if filter_list_results:
exists = filter_list_results([result])
if not exists:
LOG.error("Resource %s doesn't match config "
"requirement for %s" % (name_or_id, config_name))
if self.is_default():
raise cfg.RequiredOptError(config_name,
group=cfg.OptGroup('nsx_p'))
raise nsx_exc.NsxPluginException(err_msg=err_msg)
try: try:
# Check if the configured value is the ID # Check if the configured value is the ID
resource_api.get(name_or_id, silent=True) resource = resource_api.get(name_or_id, silent=True)
verify_resource_matches_filter(resource)
return name_or_id return name_or_id
except nsx_lib_exc.ResourceNotFound: except nsx_lib_exc.ResourceNotFound:
# Search by tags # Search by tags
@ -94,18 +114,14 @@ class NsxPAvailabilityZone(v3_az.NsxV3AvailabilityZone):
# Check if the configured value is the name # Check if the configured value is the name
resource = resource_api.get_by_name(name_or_id) resource = resource_api.get_by_name(name_or_id)
if resource: if resource:
verify_resource_matches_filter(resource)
return resource['id'] return resource['id']
# Resource not found # Resource not found
if self.is_default(): if self.is_default():
raise cfg.RequiredOptError(config_name, raise cfg.RequiredOptError(config_name,
group=cfg.OptGroup('nsx_p')) group=cfg.OptGroup('nsx_p'))
msg = (_("Could not find %(res)s %(id)s for availability " raise nsx_exc.NsxPluginException(err_msg=err_msg)
"zone %(az)s") % {
'res': config_name,
'id': name_or_id,
'az': self.name})
raise nsx_exc.NsxPluginException(err_msg=msg)
def translate_configured_names_to_uuids(self, nsxpolicy, nsxlib=None, def translate_configured_names_to_uuids(self, nsxpolicy, nsxlib=None,
search_scope=None): search_scope=None):
@ -237,11 +253,12 @@ class NsxPAvailabilityZone(v3_az.NsxV3AvailabilityZone):
if self.use_policy_dhcp: if self.use_policy_dhcp:
dhcp_ec_path = nsxpolicy.dhcp_server_config.get( dhcp_ec_path = nsxpolicy.dhcp_server_config.get(
self._policy_dhcp_server_config).get('edge_cluster_path') self._policy_dhcp_server_config).get('edge_cluster_path')
dhcp_ec = p_utils.path_to_id(dhcp_ec_path) if dhcp_ec_path:
if dhcp_ec != tier0_ec_uuid: dhcp_ec = p_utils.path_to_id(dhcp_ec_path)
self._validate_tz(nsxpolicy, nsxlib, 'DHCP server config', if dhcp_ec != tier0_ec_uuid:
self._policy_dhcp_server_config, self._validate_tz(nsxpolicy, nsxlib, 'DHCP server config',
dhcp_ec) self._policy_dhcp_server_config,
dhcp_ec)
elif self._native_dhcp_profile_uuid: elif self._native_dhcp_profile_uuid:
dhcp_ec = nsxlib.native_dhcp_profile.get( dhcp_ec = nsxlib.native_dhcp_profile.get(
self._native_dhcp_profile_uuid).get('edge_cluster_id') self._native_dhcp_profile_uuid).get('edge_cluster_id')

View File

@ -325,34 +325,6 @@ class NsxPolicyPlugin(nsx_plugin_common.NsxPluginV3Base):
LOG.error(msg) LOG.error(msg)
raise nsx_exc.NsxPluginException(err_msg=msg) raise nsx_exc.NsxPluginException(err_msg=msg)
def _init_backend_resource(self, resource_api, name_or_id,
search_scope=None):
resource_type = resource_api.entry_def.resource_type()
if not name_or_id:
return None
try:
# Check if the configured value is the ID
resource_api.get(name_or_id, silent=True)
return name_or_id
except nsx_lib_exc.ResourceNotFound:
# Search by tags
if search_scope:
resource_id = self.nsxpolicy.get_id_by_resource_and_tag(
resource_type,
search_scope,
name_or_id)
if resource_id:
return resource_id
# Check if the configured value is the name
resource = resource_api.get_by_name(name_or_id)
if resource:
return resource['id']
msg = (_("Could not find %(type)s %(id)s") % {
'type': resource_type, 'id': name_or_id})
raise nsx_exc.NsxPluginException(err_msg=msg)
def get_waf_profile_path_and_mode(self): def get_waf_profile_path_and_mode(self):
# WAF is currently not supported by the NSX # WAF is currently not supported by the NSX
return None, None return None, None