Openstack.Net SDK无法访问服务

时间:2014-06-18 15:46:09

标签: c# openstack rackspace-cloud keystone openstacknetsdk

我们已经在我们自己的硬件上安装了一个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和Security>>中看到所有服务网址。 API Endpoints部分以仪表板中的同一用户身份登录,但UserAccess.ServiceCatalog似乎没有填充任何内容。

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

1 个答案:

答案 0 :(得分:3)

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

OpenStack Authentication (openstack.net API Reference Documentation)

以下是当前文档的摘录:

  

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

     

使用说明

     

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

     

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

     

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

     

创建服务提供商实例(例如CloudFilesProviderCloudQueuesProvider)时,将CloudIdentity参数的 null 和上一步骤中的身份提供商传递为IIdentityProvider参数。

     

限制

     

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