1

我正在使用 openstack4j java api。我可以访问 2 个 openstack 项目(我可以访问的项目的图像),给定实例 ID,我想关闭该实例。在获取 OSClient 时,我会遍历两个项目的客户端并检查该实例属于哪个项目。

然后使用 OSClient 句柄,我只需调用 Shut down。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 句柄的任何建议?

4

1 回答 1

1

得到答案!!

我的目的是让 OSClient 处理所有租户或项目。我列出了 OSClient 句柄。我验证了第一个租户以获取客户端,然后将其添加到客户端列表中,然后我验证了第二个租户,然后再次将其添加到列表中。现在,由于我对第二个租户进行了身份验证,因此第一个租户的会话处于非活动状态,并且列表中的第一个客户端也指向第二个客户端的实例。

我太笨了;)

于 2017-02-09T05:50:16.123 回答