我们已经在我们自己的硬件上安装了一个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似乎没有填充任何内容。
任何帮助或指示非常感谢。
答案 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文档中描述的tenantName
和tenantId
属性。创建
OpenStackIdentityProvider
的实例,并将先前创建的凭据传递给构造函数。创建服务提供商实例(例如
CloudFilesProvider
或CloudQueuesProvider
)时,将CloudIdentity
参数的 null 和上一步骤中的身份提供商传递为IIdentityProvider
参数。限制
OpenStackIdentityProvider
仅支持使用用户名和密码凭据进行身份验证,并可选择指定租户名称和/或租户ID(称为从Identity Service API v3开始的项目名称和ID)。