在 openstack4j 中使用项目范围身份验证时如何获取项目 ID?
How to get the project id when using project-scope authentication in openstack4j?
我正在使用 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()
的结果是null。
注意:我知道在openstack dashboard登录页面,用户只需要输入域名,用户名,密码,认证后就会返回项目信息。 这正是我想要的。
我使用 openstack 仪表板为用户 admin
分配了一个默认项目,现在它工作正常。
我正在使用 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()
的结果是null。
注意:我知道在openstack dashboard登录页面,用户只需要输入域名,用户名,密码,认证后就会返回项目信息。 这正是我想要的。
我使用 openstack 仪表板为用户 admin
分配了一个默认项目,现在它工作正常。