keystoneauth1.identity.base 模块

class keystoneauth1.identity.base.BaseIdentityPlugin(auth_url: str | None = None, reauthenticate: bool = True)

基类: BaseAuthPlugin

MIN_TOKEN_LIFE_SECONDS: int = 120
__abstractmethods__ = frozenset({'get_auth_ref'})
__annotations__ = {'MIN_TOKEN_LIFE_SECONDS': <class 'int'>, '_discovery_cache': 'dict[str, discover.Discover]', 'auth_ref': keystoneauth1.access.access.AccessInfo | None, 'auth_url': str | None, 'reauthenticate': <class 'bool'>}
__doc__ = None
__init__(auth_url: str | None = None, reauthenticate: bool = True)
__module__ = 'keystoneauth1.identity.base'
_abc_impl = <_abc._abc_data object>
_discovery_cache: dict[str, Discover]
_needs_reauthenticate() bool

如果现有令牌需要重新认证,则返回 True。

如果令牌即将过期,则应刷新令牌。

返回值:

如果插件应获取新的令牌,则返回 True。否则返回 False。

auth_ref: AccessInfo | None
auth_url: str | None
get_access(session: Session, **kwargs: Any) AccessInfo

获取或返回当前的 AccessInfo 对象。

如果存在有效的 AccessInfo,则返回它,否则将获取一个新的 AccessInfo。

参数:

session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

有效的 AccessInfo

返回类型:

keystoneauth1.access.AccessInfo

get_all_version_data(session: Session, interface: str | list[str] | None = 'public', region_name: str | None = None, service_type: str | None = None) dict[str, dict[str, dict[str, list[VersionData]]]]

获取目录中所有服务的版本数据。

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • interface – 要获取版本数据的端点类型。可以是一个单一值或一个值列表。值为 None 表示应查询所有接口。(可选,默认为 public)

  • region_name (string) – 要获取版本数据的端点区域。值为 None 表示应查询所有区域。(可选,默认为 None)

  • service_type (string) – 限制版本数据到单个服务。(可选,默认为 None)

返回值:

一个字典,键为 region_name,值为包含字典的字典,字典的键为 interface,值为 VersionData 列表。

get_api_major_version(session: Session, *, endpoint_override: str | None = None, service_type: str | None = None, interface: str | None = None, region_name: str | None = None, service_name: str | None = None, version: str | None = None, allow: dict[str, Any] | None = None, allow_version_hack: bool = True, skip_discovery: bool = False, discover_versions: bool = False, min_version: str | int | float | Iterable[str | int | float] | None = None, max_version: str | int | float | Iterable[str | int | float] | None = None, **kwargs: Any) tuple[int | float, ...] | None

获取服务的 API 主要版本。

如果不存在有效的令牌,则将使用会话和 kwargs 获取新的令牌。

version、min_version 和 max_version 都可以作为字符串或元组提供。

有效的接口类型:publicpublicURL

internalinternalURLadmin 或 ‘adminURL`

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • endpoint_override (str) – 用于版本发现的 URL。

  • service_type (string) – 要查找端点的服务类型。如果未提供 service_type,则此插件将返回 None(失败)。

  • interface – 端点类型。可以是一个值或一个值列表。如果它是一个值列表,它们将按优先级顺序查找。也可以是 keystoneauth1.plugin.AUTH_INTERFACE,以指示应使用目录中的 auth_url 代替值。(可选,默认为 public)

  • region_name (string) – 端点应存在的区域。(可选)

  • service_name (string) – 目录中的服务名称。(可选)

  • version – 此端点所需的最低版本号。(可选)

  • allow (dict) – 在发现 API 版本时传递的额外筛选器。(可选)

  • allow_version_hack (bool) – 允许 keystoneauth 破解目录 URL 以支持旧方案。(可选,默认值为 True)

  • skip_discovery (bool) – 是否跳过版本发现,即使提供了版本也是如此。如果提供了 endpoint_override 或类似内容,并且获取端点的其他信息没有用处,这将很有用。

  • discover_versions (bool) – 即使不需要满足主版本请求,是否从版本发现文档中获取版本元数据。默认值为 False,因为 get_endpoint 不需要元数据。(可选,默认为 False)

  • min_version – 可接受的最低版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • max_version – 可接受的最高版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

服务发现的 API 主要版本。

返回类型:

tuple 或 None

注意

实现说明如下。用户不需要了解这些实现说明。 get_api_major_version 应该以尽可能低的成本完成预期的事情,同时仍然尽可能地一致地返回值。

在许多情况下,可以在不实际调用发现端点的情况下满足主要版本(例如,当版本在 URL 中时)。如果用户拥有一个云,其版本化的端点 https://volume.example.com/v3 位于 block-storage 服务的目录中,并且他们执行

client = adapter.Adapter(
    session,
    service_type='block-storage',
    min_version=2,
    max_version=3,
)
volume_version = client.get_api_major_version()

实际返回的版本只需要获取令牌之外的 api 调用。因此,get_api_major_version() 首先使用 discover_versions=False 调用 get_endpoint_data()

如果他们的目录具有未版本化的端点 https://volume.example.com 用于 block-storage 服务,并且他们执行此操作

client = adapter.Adapter(session, service_type='block-storage')

客户端现在设置为“使用目录中的任何内容”。由于 url 没有版本,因此使用 discover_versions=Falseget_endpoint_data() 将导致 api_version=None。(没有请求版本,因此不需要往返)

为了找出端点实际的版本,我们必须进行往返。因此,如果第一次调用后 api_versionNone,则 get_api_major_version() 将使用 discover_versions=True 再次调用 get_endpoint_data()

abstract get_auth_ref(session: Session) AccessInfo

从 OpenStack Identity 服务获取令牌。

此方法由各种令牌版本插件覆盖。

不应独立调用此函数,并预计通过 do_authenticate 函数调用。

如果插件缓存的 AccessInfo 对象无效,将调用此函数。因此,插件应始终在调用时获取新的 AccessInfo。如果您只想检索当前的身份验证数据,则应使用 get_access。

参数:

session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

引发:
返回值:

令牌访问信息。

返回类型:

keystoneauth1.access.AccessInfo

get_auth_state() str | None

检索插件当前的身份验证状态。

检索表示已身份验证插件的任何内部状态。

如果不存在,则不应获取任何新数据。

返回值:

一个可以存储的字符串,或者如果插件中没有身份验证状态则为 None。可以使用 set_auth_state 重新加载此字符串以设置相同的身份验证。

返回类型:

str 或如果不存在身份验证则为 None。

get_cache_id() str | None

获取唯一标识身份验证选项的标识符。

返回的标识符不必可分解或以其他方式提供重现插件的任何方法。

此字符串必须在用于唯一标识此插件的任何参数发生更改时更改。它不应在插件重新身份验证时更改。

返回值:

选项的唯一字符串

返回类型:

str 或如果不支持或不可用则为 None。

get_cache_id_elements() dict[str, str | None]

获取使此身份验证插件唯一化的元素。

作为 get_cache_id 要求的一部分,我们需要确定此插件及其值的哪些方面构成唯一的元素。

插件希望允许缓存时应覆盖此方法。

返回值:

此插件的唯一属性和值。

返回类型:

一个扁平的字典,其中包含一个 str 键和一个 str 或 None 值。这需要我们将这些值馈送到哈希中。值为空的对在哈希 ID 中被忽略。

get_discovery(session: Session, url: str, authenticated: bool | None = None) Discover

为 URL 返回发现对象。

检查会话和插件缓存,查看是否已经对 URL 执行过发现,如果是,则返回它,否则创建一个新的发现对象,将其缓存并返回它。

此函数预计由子类使用,用户不需要使用。

参数:
  • session (keystoneauth1.session.Session) – 用于发现的会话对象。

  • url (str) – 要查找的 URL。

  • authenticated (bool) – 在 discovery 调用中包含一个 token。(可选)默认为 None(如果安装了插件则使用 token)。

引发:
返回值:

包含查找该 URL 结果的发现对象。

get_endpoint(session: Session, service_type: str | None = None, interface: str | None = None, region_name: str | None = None, service_name: str | None = None, version: str | int | float | Iterable[str | int | float] | None = None, allow: dict[str, Any] | None = None, allow_version_hack: bool = True, skip_discovery: bool = False, min_version: str | int | float | Iterable[str | int | float] | None = None, max_version: str | int | float | Iterable[str | int | float] | None = None, **kwargs: Any) str | None

返回服务的有效端点。

如果不存在有效的令牌,则将使用会话和 kwargs 获取新的令牌。

version、min_version 和 max_version 都可以作为字符串或元组提供。

有效的接口类型:publicpublicURL

internalinternalURLadmin 或 ‘adminURL`

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • service_type (string) – 要查找端点的服务类型。如果未提供 service_type,则此插件将返回 None(失败)。

  • interface – 端点类型。可以是一个值或一个值列表。如果它是一个值列表,它们将按优先级顺序查找。也可以是 keystoneauth1.plugin.AUTH_INTERFACE,以指示应使用目录中的 auth_url 代替值。(可选,默认为 public)

  • region_name (string) – 端点应存在的区域。(可选)

  • service_name (string) – 目录中的服务名称。(可选)

  • version – 此端点所需的最低版本号。(可选)

  • allow (dict) – 在发现 API 版本时传递的额外筛选器。(可选)

  • allow_version_hack (bool) – 允许 keystoneauth 破解目录 URL 以支持旧方案。(可选,默认值为 True)

  • skip_discovery (bool) – 是否跳过版本发现,即使提供了版本也是如此。如果提供了 endpoint_override 或类似内容,并且获取端点的其他信息没有用处,这将很有用。

  • min_version – 可接受的最低版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • max_version – 可接受的最高版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

