示例#1
0
    def get_security_group_rule(self,
                                security_group_rule_id,
                                resource_get_attempts=None,
                                raise_exception=False,
                                poll_interval=None):
        """
        @summary: Shows information for a specified security group rule
        @param security_group_rule_id: The UUID for the security group rule
        @type security_group_rule_id: string
        @param resource_get_attempts: number of API retries
        @type resource_get_attempts: int
        @param raise_exception: flag to raise an exception if the get
            Security Group Rule was not as expected or to return None
        @type raise_exception: bool
        @param poll_interval: sleep time interval between API retries
        @type poll_interval: int
        @return: NetworkingResponse object with api response and failure list
        @rtype: common.behaviors.NetworkingResponse
        """
        poll_interval = poll_interval or self.config.api_poll_interval
        resource_get_attempts = (resource_get_attempts
                                 or self.config.api_retries)

        result = NetworkingResponse()
        err_msg = 'Security Group Rule Get failure'
        for attempt in range(resource_get_attempts):
            self._log.debug(
                'Attempt {0} of {1} getting security group rule {2}'.format(
                    attempt + 1, resource_get_attempts,
                    security_group_rule_id))

            resp = self.client.get_security_group_rule(
                security_group_rule_id=security_group_rule_id)

            resp_check = self.check_response(
                resp=resp,
                status_code=SecurityGroupsResponseCodes.
                GET_SECURITY_GROUP_RULE,
                label=security_group_rule_id,
                message=err_msg)

            result.response = resp
            if not resp_check:
                return result

            # Failures will be an empty list if the get was successful the
            # first time
            result.failures.append(resp_check)
            time.sleep(poll_interval)

        else:
            err_msg = (
                'Unable to GET {0} security group rule after {1} attempts: '
                '{2}').format(security_group_rule_id, resource_get_attempts,
                              result.failures)
            self._log.error(err_msg)
            if raise_exception:
                raise ResourceGetException(err_msg)
            return result
示例#2
0
    def get_network(self,
                    network_id,
                    resource_get_attempts=None,
                    raise_exception=False,
                    poll_interval=None):
        """
        @summary: Shows and verifies a specified network
        @param network_id: The UUID for the network
        @type network_id: string
        @param resource_get_attempts: number of API retries
        @type resource_get_attempts: int
        @param raise_exception: flag to raise an exception if the get
            Network was not as expected or to return None
        @type raise_exception: bool
        @param poll_interval: sleep time interval between API retries
        @type poll_interval: int
        @return: NetworkingResponse object with api response and failure list
        @rtype: common.behaviors.NetworkingResponse
        """
        poll_interval = poll_interval or self.config.api_poll_interval
        resource_get_attempts = (resource_get_attempts
                                 or self.config.api_retries)

        result = NetworkingResponse()
        err_msg = 'Network Get failure'
        for attempt in range(resource_get_attempts):
            self._log.debug('Attempt {0} of {1} getting network {2}'.format(
                attempt + 1, resource_get_attempts, network_id))

            resp = self.client.get_network(network_id=network_id)

            resp_check = self.check_response(
                resp=resp,
                status_code=NeutronResponseCodes.GET_NETWORK,
                label=network_id,
                message=err_msg)

            result.response = resp
            if not resp_check:
                return result

            # Failures will be an empty list if the get was successful the
            # first time
            result.failures.append(resp_check)
            time.sleep(poll_interval)

        else:
            err_msg = ('Unable to GET {0} network after {1} attempts: '
                       '{2}').format(network_id, resource_get_attempts,
                                     result.failures)
            self._log.error(err_msg)
            if raise_exception:
                raise ResourceGetException(err_msg)
            return result
