我正在使用openstack4j java。我能够访问2个openstack项目(图像用于我可以访问的项目),给定我想关闭实例的实例id。在获得OSClient时,我循环两个项目的客户端,并检查该实例属于哪个项目。
然后,使用OSClient句柄,我只需调用os.compute().servers().action(instanceId, Action.STOP);。现在,一个线程继续运行以跟踪当前实例状态,如果当前实例状态达到所需状态,则执行一些操作。
我的问题是:我正在从(ModelEntity) token句柄创建OSClient。
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句柄。如果我只是传递相同的OSClient句柄,那么我会得到一些无效的会话错误消息。因此,我正试图在其他类中获得OSClient句柄。在其他类中,我执行以下操作以获得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句柄,有什么建议吗?
发布于 2017-02-09 05:50:16
找到答案了!!
我的目的是为所有租户或项目获得OSClient句柄。我列出了一个OSClient句柄的列表。我对第一个租户进行了身份验证,以获得客户端,然后将其添加到客户列表中,然后对第二个租户进行身份验证,然后再将其添加到列表中。现在,由于我对第二个租户进行了身份验证,第一个租户的会话是无效的,列表中的第一个客户端也指向第二个客户端的实例。
我太傻了;)
https://stackoverflow.com/questions/42111879
复制相似问题