繁体   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