使用我們自己的硬件,我們已經安裝了所有組件的vanilla openstack,但由於地區問題,我在訪問身份之外的其他服務時遇到問題。所使用的代碼如下調用我們創建的管理員帳戶和管理員坦...Openstack.Net SDK無法訪問區域服務
public static void TestAccess(string userName, string password, string projectName, string projectId)
{
try
{
Uri baseUrl = new Uri(URL_IDENTITY);
CloudIdentityWithProject projectCloudId = new CloudIdentityWithProject();
projectCloudId.Username = userName;
projectCloudId.Password = password;
projectCloudId.ProjectName = projectName;
projectCloudId.ProjectId = new ProjectId(projectId);
OpenStackIdentityProvider idProvider = new OpenStackIdentityProvider(baseUrl, projectCloudId);
UserAccess userAccess = idProvider.Authenticate(projectCloudId);
IEnumerable<ExtendedEndpoint> eps = idProvider.ListEndpoints(userAccess.Token.Id);
string reg = idProvider.DefaultRegion; // This is null
ServiceCatalog[] scs = userAccess.ServiceCatalog;
// Get the list of regions
regionList = new List<string>();
foreach (ServiceCatalog sc in scs)
{
foreach (Endpoint ep in sc.Endpoints)
{
regionList.Add(ep.Region); // This is 'regionOne' in every case
}
}
// Try stuff...
foreach(string region in regionList.Distinct())
{
// Get a list of containers
CloudFilesProvider cfp = new CloudFilesProvider(projectCloudId, idProvider);
// THIS LINE FAILS
IEnumerable<Container> listOfContainers = cfp.ListContainers(region: region);
foreach (Container ctnr in listOfContainers)
{
Console.WriteLine("Container: {0}", ctnr.Name);
}
CloudNetworksProvider cnp = new CloudNetworksProvider(identity: null, identityProvider: idProvider);
IEnumerable<CloudNetwork> networks = cnp.ListNetworks(identity: null, region: region);
foreach (CloudNetwork network in networks)
{
Console.WriteLine("Network[{0}] name: {1}", networkCount, network.Label);
Console.WriteLine("Network[{0}] Id: {1}", networkCount, network.Id);
++networkCount;
}
Console.WriteLine("{0} networks listed.", networkCount);
}
}
catch(Exception ex)
{
throw;
}
}
的代碼在調用ListContainers(區:區)失敗,出現錯誤......「用戶不有權訪問所請求的服務或區域',因爲如果我沒有指定區域,錯誤就是'沒有提供區域,服務不提供區域無關的端點,並且沒有爲用戶設置默認區域帳戶」
我們只是在一瞬間進入我們的內部網絡,以便地區並不重要,對我們可是...
而且值得注意的是,撥打電話,以...
CloudNetwork detail = cnp.ShowNetwork(networkGuid, "regionOne");
網絡,我可以看到返回錯誤
當「的項目沒有被發現或不存在。」
幫助和建議非常感謝。
如果在Visual Studio中啓用符號源,則可以在調試器中進入ListContainers的代碼。 http://www.symbolsource.org/Public/Home/VisualStudio這可以幫助您追蹤更具體的原因。 –
我從github下載了源代碼,並將其鎖定。我現在可以看到問題... CloudNetworksProvider跳到{0}/os-networksv2,因爲標準OpenStack需要爲{0}/os-networks,導致「找不到項目」異常。 CloudFilesProvider是一個誤解,只是沒有安裝「存儲用戶無法訪問...」異常的事實。有關如何繞過{0}/os-networksv2而不創建該類的Vanilla OpenStack版本的任何建議? – Hoots
Rackspace使用類似[Compute API網絡(os-networks)擴展]的不同網絡支持實現(http://docs.openstack.org/api/openstack-compute/2/content/ext-os-networks。 HTML),但使用不同的端點。 openstack.net SDK的v2.0版本增加了對[OpenStack Networking API](http://docs.openstack.org/api/openstack-network/2.0/content/)的支持,這是您需要的另一個OpenStack安裝。有關此主要更新的當前狀態,請參閱以下頁面:https://github.com/openstacknetsdk/openstack.net/wiki/V2.0 –