openstack4j 源码_【踩坑】OpenStack4j使用过程中关于OSClientSession被更改的问题记录...

OpenStack4j是一个OpenStack的Java SDK。

问题描述

在同一个代码处理线程中,首先获取了 projectA 的 OSClient 对象 OSClientA,然后又获取了 projectB 的 OSClient 对象 OSClientB。

后续在用 OSClientA 去调用某个 service(比如 BlockVolumeService)去创建资源(比如 volume)的时候,期望创建在 projectA 下面,结果创建的资源却在 projectB 下面。

查找原因

经过跟踪 OpenStack4j 中获取 OSClient 和 调用具体 service 的相关源码后,发现问题,在于 OSClientSession 类中使用 ThreadLocal 变量 sessions 将获取的 OSClient 存下来。

后续在创建资源的时候,使用从 sessions 中取出的OSClient ,调用 OpenStack 的 API 接口。

关键在于,第二次获取 OSClientB 的时候,会将 sessions 中存的 OSClient 更新,将原先的 OSClientA 给替换为 OSClientB。

也就造成了,尽管是用 OSClientA 去创建资源,但是实际使用的 OSClient 已经被改了,也就是是用 OSClientB 的相关参数去创建的。

源码分析

获取 OSClient 的代码在 OSAuthenticator#authenticateV3(默认使用的是v3版本)。

......

private static OSClientV3 authenticateV3(KeystoneAuth auth, SessionInfo info, Config config) {

if (auth.getType().equals(Type.TOKENLESS)){

......

}

# 调用 OpenStack keystone 的认证接口

HttpRequest request = HttpRequest.builder(KeystoneToken.class)

.header(ClientConstants.HEADER_OS4J_AUTH, TOKEN_INDICATOR).endpoint(info.endpoint)

.method(HttpMethod.POST).path("/auth/tokens").config(config).entity(auth).build();

HttpResponse response = HttpExecutor.create().execute(request);

if (response.getStatus() >= 400) {<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: openstack_rocky.tar.gz是OpenStack Rocky版本的压缩文件。OpenStack是一个开源的云计算平台,它提供了一整套软件工具和组件,用于构建和管理私有云和公有云环境。 这个压缩文件包含了Rocky版本的OpenStack平台所需的各种软件、模块和配置文件。使用这个文件可以快速搭建一个基于Rocky版本的OpenStack云环境。 在这个压缩文件,可能包含了以下几个主要的组件和模块: 1. Nova:OpenStack计算服务,负责管理云的虚拟机实例和计算资源。 2. Neutron:OpenStack网络服务,用于管理云的网络和网络连接。 3. Cinder:OpenStack块存储服务,提供虚拟机实例所需的块存储。 4. Glance:OpenStack镜像服务,用于管理虚拟机镜像。 5. Keystone:OpenStack身份认证服务,用于用户身份验证和访问控制。 6. Horizon:OpenStack的Web用户界面,提供了对OpenStack云的视觉管理。 除此之外,还可能包含其他组件和模块,如Swift(对象存储服务)、Heat(编排服务)、Ceilometer(计量服务)等等。这些组件和模块共同构成了OpenStack平台的基础架构。 要使用openstack_rocky.tar.gz文件,需要先将其解压缩,然后按照相应的安装指南进行安装和配置。安装完成后,可以使用OpenStack提供的命令行工具或Web界面来管理和操作OpenStack云平台。 总而言之,openstack_rocky.tar.gz是OpenStack Rocky版本的压缩文件,其包含了构建和管理OpenStack云环境所需的各种软件、模块和配置文件。通过解压并安装这个文件,可以搭建一个基于Rocky版本的OpenStack云平台。 ### 回答2: openstack_rocky.tar.gz 是一个文件的扩展名,它是一个基于开源技术的云计算平台 OpenStack 的一个版本的压缩包文件。Rocky 是OpenStack 在2018年推出的第18个版本,这个版本主要集在改进和增强功能、提高性能和稳定性方面。 通过解压 openstack_rocky.tar.gz 文件,我们可以获取到 Rocky 版本的 OpenStack 的相关代码、配置文件和文档等内容。这个文件是一个压缩文件,通常使用压缩工具(比如 tar、gzip)来解压。解压后,我们可以获得一个包含多个文件和文件夹的目录结构。 在这个压缩包文件,可能包含以下一些常见的文件和文件夹: - 代码文件:包含了 OpenStack Rocky 版本的核心代码。这些代码文件用于构建和运行 OpenStack 平台,实现不同的云计算服务(如计算、网络、存储等)。 - 配置文件:包含了 OpenStack 各个组件的配置文件,用于配置各个服务的参数和行为。这些配置文件可以根据具体需求进行修改和自定义。 - 文档:包含了关于 OpenStack Rocky 版本的使用指南、API 文档、安装说明等文档资源。这些文档可以帮助用户更好地了解和使用 OpenStack 平台。 通过使用这个压缩包文件,系统管理员或开发人员可以轻松获取到 OpenStack Rocky 版本的相关资源,以便部署、配置和使用 OpenStack 平台。这个版本的 OpenStack 在Rocky版本基础上进行了许多改进和优化,提供更好的性能和稳定性,同时也增加了一些新功能,使得云计算服务更加强大和易于管理。 ### 回答3: openstack_rocky.tar.gz 是 OpenStack 的一个版本,具体是指 Rocky 版本的 OpenStack 资源文件打包成的压缩文件。OpenStack 是一款开源的云计算平台,它提供了一系列的服务和工具,用于构建和管理云基础设施。 将 OpenStack Rocky 版本打包成 tar.gz 压缩文件的目的是方便用户下载和使用。用户可以通过解压这个压缩文件,获取到 Rocky 版本的 OpenStack 安装文件和相关资源。通常这些资源包括各个组件的安装包、配置文件、文档和示例代码等。 Rocky 是 OpenStack 的第十八个版本,它于2018年8月发布。与之前的版本相比,Rocky 版本有一些新的特性和改变,以提供更好的性能和用户体验。例如,Rocky 版本引入了名为 Fast Forward Upgrades (FFU) 的功能,使得用户可以更加简单和快速地进行升级。此外,Rocky 也增强了对 GPU 加速和容器技术的支持,提供了更多的虚拟化选项和网络功能。 总之,openstack_rocky.tar.gz 是 OpenStack Rocky 版本的文件压缩包,用户可以使用它来获取 Rocky 版本的 OpenStack 资源和进行相应的部署和配置工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值