1

我已经能够安装并运行 OpenStack Swift。我的安装是严格的 Swift,不包括 Keystone 或其他 OpenStack 组件。

当我使用该curl命令时,我可以创建用户并进行 Swift 测试,以确保一切正常。我遇到问题的地方是当我使用github上的 Rackspace 维护的 OpenStack.NET API 时。

使用以下命令,我能够创建一个 swift 用户。

$ curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://192.168.0.3:8080/auth/v1.0
$ curl -v -H 'X-Auth-Token: <token-from-x-auth-token-above>' <url-from-x-storage-url-above>
$ swift -A http://192.168.0.3:8080/auth/v1.0 -U test:tester -K testing stat

一切都按预期工作,并创建了用户/帐户。然后,在我的 Windows 开发机器上,我从 Rackspace GitHub 下载了 OpenStack.NET API,并创建了一个运行以下代码的应用程序;

    var authUri = new Uri("http://192.168.0.3:8080/auth/v1.0");
    var userName = "test";
    var password = "tester";
    var tenantId = "testing";


    var credential = new OpenStackCredential(authUri, userName, password, tenantId);

    var client = OpenStackClientFactory.CreateClient(credential);
    client.Connect();

    var storageServiceClient = client.CreateServiceClient<IStorageServiceClient>();
    var storageAccount = storageServiceClient.GetStorageAccount();

当它运行时,我收到以下错误。

“找不到支持给定 OpenStack 实例所请求服务的客户端。”

我在这里做错了什么?

4

2 回答 2

0

我遇到了完全相同的问题,在进行了一些调试之后,我得出的结论是 Openstack .NET SDK 检查 url 中的版本并且“v1.0”无效。

我绝不是这方面的专家,所以在依赖它们之前尝试仔细检查我的发现。

编辑:进一步阅读后,我认为 v1.0 url 用于 TempAuth 身份验证,看起来 SDK 尝试使用 Keystone 身份验证。我找不到将 SDK 与 TempAuth 身份验证一起使用的方法。

于 2014-11-28T17:01:53.663 回答
0

我真的很感激人们对我的问题的回答!

我无法使用 Rackspace API 进行连接,我怀疑您可能是对的。有点难过,因为虽然有很多关于在完全实现的 OpenStack 生态系统(Swift、Glance、Keystone、Newton 等)中连接的文档,但对于那些试图迈出令人生畏的第一步的人来说,确实没有足够的文档进入 OpenStack ,而 Swift 可能是大多数人的第一步。

对于那些刚开始的人来说,Swift 是对象存储引擎。它非常适合存储您可能传统上存储在 Web 服务器本身、FTP 或网络文件共享上的大量上传文件。基本上,您将“对象”(例如图像、word 文档、pdf、excel 文档)放入“容器”(例如文件夹)中,Swift 将其存储在服务器上并为您提供一个 GUID 来引用该文件。通过 HTTP 访问该文件。例如;

http://YOUR.swift.SERVER.ipaddress/THEcontainerNAME/THEguidRETURNED

和中提琴!您的文件已送达​​给您!

有很多库声称可以让你访问 OpenStack Swift 和所有其他 OpenStack 好东西(Newton、Glance 等),但它们通常假设你正在运行 OpenStack 的完整多租户生态系统,以及它的本地租户安装和配置了管理软件(又名 keystone),如果你像我一样,你不会。

如果您想通过 C# 快速访问,请在引用 OpenStack Swift API 时使用 HttpWebRequest 和 HttpResponse 类(单击此处)。您将不得不深入了解添加和读取 HTTP 标头的细节。一旦你掌握了窍门,这一切都很容易。

使用 HttpWebRequest 类的人的网络上有很多示例,您只需要使用“Google”-Foo 并搜索它。不要浪费时间查找如何使用 C# 和 HttpWebRequest 类连接到 OpenStack Swift。你正试图被糟糕的例子和未回答的问题所淹没。首先搜索一个使用 HttpWebRequest 类的简单示例,搜索类似“使用 httpwebrequest 类 c# 下载文件”之类的内容,然后一旦看到该类的使用方式,然后采用它来调用 Swift,同时引用上面链接的 API 应该很容易。不要像我那样做,花几个小时寻找可以复制并粘贴到应用程序中的代码。不幸的是,你将不得不阅读......这很糟糕 - 我知道。

于 2014-11-29T00:48:33.140 回答