我已经能够安装并运行OpenStack Swift。 我的安装严格来说是Swift,不包括Keystone或其他OpenStack组件。
当我使用curl
命令时,我能够创建用户并执行我的Swift测试,确保一切正常。我遇到问题的地方是我在github上使用Rackspace维护的OpenStack.NET API。
使用以下命令,我可以创建一个快速用户。
$ 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实例所请求服务的客户端。”
我在这里做错了什么?
答案 0 :(得分:0)
我遇到了完全相同的问题,在做了一些调试之后我得出结论,Openstack .NET SDK会检查网址中的版本和&#34; v1.0&#34;不是有效的。
我绝不是这方面的专家,所以在依赖它们之前,请仔细检查我的发现。
编辑:进一步阅读后,我认为v1.0 url用于TempAuth身份验证,看起来SDK尝试使用Keystone身份验证。我无法通过TempAuth身份验证找到使用SDK的方法。
答案 1 :(得分:0)
我非常感谢人们对我的问题的回答!
我无法使用Rackspace API进行连接,并怀疑您可能是对的。这有点令人伤心,因为虽然有很多关于在完全实现的OpenStack生态系统(Swift,Glance,Keystone,Newton等)中连接的文档,但对于那些试图将令人生畏的第一步进入OpenStack的人来说,实际上没有足够的文档。斯威夫特是大多数人可能的第一步。
对于那些刚开始的人,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(click here)时使用HttpWebRequest和HttpResponse类。您将不得不深入了解添加和读取HTTP标头的细节。一旦掌握了它,这很容易。
在使用HttpWebRequest类的人们的网络上有很多例子,你只需要使用你的“Google”-Foo并搜索它。不要浪费时间查看如何使用C#和HttpWebRequest类连接到OpenStack Swift。你正试图被肮脏的例子淹没,并且表格中有未回答的问题。首先搜索一个使用HttpWebRequest类的简单示例,搜索类似“使用httpwebrequest类c#下载文件”之类的内容,然后一旦看到如何使用该类,然后采用它来调用Swift,同时引用上面链接的API应该很容易不要那样做,花几个小时寻找你可以复制并粘贴到你的应用程序中的代码。不幸的是,你将不得不阅读...这很糟糕 - 我知道。