2

我们已经在我们自己的硬件上设置了一个 OpenStack 系统,安装了所有组件,一切看起来都很好,因为我们已经通过 Web 界面创建了网络和虚拟机。

我正在尝试使用 openstack.net SDK 以编程方式执行操作。我似乎可以使用用户名和密码进行身份验证,但是在访问已安装的其他服务时,我们收到错误提示 API 端点对用户不可用。

我们正在使用的代码在下面,它可以正常工作,直到 CreateServer 行出现错误

“无法验证用户身份并检索授权服务端点。”

 Uri baseUrl = new Uri("http://mycloudip:5000/v2.0");
 CloudIdentity cloudId = new CloudIdentity()
            {
                Username = userName,
                Password = password
            };
 CloudIdentityProvider cip = new CloudIdentityProvider(cloudId, baseUrl);
 UserAccess ua = cip.Authenticate(cloudId);

 CloudServersProvider provider = new CloudServersProvider(cloudId);

 Metadata metaData = new Metadata(); // Add some metadata just because we can
 metaData.Add("Description", "Example 4 - Getting Started");

 string serverName = "Example4";
 string imageId = "48df4181-040e-4821-8723-d9e4ba908d2f";
 string flavorId = "3";

NewServer newServer = provider.CreateServer(serverName, imageId, flavorId, DiskConfiguration.Manual, metaData);

在仪表板中以同一用户身份登录时,我可以在 Access and Security >> API Endpoints 部分看到所有服务 url,但 UserAccess.ServiceCatalog 似乎没有填充任何内容。

非常感谢任何帮助或指示。

4

1 回答 1

3

IIdentityProvideropenstack.net SDK 1.3.2.0 中实现使用的默认值CloudServersProvider是围绕 Rackspace 的身份验证要求设计的。为了针对不同的 OpenStack 兼容安​​装进行身份验证,您需要按照以下文档中描述的步骤进行操作:

OpenStack 身份验证(openstack.net API 参考文档)

以下是当前文档的摘录:

本页描述了针对参考 OpenStack 安装进行身份验证的过程,包括但不限于 DevStack 和 Rackspace 私有云。

使用说明

针对参考 OpenStack 安装的客户端身份验证需要以下内容。

创建一个实例CloudIdentityWithProject并使用所需的身份验证凭据初始化其属性。CloudIdentityWithProject凭证类允许定义 OpenStack 文档中描述的和tenantName属性tenantId

创建 的实例OpenStackIdentityProvider,并将先前创建的凭据传递给构造函数。

创建服务提供者实例时,例如CloudFilesProvideror ,为参数CloudQueuesProvider传递nullCloudIdentity和上一步中的身份提供者作为IIdentityProvider参数。

限制

仅支持使用OpenStackIdentityProvider用户名和密码凭据进行身份验证,以及可选地指定租户名称和/或租户 ID(称为项目名称和 ID,以 Identity Service API v3 开头)。

于 2014-06-18T18:28:45.310 回答