我正在尝试在OpenStack中调用API进行密码身份验证。这是我卷曲并获得访问令牌的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方法不允许-所请求的URL不允许该方法。
我的代码出什么问题了?如果我必须将另一个URL用于getFlavors或任何其他函数,应该放在哪里?
首先,而不是指定basePath: 'v3'
,您应该通过keystoneAUthVersion
显式设置Keystone版本。像这样简单地设置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)
})