示例#3
0
    def get_limits(self, page_reverse=None,
                   resource_get_attempts=None,
                   raise_exception=False, poll_interval=None):
        """
        @summary: get rate limits
        @param page_reverse: direction of the page
        @type page_reverse: bool
        @param resource_get_attempts: number of API retries
        @type resource_get_attempts: int
        @param raise_exception: flag to raise an exception if the get
            limits call was not as expected or to return None
        @type raise_exception: bool
        @param poll_interval: sleep time interval between API retries
        @type poll_interval: int
        @return: NetworkingResponse object with api response and failure list
        @rtype: common.behaviors.NetworkingResponse
        """
        poll_interval = poll_interval or self.config.api_poll_interval
        resource_get_attempts = (resource_get_attempts or
                                 self.config.api_retries)

        result = NetworkingResponse()
        err_msg = 'Limits GET failure'
        for attempt in range(resource_get_attempts):
            self._log.debug(
                'Attempt {0} of {1} with limits GET'.format(
                    attempt + 1,
                    resource_get_attempts))

            resp = self.client.get_limits(page_reverse=page_reverse)
            resp_check = self.check_response(
                resp=resp,
                status_code=LimitsResponseCodes.GET_LIMITS,
                label='',
                message=err_msg)
            result.response = resp

            # resp_check will have the response failure or None if no failure
            if resp_check is None:
                return result

            # Failures will be an empty list if the list was successful the
            # first time
            result.failures.append(resp_check)
            time.sleep(poll_interval)

        else:
            err_msg = (
                'Unable to GET limits after {0} attempts: '
                '{1}').format(resource_get_attempts, result.failures)
            self._log.error(err_msg)
            if raise_exception:
                raise ResourceGetException(err_msg)
            return result
示例#4
0
    def _get_resource(self,
                      resource,
                      resource_id,
                      resource_get_attempts=None,
                      raise_exception=False,
                      poll_interval=None,
                      timeout=None,
                      use_over_limit_retry=False,
                      fn_kwargs=None):
        """
        @summary: Shows and verifies a specified resource
        @param resource: type of resource for ex. network, subnet, port, etc.
            See NeutronResource in the networks constants
        @type resource: resource instance with singular and plural forms
        @param resource_id: The UUID for the resource
        @type resource_id: str
        @param fn_kwargs: function client call params besides the ID
        @type fn_kwargs: dict
        @param resource_get_attempts: number of API retries
        @type resource_get_attempts: int
        @param raise_exception: flag to raise an exception if the get
            resource was not as expected or to return None
        @type raise_exception: bool
        @param poll_interval: sleep time interval between API retries
        @type poll_interval: int
        @param timeout: resource get timeout for over limit retries
        @type timeout: int
        @param use_over_limit_retry: flag to enable/disable the get
            over limits retries
        @type use_over_limit_retry: bool
        @return: NetworkingResponse object with api response and failure list
        @rtype: common.behaviors.NetworkingResponse
        """

        # Defining the resource type in singular form (for ex. network)
        resource_type = resource.singular

        poll_interval = poll_interval or self.config.api_poll_interval
        resource_get_attempts = (resource_get_attempts
                                 or self.config.api_retries)
        use_over_limit_retry = (use_over_limit_retry
                                or self.config.use_over_limit_retry)
        timeout = timeout or self.config.resource_get_timeout

        result = NetworkingResponse()
        err_msg = '{0} Get failure'.format(resource_type)
        for attempt in range(resource_get_attempts):
            self._log.debug(
                'Attempt {attempt_n} of {attempts} getting {resource_type} '
                '{resource_id}'.format(attempt_n=attempt + 1,
                                       attempts=resource_get_attempts,
                                       resource_type=resource_type,
                                       resource_id=resource_id))

            fn_kwargs = fn_kwargs or {}

            # Adding the resource id to the function kwargs
            resource_id_name = '{0}_id'.format(resource_type)
            fn_kwargs[resource_id_name] = resource_id

            # Method uses resource type in singular form (slicing the ending s)
            get_fn_name = 'get_{0}'.format(resource_type)
            resp = getattr(self.client, get_fn_name)(**fn_kwargs)

            if use_over_limit_retry:
                entity_too_large_status_code = (getattr(
                    self.response_codes, 'REQUEST_ENTITY_TOO_LARGE'))
                if resp.status_code == entity_too_large_status_code:
                    resp = self.__over_limit_retry(
                        resource_type=resource_type,
                        timeout=timeout,
                        poll_interval=poll_interval,
                        status_code=entity_too_large_status_code,
                        resp=resp,
                        fn_name=get_fn_name,
                        fn_kwargs=fn_kwargs)

            response_code = get_fn_name.upper()
            status_code = getattr(self.response_codes, response_code)
            resp_check = self.check_response(resp=resp,
                                             status_code=status_code,
                                             label=resource_id,
                                             message=err_msg)

            result.response = resp
            if not resp_check:
                return result

            # Failures will be an empty list if the get was successful the
            # first time
            result.failures.append(resp_check)
            time.sleep(poll_interval)

        else:
            err_msg = (
                'Unable to GET {resource_id} {resource_type} after {attempts} '
                'attempts: {failures}').format(resource_id=resource_id,
                                               resource_type=resource_type,
                                               attempts=resource_get_attempts,
                                               failures=result.failures)
            self._log.error(err_msg)
            if raise_exception:
                raise ResourceGetException(err_msg)
            return result
