Azure node SDK для получения более 50 виртуальных машин - PullRequest
0 голосов
/ 28 февраля 2019

Я использую SDK узла Azure, чтобы получить все виртуальные машины для подписки:

var computeClient = new computeManagementClient.ComputeManagementClient(credentials, subscriptionId);
var clientNetworkManagement = new NetworkManagementClient(credentials, subscriptionId);

    computeClient.virtualMachines.listAll(function (err, result) {  
        returnResult(result);
    });

Но у меня есть подписка с более чем 50 виртуальными машинами, и этот вызов возвращает только максимум 50 виртуальных машин.

Можно получить более 50 смс с помощью этой функции computeClient.virtualMachines.listAll?https://github.com/Azure-Samples/compute-node-manage-vm

Thx

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я не знаю, является ли это лучшим способом решения проблемы, но я нахожу решение:

msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain, function (err, credentials, subscriptions) {
    computeClient = new ComputeManagementClient(credentials, subscriptionId);

    computeClient.virtualMachines.listAll(function (err, result, httpRequest, response) {  
        let myResult = JSON.parse(response.body);
        console.log(result.length);
        nextLink = myResult.nextLink;

        console.log(nextLink);
        computeClient.virtualMachines.listAllNext(nextLink, function (err, result, request, response) { 
            console.log(result.length);
        });
    });
});

Первый вызов (listAll) возвращает значение 50 Vm и значение "nextLink".Затем я вызываю listAllNext (nextLink, ... который возвращает остальные 39 Vm's

0 голосов
/ 01 марта 2019

Я попытался воспроизвести вашу проблему, но не смог перечислить все виртуальные машины через мой код, как показано ниже.Прежде чем запускать свой код, я назначил роль Virtual Machine Contributor (или вы можете использовать роль более высокого уровня, например Contributer или Owner) для моего приложения, зарегистрированного в AzureAD для моей текущей подписки, вы можете обратиться к официальному документу Manage access to Azure resources using RBAC and the Azure portal, чтобы узнать это.

var msRestAzure = require('ms-rest-azure');
var ComputeManagementClient = require('azure-arm-compute');

var clientId = process.env['CLIENT_ID'] || '<your client id>';
var domain = process.env['DOMAIN'] || '<your tenant id>';
var secret = process.env['APPLICATION_SECRET'] || '<your client secret>';
var subscriptionId = process.env['AZURE_SUBSCRIPTION_ID'] || '<your subscription id for listing all VMs in it>';

var computeClient;

msRestAzure.loginWithServicePrincipalSecret(clientId, secret, domain, function (err, credentials, subscriptions) {
    computeClient = new ComputeManagementClient(credentials, subscriptionId);
    computeClient.virtualMachines.listAll(function (err, result) {  
        console.log(result.length);
    });
});

На портале Azure в моей текущей подписке есть список 155 виртуальных машин, как показано на рисунке ниже.Тем не менее, результат моего кода только 153 виртуальных машин.Я не знаю, почему результаты отличаются, но мой результат кода такой же, как и для команды Azure CLI az vm list | grep vmId | wc -l.

Рис. 1. Число виртуальных машин в моей текущей подписке

enter image description here

Рис. 2. Результат моего кода

enter image description here

Рис. 3. Результат интерфейса командной строки Azureкоманда az vm list|grep vmId|wc -l

enter image description here

По моему опыту, ваша проблема была вызвана назначением роли с более низким разрешением для вашего приложения только для перечисления виртуальных машин, которые выиметь разрешение на доступ по умолчанию.

Любые проблемы или обновления очень полезны для понимания вашей реальной проблемы, пожалуйста, дайте мне знать.

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