2016-08-20 101 views
0

我正在使用openstack4j来进行项目范围的认证。如何在openstack4j中使用项目范围认证时获取项目ID?

os = OSFactory.builderV3() 
    .endpoint("http://controller:5000/v3") 
    .scopeToProject(Identifier.byId("1435221d37fd41699101bd739fe4375b")) 
    .credentials("admin", "openstack", Identifier.byName("default")) 
    .authenticate(); 

该声明可以正确运行。 但我的问题是:在认证之前,我怎么知道项目ID?

所以我改变了另一种方式来解决这个问题。首先,我删除了上述代码中的scopeToProject方法,并获得了成功的无格式验证。我可以获得userId = os.getToken().getUser().getId();。但是,当我执行os.identity().users().listUserProjects(userId)得到该用户所属的项目中,以下异常被抛出:

java.lang.NullPointerException 
at org.openstack4j.openstack.identity.internal.DefaultEndpointURLResolver.resolveV3(DefaultEndpointURLResolver.java:120) 
at org.openstack4j.openstack.identity.internal.DefaultEndpointURLResolver.findURLV3(DefaultEndpointURLResolver.java:70) 
at org.openstack4j.openstack.internal.OSClientSession$OSClientSessionV3.getEndpoint(OSClientSession.java:388) 
at org.openstack4j.core.transport.HttpRequest$RequestBuilder.build(HttpRequest.java:405) 
at org.openstack4j.openstack.internal.BaseOpenStackService$Invocation.execute(BaseOpenStackService.java:192) 
at org.openstack4j.openstack.internal.BaseOpenStackService$Invocation.execute(BaseOpenStackService.java:187) 
at org.openstack4j.openstack.identity.v3.internal.UserServiceImpl.listUserProjects(UserServiceImpl.java:121) 
... 

此异常抛出的token.getCatalog()。因为getCatelog()的结果为空。

备注:我知道在openstack仪表板登录页面,用户只需输入域名,用户名,密码,然后项目信息就会在认证后返回。 这正是我想要的。

回答

0

我使用openstack仪表板为用户admin分配了一个默认项目,现在它工作正常。

相关问题