如何使用 Apache jclouds 访问 HP Helion

Posted

技术标签:

【中文标题】如何使用 Apache jclouds 访问 HP Helion【英文标题】:How can I access HP Helion using Apache jclouds 【发布时间】:2014-10-10 15:47:54 【问题描述】:

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

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


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

我对 jclouds 的配置包括如下设置 identitycredential

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=***lyn.location.jclouds.***lynImageChooser$3@5ec6379b, minRam=2048]
at ***lyn.location.jclouds.JcloudsLocation.buildTemplate(JcloudsLocation.java:1052) ~[***lyn-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]

【问题讨论】:

【参考方案1】:

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

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

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

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

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

这允许 jclouds API 成功连接和创建虚拟机。

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

***lyn.location.named.hpcloud-west = jclouds:hpcloud-compute
***lyn.location.named.hpcloud-west.region = region-a.geo-1
***lyn.location.named.hpcloud-west.displayName = HP Helion (US West)

【讨论】:

还可以将KeystoneProperties.CREDENTIAL_TYPE 设置为CredentialTypes.PASSWORD_CREDENTIALS

以上是关于如何使用 Apache jclouds 访问 HP Helion的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jclouds 1.7 访问本机提供程序 API

如何在 jclouds 中启用 s3 路径样式访问

Apache jclouds api 是不是支持 Miscrosoft Azure SAS

通过 jclouds 使用 AWS (S3) - 如何承担角色

在 Spring Boot 应用程序中使用 Rackspace 时出现 Apache jclouds java.lang.NoSuchMethodError

jclouds:如何更新现有 blob 的元数据?