Ejemplo n.º 1
0
    def validate_availability_zones(self, context, resource_type,
                                    availability_zones):
        """Verify that the availability zones exist."""
        if not availability_zones or resource_type != 'router':
            return

        azs = {az['name'] for az in
               self._plugin_driver.list_availability_zones(context).values()}
        diff = set(availability_zones) - azs
        if diff:
            raise az_exc.AvailabilityZoneNotFound(
                availability_zone=', '.join(diff))
Ejemplo n.º 2
0
    def validate_obj_azs(self, availability_zones):
        """Verify that the availability zones exist, and only 1 hint
        was set.
        """
        # For now we support only 1 hint per network/router
        # TODO(asarfaty): support multiple hints
        if len(availability_zones) > 1:
            err_msg = _("Can't use multiple availability zone hints")
            raise n_exc.InvalidInput(error_message=err_msg)

        # check that all hints appear in the predefined list of availability
        # zones
        diff = (set(availability_zones) - set(self.get_azs_names()))
        if diff:
            raise az_exc.AvailabilityZoneNotFound(availability_zone=diff.pop())
Ejemplo n.º 3
0
 def validate_availability_zones(self, context, resource_type,
                                 availability_zones):
     """Verify that the availability zones exist."""
     if not availability_zones:
         return
     if resource_type == 'network':
         agent_type = constants.AGENT_TYPE_DHCP
     elif resource_type == 'router':
         agent_type = constants.AGENT_TYPE_L3
     else:
         return
     azs = get_availability_zones_by_agent_type(context, agent_type,
                                                availability_zones)
     diff = set(availability_zones) - set(azs)
     if diff:
         raise az_exc.AvailabilityZoneNotFound(availability_zone=diff.pop())
Ejemplo n.º 4
0
    def _validate_availability_zones(context, az_list):
        if not az_list:
            return
        t_ctx = t_context.get_context_from_neutron_context(context)
        with context.session.begin(subtransactions=True):
            pods = core.query_resource(t_ctx, models.Pod, [], [])
            az_set = set(az_list)

            known_az_set = set([pod['az_name'] for pod in pods])
            known_az_set = known_az_set | set(
                [pod['region_name'] for pod in pods])

            diff = az_set - known_az_set
            if diff:
                raise az_exc.AvailabilityZoneNotFound(
                    availability_zone=diff.pop())
Ejemplo n.º 5
0
    def _validate_availability_zones(context, az_list):
        if not az_list:
            return
        t_ctx = t_context.get_context_from_neutron_context(context)
        with db_api.CONTEXT_WRITER.using(context):
            pods = core.query_resource(t_ctx, models.Pod, [], [])
            az_set = set(az_list)

            known_az_set = set([pod['az_name'] for pod in pods])
            known_az_set = known_az_set | set(
                [pod['region_name'] for pod in pods])

            diff = az_set - known_az_set
            if diff:
                raise az_exc.AvailabilityZoneNotFound(
                    availability_zone=diff.pop())
Ejemplo n.º 6
0
 def validate_availability_zones(self, context, resource_type,
                                 availability_zones):
     """Verify that the availability zones exist."""
     if not availability_zones:
         return
     if resource_type == 'network':
         agent_type = constants.AGENT_TYPE_DHCP
     elif resource_type == 'router':
         agent_type = constants.AGENT_TYPE_L3
     else:
         return
     query = context.session.query(
         agent_model.Agent.availability_zone).filter_by(
         agent_type=agent_type).group_by(
         agent_model.Agent.availability_zone)
     query = query.filter(
         agent_model.Agent.availability_zone.in_(availability_zones))
     azs = [item[0] for item in query]
     diff = set(availability_zones) - set(azs)
     if diff:
         raise az_exc.AvailabilityZoneNotFound(availability_zone=diff.pop())