我正在使用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处理的任何建议?
答案 0 :(得分:0)
得到答案!!
我的目的是为所有租户或项目提供OSClient处理。我列出了OSClient句柄。我验证了第一个租户获取客户端,然后我将其添加到客户端列表然后我验证了第二个租户,然后我再次将其添加到列表中。现在,因为我验证了第二个租户,第一个租户的会话是不活动的,列表中的第一个客户端也指向第二个客户端的实例。
我太笨了;)