示例#5
0
    def get_port(self, port_id, resource_get_attempts=None,
                 raise_exception=False, poll_interval=None,
                 timeout=None, use_over_limit_retry=None):
        """
        @summary: Shows and verifies a specified port
        @param port_id: The UUID for the port
        @type port_id: string
        @param resource_get_attempts: number of API retries
        @type resource_get_attempts: int
        @param raise_exception: flag to raise an exception if the get
            Port was not as expected or to return None
        @type raise_exception: bool
        @param poll_interval: sleep time interval between API retries
        @type poll_interval: int
        @param timeout: port get timeout for over limit retries
        @type timeout: int
        @param use_over_limit_retry: flag to enable/disable the port update
            over limits retries
        @type use_over_limit_retry: bool
        @return: NetworkingResponse object with api response and failure list
        @rtype: common.behaviors.NetworkingResponse
        """
        poll_interval = poll_interval or self.config.api_poll_interval
        resource_get_attempts = (resource_get_attempts or
            self.config.api_retries)
        poll_interval = poll_interval or self.config.api_poll_interval
        use_over_limit_retry = (use_over_limit_retry or
                                self.config.use_over_limit_retry)
        timeout = timeout or self.config.resource_get_timeout

        result = NetworkingResponse()
        err_msg = 'Port Get failure'
        for attempt in range(resource_get_attempts):
            self._log.debug('Attempt {0} of {1} getting network {2}'.format(
                attempt + 1, resource_get_attempts, port_id))

            resp = self.client.get_port(port_id=port_id)

            if use_over_limit_retry:
                endtime = time.time() + int(timeout)
                retry_msg = ('OverLimit retry with a {0}s timeout getting '
                             'port {1}').format(timeout, port_id)
                self._log.info(retry_msg)
                while (resp.status_code ==
                       NeutronResponseCodes.REQUEST_ENTITY_TOO_LARGE and
                       time.time() < endtime):
                    resp = self.client.get_port(port_id=port_id)
                    time.sleep(poll_interval)

            resp_check = self.check_response(resp=resp,
                status_code=NeutronResponseCodes.GET_PORT,
                label=port_id, message=err_msg)

            result.response = resp
            if not resp_check:
                return result

            # Failures will be an empty list if the get was successful the
            # first time
            result.failures.append(resp_check)
            time.sleep(poll_interval)

        else:
            err_msg = (
                'Unable to GET {0} port after {1} attempts: '
                '{2}').format(port_id, resource_get_attempts, result.failures)
            self._log.error(err_msg)
            if raise_exception:
                raise ResourceGetException(err_msg)
            return result