Пример #1
0
    def _create(self, version=None):
        if not version:
            # TODO(prazumovsky): remove all unexpected calls from tests and
            # add default_version after that.
            version = self.NOVA_API_VERSION
        endpoint_type = self._get_client_option(CLIENT_NAME, 'endpoint_type')
        extensions = nc.discover_extensions(version)

        args = {
            'session':
            self.context.keystone_session,
            'extensions':
            extensions,
            'endpoint_type':
            endpoint_type,
            'service_type':
            self.COMPUTE,
            'region_name':
            self._get_region_name(),
            'http_log_debug':
            self._get_client_option(CLIENT_NAME, 'http_log_debug')
        }

        client = nc.Client(version, **args)
        # NOTE: check for microversion availability
        if version in self.validate_versions:
            try:
                client.versions.get_current()
            except exceptions.NotAcceptable:
                raise exception.InvalidServiceVersion(service=self.COMPUTE,
                                                      version=version)

        return client
Пример #2
0
    def client(self, version=None):
        if not version:
            version = self.default_version

        if version in self._client_instances:
            if (cfg.CONF.reauthentication_auth_method == 'trusts'
                    and self.context.auth_plugin.auth_ref.will_expire_soon(
                        cfg.CONF.stale_token_duration)):
                # If the token is near expiry, force creating a new client,
                # which will get a new token via another call to auth_token
                # We also have to invalidate all other cached clients
                self.clients.invalidate_plugins()
            else:
                return self._client_instances[version]

        # Back-ward compatibility
        if version is None:
            self._client_instances[version] = self._create()
        else:
            if version not in self.supported_versions:
                raise heat_exception.InvalidServiceVersion(
                    version=version, service=self._get_service_name())

            self._client_instances[version] = self._create(version=version)

        return self._client_instances[version]
Пример #3
0
    def _test_validate(self, key_type=None, user=None, nc_version=None):
        template = copy.deepcopy(self.kp_template)
        validate_props = []
        if key_type:
            template['resources']['kp']['properties']['type'] = key_type
            validate_props.append('type')
        if user:
            template['resources']['kp']['properties']['user'] = user
            validate_props.append('user')
        stack = utils.parse_stack(template)
        definition = stack.t.resource_definitions(stack)['kp']
        kp_res = keypair.KeyPair('kp', definition, stack)
        self.patchobject(nova.NovaClientPlugin,
                         '_create',
                         side_effect=exception.InvalidServiceVersion(
                             service='compute', version=nc_version))

        error = self.assertRaises(exception.StackValidationFailed,
                                  kp_res.validate)
        msg = (('Cannot use "%(prop)s" properties - nova does not support: '
                'Invalid service compute version %(ver)s') % {
                    'prop': validate_props,
                    'ver': nc_version
                })
        self.assertIn(msg, six.text_type(error))
Пример #4
0
    def client(self, version=None):
        if version is None:
            version = self.get_max_microversion()
        elif not self.is_version_supported(version):
            raise exception.InvalidServiceVersion(
                version=version, service=self._get_service_name())

        if version in self._client_instances:
            return self._client_instances[version]

        self._client_instances[version] = self._create(version=version)
        return self._client_instances[version]
Пример #5
0
    def test_validate(self):
        template = copy.deepcopy(self.kp_template)
        template['resources']['kp']['properties']['type'] = 'x509'
        stack = utils.parse_stack(template)
        definition = stack.t.resource_definitions(stack)['kp']
        kp_res = keypair.KeyPair('kp', definition, stack)
        self.patchobject(nova.NovaClientPlugin,
                         '_create',
                         side_effect=exception.InvalidServiceVersion(
                             service='compute', version='2.2'))

        error = self.assertRaises(exception.StackValidationFailed,
                                  kp_res.validate)
        self.assertIn(
            'Cannot use "type" property - nova does not support it: '
            'Invalid service compute version 2.2', six.text_type(error))
Пример #6
0
    def client(self, version=None):
        if not version:
            version = self.default_version

        if version in self._client_instances:
            return self._client_instances[version]

        # Back-ward compatibility
        if version is None:
            self._client_instances[version] = self._create()
        else:
            if version not in self.supported_versions:
                raise heat_exception.InvalidServiceVersion(
                    version=version, service=self._get_service_name())

            self._client_instances[version] = self._create(version=version)

        return self._client_instances[version]