Node.js 使用pkgcloud验证OpenStack中的用户名和密码

Node.js 使用pkgcloud验证OpenStack中的用户名和密码,node.js,openstack,pkgcloud,Node.js,Openstack,Pkgcloud,我试图在OpenStack中调用API进行密码验证。这是我卷曲并获取访问令牌的API: 我想在NodeJS中做同样的事情,我有点困惑。我能这样做吗?因为我在想,也许问题是这样做是不可能的;然而,这是我一直在尝试的代码: var pkgcloud = require('pkgcloud'); var client = pkgcloud.compute.createClient({ provider: 'openstack', username: <username>

我试图在OpenStack中调用API进行密码验证。这是我卷曲并获取访问令牌的API:

我想在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)
})
var pkgcloud=require('pkgcloud');
var client=pkgcloud.compute.createClient({
提供程序:“openstack”,
用户名:,
密码:,
authUrl:'http://://',
基本路径:“v3”
});
getFlavors(函数(err,flavors){
日志(“错误”,err)
日志(“口味”,口味)
})
client.getServers(函数(err,server){
日志(“错误”,err)
日志(“服务器”,服务器)
})
getFlavors和getServers函数返回405方法Not Allowed-请求的URL不允许使用该方法


我的代码有什么问题?如果我必须为getFlavors或任何其他函数使用另一个URL,我应该将它放在哪里?

首先,而不是指定
basePath:'v3'
,您应该通过
keystoneAUthVersion
显式设置Keystone版本。简单地设置
basePath
,最终会导致错误的请求

使用v3身份验证时,您需要提供
domainId
(或
domainName
)作为请求的一部分

最后,您可能需要确保提供了有效的
区域

以下内容在我的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)
})


我照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>
}
var配置={
提供程序:“openstack”,
keystoneAuthVersion:'v3',
authUrl:“…”,
domainId:'默认',
用户名:,
密码:,
地区:,
租户:
}

谢谢!但我不断得到一个错误:“无法读取未定义的'id'属性”,我搜索了一下,但没有找到相关的内容。你知道这是干什么用的吗?我不知道。听起来好像有什么东西意外地返回了一个未定义的值,这有时会提示服务器出现错误或意外响应,但我不知道足够的javascript来建议从何处开始调试。以上内容适用于我的
pkgcloud
版本
2.2.0