在openstack4j中使用项目范围认证时如何获取项目ID?

时间:2016-08-20 14:16:14

标签: authentication openstack

我使用openstack4j进行项目范围的身份验证。

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

此语句可以正确运行。 但我的问题是:在身份验证之前,我如何知道项目ID?

所以我换了另一种方法来解决这个问题。首先,我删除了上述代码中的scopeToProject方法,并获得了成功的无范围身份验证。

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

我可以获得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仪表板登录页面中,用户只需要输入域名,用户名,密码,然后在认证后返回项目信息。 这正是我想要的。

1 个答案:

答案 0 :(得分:0)

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