簡體   English   中英

使用 pkgcloud 在 OpenStack 中驗證用戶名和密碼

[英]Authenticate Username and Password in OpenStack with pkgcloud

我正在嘗試在 OpenStack 中調用用於密碼身份驗證的 API。 這是我 curl 並獲取訪問令牌的 API: Password authentication with unscoped authorization

我想在 NodeJS 中做同樣的事情,但我有點困惑。 我可以這樣做嗎,因為我在想問題可能在於不可能這樣做; 然而,這是我一直在嘗試的代碼:

var pkgcloud = require('pkgcloud');

var client = pkgcloud.compute.createClient({
    provider: 'openstack',
    username: <username>,
    password: <password>,
    authUrl: 'http://<ip>:<port>/',
    basePath: 'v3'
});
  client.getFlavors(function (err, flavors) {
    console.log("Error", err)
    console.log("Flavors", flavors)
})

client.getServers(function (err, servers) {
    console.log("Error", err)
    console.log("Servers", servers)
})

getFlavors 和 getServers 函數返回 405 Method Not Allowed - 請求的 URL 不允許使用該方法。

我的代碼有什么問題? 如果我必須為 getFlavors 或任何其他函數使用另一個 URL,我應該把它放在哪里?

我做了 Iarsks 所說的,並添加了一個租戶 ID,它運行良好。

這是我使用的配置:

var config = {
    provider: 'openstack',
    keystoneAuthVersion: 'v3',
    authUrl: '...',
    domainId: 'default',
    username: <username>,
    password: <password>,
    region: <region name which is provided in the cloud.yaml file in OpenStack>,
    tenantId: <the same as the Project ID>
}

首先,您應該通過keystoneAUthVersion明確設置 Keystone 版本,而不是指定basePath: 'v3' 像這樣簡單地設置basePath最終會導致錯誤的請求。

使用 v3 身份驗證時,您需要提供domainId (或domainName )作為請求的一部分。

最后,您可能需要確保您提供的是有效的region

以下對我的 OpenStack 環境正常工作:

var pkgcloud = require('pkgcloud');

var client = pkgcloud.compute.createClient({
    provider: 'openstack',
    keystoneAuthVersion: 'v3',
    authUrl: '...',
    domainId: 'default',
    username: 'lars',
    password: '...',
    region: 'my-region'
})

client.getFlavors(function (err, flavors) {
    console.log("Error", err)
    console.log("Flavors", flavors)
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM