我使用的是openstack4jjavaapi。我可以访问2个openstack项目(我可以访问的项目的图像),给定我想关闭实例的实例id。在获取OSClient时,我循环访问两个项目的客户端,并检查该实例属于哪个项目。
然后使用OSClient句柄,我只需调用Shutdown。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句柄。若我只是传递相同的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句柄生成令牌,但为什么我没有从同一令牌获得正确的OSCclient。关于如何获得正确的OSClient句柄,有什么建议吗?
得到了答案!!
我的意图是让OSClient处理所有租户或项目。我列出了OSClient句柄的列表。我对第一个租户进行了身份验证以获得客户端,然后将其添加到客户端列表中,然后对第二个租户进行身份验证,然后再次将它添加到列表中。现在,由于我验证了第二个租户,第一个租户的会话处于非活动状态,列表中的第一个客户端也指向第二个客户端的实例。
我太笨了;)