如何从 Openstack4j java api 中的令牌获取正确的 OSClient for v2 和 v3?
How to get right OSClient from token in Openstack4j java api for v2 and v3?
我正在使用 openstack4j java api。我能够访问 2 个 openstack 项目 (image for projects that I can access),给定实例 ID 我想关闭实例。在获取 OSClient 时,我遍历两个项目的客户端并检查该实例属于哪个项目。
然后使用 OSClient 句柄调用 Shut down。os.compute().servers().action(instanceId, Action.STOP);
现在一个线程保持 运行 跟踪当前实例状态,如果当前实例状态达到所需状态,则我执行一些操作。
我的问题:
我正在从 OSClient 句柄创建 (ModelEntity) token
。
ModelEntity token = null;
if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)) {
token = ((OSClient.OSClientV2) os).getAccess();
}else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
token = ((OSClient.OSClientV3) os).getToken();
}
return token;
然后我试图在要执行线程的另一个 class 中获得相同的 OSClient 句柄。如果我只是传递相同的 OSClient 句柄,那么我会收到一些无效的会话错误消息。因此,从这个令牌我试图在其他 class 中获取 OSClient 句柄。在其他 class 中,我执行以下操作来获取 OSClient :
OSClient os = null;
if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)){
os = OSFactory.clientFromAccess((Access) token);
}else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
os = OSFactory.clientFromToken((Token) token);
}
_logger.info(" ================= rishi token : " + token.hashCode());
return os;
我正在获取 OSClient 句柄,但它指向不同的项目(列表中的第一个项目)。我正在从正确的 OSClient 句柄生成令牌,但为什么我没有从同一个令牌中获得正确的 OSClient。关于如何获得正确的 OSClient 句柄有什么建议吗?
找到答案了!!
我的意图是为所有租户或项目获取 OSClient 句柄。我制作了一个 OSClient 句柄列表。我对第一个租户进行了身份验证以获取客户端,然后将其添加到客户端列表中,然后对第二个租户进行了身份验证,然后再次将其添加到列表中。现在,因为我对第二个租户进行了身份验证,第一个租户的会话处于非活动状态,并且列表中的第一个客户端也指向第二个客户端的实例。
我太笨了;)
我正在使用 openstack4j java api。我能够访问 2 个 openstack 项目 (image for projects that I can access),给定实例 ID 我想关闭实例。在获取 OSClient 时,我遍历两个项目的客户端并检查该实例属于哪个项目。
然后使用 OSClient 句柄调用 Shut down。os.compute().servers().action(instanceId, Action.STOP);
现在一个线程保持 运行 跟踪当前实例状态,如果当前实例状态达到所需状态,则我执行一些操作。
我的问题:
我正在从 OSClient 句柄创建 (ModelEntity) token
。
ModelEntity token = null;
if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)) {
token = ((OSClient.OSClientV2) os).getAccess();
}else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
token = ((OSClient.OSClientV3) os).getToken();
}
return token;
OSClient os = null;
if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V2)){
os = OSFactory.clientFromAccess((Access) token);
}else if(apiVersion.equals(OpenstackCloudCredential.API_VERSION.V3)){
os = OSFactory.clientFromToken((Token) token);
}
_logger.info(" ================= rishi token : " + token.hashCode());
return os;
我正在获取 OSClient 句柄,但它指向不同的项目(列表中的第一个项目)。我正在从正确的 OSClient 句柄生成令牌,但为什么我没有从同一个令牌中获得正确的 OSClient。关于如何获得正确的 OSClient 句柄有什么建议吗?
找到答案了!!
我的意图是为所有租户或项目获取 OSClient 句柄。我制作了一个 OSClient 句柄列表。我对第一个租户进行了身份验证以获取客户端,然后将其添加到客户端列表中,然后对第二个租户进行了身份验证,然后再次将其添加到列表中。现在,因为我对第二个租户进行了身份验证,第一个租户的会话处于非活动状态,并且列表中的第一个客户端也指向第二个客户端的实例。
我太笨了;)