使用pkgcloud在OpenStack中验证用户名和密码

问题描述 投票:0回答:1

我正在尝试在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或任何其他函数,应该放在哪里?

node.js openstack pkgcloud
1个回答
0
投票

首先,而不是指定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)
})

© www.soinside.com 2019 - 2024. All rights reserved.