我正在尝试编写一个简单的概念验证,用于通过 C# openstacknetsdk库 v1.3.0.0 在我的 Rackspace Cloud 帐户中操作云服务器。
我遇到的问题是,虽然我似乎能够使用我的 Rackspace 用户名和 API 密钥成功进行身份验证,但 API 的行为就像我没有任何服务器一样。我的代码:
using net.openstack.Providers.Rackspace;
using net.openstack.Core.Providers;
using net.openstack.Core.Exceptions.Response;
using net.openstack.Providers.Rackspace.Objects;
using net.openstack.Core.Domain;
...
const string USERNAME = "[my rackspace username]";
const string API_KEY = "[my rackspace API key]";
static void Main(string[] args)
{
CloudIdentity cloudIdentity = new CloudIdentity() { APIKey = API_KEY, Username = USERNAME };
CloudServersProvider provider = new CloudServersProvider(cloudIdentity);
IEnumerable<SimpleServer> servers = provider.ListServers();
foreach (SimpleServer server in servers)
{
Console.Out.WriteLine(server.Id);
}
}
当我在调试器中单步执行此代码时,我可以看到它servers
的大小最终为 0,并且没有任何内容最终被写出。
这是出乎意料的,因为我确实创建了一台服务器,我可以在 Rackspace 云控制面板网站上看到它。服务器处于活动状态。
如果我尝试使用 Rackspace 云控制面板站点上云服务器 > 服务器详细信息页面中的服务器 ID 获取有关我的特定服务器的信息:
Server server = provider.GetDetails("[my cloud server ID]");
Console.Out.WriteLine(server.Image.Name);
我得到一个 net.openstack.Core.Exceptions.Response.ItemNotFoundException。
身份验证似乎正在工作,因为如果我故意将我的API_KEY
值更改为不正确的值(如"test"
),我会得到一个 UserNotAuthorizedException 。
我在这里想念什么?为什么 openstacknetsdk 的行为就像我没有任何服务器一样?