首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OSClient和v3的Openstack4j java中从令牌中获取正确的v2?

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

Stack Overflow用户
提问于 2017-02-08 11:28:31
回答 1查看 517关注 0票数 1

我正在使用openstack4j java。我能够访问2个openstack项目(图像用于我可以访问的项目),给定我想关闭实例的实例id。在获得OSClient时,我循环两个项目的客户端,并检查该实例属于哪个项目。

然后,使用OSClient句柄,我只需调用os.compute().servers().action(instanceId, Action.STOP);。现在,一个线程继续运行以跟踪当前实例状态,如果当前实例状态达到所需状态,则执行一些操作。

我的问题是:我正在从(ModelEntity) token句柄创建OSClient。

代码语言:javascript
复制
        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:

代码语言:javascript
复制
    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句柄,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-09 05:50:16

找到答案了!!

我的目的是为所有租户或项目获得OSClient句柄。我列出了一个OSClient句柄的列表。我对第一个租户进行了身份验证,以获得客户端,然后将其添加到客户列表中,然后对第二个租户进行身份验证,然后再将其添加到列表中。现在,由于我对第二个租户进行了身份验证,第一个租户的会话是无效的,列表中的第一个客户端也指向第二个客户端的实例。

我太傻了;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42111879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档