Аутентифицировать имя пользователя и пароль в OpenStack с помощью pkgcloud - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь вызвать API для аутентификации по паролю в OpenStack. Это 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)
})

Функции getFlavors и getServers возвращают 405 Метод не разрешен - метод не разрешен для запрошенного URL.

что такое не так с моим кодом? и если я должен использовать другой URL для getFlavors или любой другой функции, где я должен поместить его?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я сделал то, что сказал Ярск, а также добавил идентификатор арендатора, и он работал нормально.

Это конфигурация, которую я использовал:

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>
}
1 голос
/ 25 января 2020

Во-первых, вместо указания basePath: 'v3', вы должны явно установить версию Keystone через keystoneAUthVersion. Простая установка 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)
})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...