有效的端点 URL 或不可用时为 None。

返回类型:

字符串或 None

get_endpoint_data(session: Session, *, endpoint_override: str | None = None, discover_versions: bool = True, service_type: str | None = None, interface: str | None = None, region_name: str | None = None, service_name: str | None = None, allow: dict[str, Any] | None = None, allow_version_hack: bool = True, skip_discovery: bool = False, min_version: str | int | float | Iterable[str | int | float] | None = None, max_version: str | int | float | Iterable[str | int | float] | None = None, **kwargs: Any) EndpointData | None

为服务返回有效的端点数据。

如果不存在有效的令牌,则将使用会话和 kwargs 获取新的令牌。

version、min_version 和 max_version 都可以作为字符串或元组提供。

有效的接口类型:publicpublicURL

internalinternalURLadmin 或 ‘adminURL`

参数:
  • session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

  • endpoint_override (str) – 使用目录之外的 URL,跳过目录查找,但仍将运行版本发现。将 allow_version_hack 设置为 False(可选)

  • discover_versions (bool) – 即使不需要满足主版本请求,是否从版本发现文档获取版本元数据。(可选,默认为 True)

  • service_type (string) – 要查找端点的服务类型。如果未提供 service_type,则此插件将返回 None(失败)。

  • interface – 端点类型。可以是一个值或一个值列表。如果它是一个值列表,它们将按优先级顺序查找。也可以是 keystoneauth1.plugin.AUTH_INTERFACE,以指示应使用目录中的 auth_url 代替值。(可选,默认为 public)

  • region_name (string) – 端点应存在的区域。(可选)

  • service_name (string) – 目录中的服务名称。(可选)

  • allow (dict) – 在发现 API 版本时传递的额外筛选器。(可选)

  • allow_version_hack (bool) – 允许 keystoneauth 破解目录 URL 以支持旧方案。(可选,默认值为 True)

  • skip_discovery (bool) – 是否跳过版本发现,即使提供了版本也是如此。如果提供了 endpoint_override 或类似内容,并且获取端点的其他信息没有用处,这将很有用。

  • min_version – 可接受的最低版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • max_version – 可接受的最高版本。与 version 互斥。如果提供了 min_version 但没有 max_version,则 max_version 就像 ‘latest’ 一样。 (可选)

  • kwargs – 已忽略。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

有效的 EndpointData 或不可用的 None。

返回类型:

keystoneauth1.discover.EndpointData 或 None

get_project_id(session: Session) str | None

返回插件认证到的项目 ID。

只要可能,项目 ID 应该从 token 推断出来,但是某些 URL 和其他地方需要访问当前认证的项目 ID。

参数:

session (keystoneauth1.session.Session) – 一个会话对象,以便插件可以进行 HTTP 调用。

返回值:

一个项目标识符,如果不可用则为 None。

返回类型:

str

get_sp_auth_url(session: Session, sp_id: str) str | None

从服务提供商对象返回 auth_url。

此 URL 用于从远程云获取未作用域的联合 token。

参数:

sp_id (string) – 要查询的服务提供商的 ID。

返回值:

一个服务提供商 auth_url,如果不可用则为 None。

返回类型:

str

get_sp_url(session: Session, sp_id: str) str | None

从服务提供商对象返回 sp_url。

此 URL 用于将 SAML2 断言传递到远程云。

参数:

sp_id (str) – 要查询的服务提供商的 ID。

返回值:

一个服务提供商 sp_url,如果不可用则为 None。

返回类型:

str

get_token(session: Session) str | None

返回有效的身份验证 token。

如果不存在有效的 token,则将获取一个新的 token。

参数:

session (keystoneauth1.session.Session) – 可以用于通信的会话对象。

引发:

keystoneauth1.exceptions.http.HttpError – 来自无效 HTTP 响应的错误。

返回值:

一个有效的 token。

返回类型:

字符串

get_user_id(session: Session) str | None

返回插件的唯一用户标识符。

只要可能,用户 ID 应该从 token 推断出来,但是某些 URL 和其他地方需要访问当前认证的用户 ID。

参数:

session (keystoneauth1.session.Session) – 一个会话对象,以便插件可以进行 HTTP 调用。

返回值:

一个用户标识符,如果不可用则为 None。

返回类型:

str

invalidate() bool

使当前的身份验证数据失效。

这应该导致在下次调用时获取新的 token。

如果返回 Unauthorized HTTP 响应以指示 token 可能已被撤销或现在无效,则插件可能会失效。

返回值:

如果插件执行了某些操作以使其失效,则为 True。这意味着尝试再次是有意义的。如果未发生任何事情,则返回 False 以指示放弃。

返回类型:

bool

reauthenticate: bool
set_auth_state(data: str) None

安装插件现有的身份验证状态。

获取 get_auth_state 的输出,并将该身份验证状态安装到当前的身份验证插件中。