2

我想使用 Apache jclouds 1.8.0(通过 Apache Brooklyn 项目)访问 HP Helion 云,而我之前使用的配置不再有效。文档建议我使用与控制台相同的用户名和密码,但这给了我一个 HTTP 401 身份验证错误。

正在发送的 POST 数据记录在日志中,如下所示(格式化并编辑用户名/密码):

{
  "auth":{
    "apiAccessKeyCredentials":{"accessKey":"user@example.org","secretKey":"XXXXXXXX"},
    "tenantName":"user@example.org.com-tenant1"
  }
}

我对 jclouds 的配置包括如下设置身份凭证

identity = user@example.org-tenant1:user@example.org
credential = XXXXXXXX

异常跟踪如下:

java.lang.IllegalStateException: Not authorized to access cloud JcloudsLocation[HP Helion (US East):user@example.org-tenant1:user@example.org] to resolve PortableTemplateBuilder[ports=[22], os=ubuntu, locationId=region-b.geo-1, osVersionRegex=12.04, is64bit=true, imageChooserFunction=brooklyn.location.jclouds.BrooklynImageChooser$3@5ec6379b, minRam=2048]
at brooklyn.location.jclouds.JcloudsLocation.buildTemplate(JcloudsLocation.java:1052) ~[brooklyn-locations-jclouds-0.7.0-20140817.024657-169.jar:0.7.0-SNAPSHOT]
Caused by: org.jclouds.rest.AuthorizationException: POST https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens HTTP/1.1 -> HTTP/1.1 401 Unauthorized
at org.jclouds.openstack.nova.v2_0.handlers.NovaErrorHandler.handleError(NovaErrorHandler.java:93) ~[openstack-nova-1.8.0.jar:1.8.0]
Caused by: org.jclouds.http.HttpResponseException: request: POST https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens HTTP/1.1  [{"auth":{"apiAccessKeyCredentials":{"accessKey":"user@example.org","secretKey":"XXXXXXXX"},"tenantName":"user@example.org-tenant1"}}] failed with response: HTTP/1.1 401 Unauthorized
at org.jclouds.openstack.nova.v2_0.handlers.NovaErrorHandler.handleError(NovaErrorHandler.java:78) ~[openstack-nova-1.8.0.jar:1.8.0]
4

1 回答 1

3

事实证明,这有几个问题。首先,jclouds 在 1.8.0 中的工作方式发生了变化,记录在发行说明中

从 1.8.0 开始,HP Cloud Object Storage 提供程序要求明确指定区域属性。此属性现在用于选择适当的端点。如果没有明确设置区域,则会选择任意端点,这可能与使用以前版本的 jclouds 时选择的端点不同。

这对我来说不是问题,但无论如何我现在都明确地在配置中设置了区域。

其次,在向具有不同内容的端点发送了一些 POST 请求后,jclouds 似乎正在使用基于访问密钥的身份验证,而不是用户名和密码身份验证。因此,在登录 HP Helion控制台后,我从页面顶部的用户名下拉菜单中选择了管理访问密钥。然后我可以单击显示密钥来显示我需要的访问和密钥数据。如果现有密钥已过期,可能需要创建新密钥,但我不需要这样做。然后,我只需要更改 jclouds身份凭据数据以适应:

identity = user@example.org-tenant1:ACCESSKEYDATA
credential = SECRETKEYDATA

这允许 jclouds API 成功连接和创建 VM。

最后,我必须将区域名称配置为布鲁克林位置描述符的一部分,但其他 jclouds 应用程序可能会以不同的方式执行此操作:

brooklyn.location.named.hpcloud-west = jclouds:hpcloud-compute
brooklyn.location.named.hpcloud-west.region = region-a.geo-1
brooklyn.location.named.hpcloud-west.displayName = HP Helion (US West)
于 2014-08-17T16:41:08.453 回答