如何在Openstack4j java api for v2和v3中从令牌获取正确的OSClient?

时间:2017-02-08 11:28:32

标签: java openstack openstack-nova openstack-api

我正在使用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句柄,在该类中执行哪个线程。如果我只是传递相同的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处理的任何建议?

1 个答案:

答案 0 :(得分:0)

得到答案!!

我的目的是为所有租户或项目提供OSClient处理。我列出了OSClient句柄。我验证了第一个租户获取客户端,然后我将其添加到客户端列表然后我验证了第二个租户,然后我再次将其添加到列表中。现在,因为我验证了第二个租户,第一个租户的会话是不活动的,列表中的第一个客户端也指向第二个客户端的实例。

我太笨了;)