Azure节点SDK可获得50多个虚拟机

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

我使用Azure节点SDK获取订阅的所有虚拟机:

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

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

但我订阅了50多个vm,并且该呼叫仅返回50 vm的最大值。

使用此函数computeClient.virtualMachines.listAll可以获得超过50个vms? https://github.com/Azure-Samples/compute-node-manage-vm

谢谢

node.js azure azure-virtual-machine azure-node-sdk
2个回答
1
投票

我尝试重现您的问题,但未能通过我的代码列出所有虚拟机,如下所示。在运行我的代码之前,我分配了一个角色Virtual Machine Contributor(或者您可以使用更高级别的角色,如ContributerOwner)到我的应用程序在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个VM列表,如下图所示。但是,我的代码只有153个VM。我不知道为什么结果不同,但我的代码结果与Azure CLI命令az vm list | grep vmId | wc -l相同。

图1.当前订阅中的VM数量

enter image description here

图2.我的代码的结果

enter image description here

图3. Azure CLI命令az vm list|grep vmId|wc -l的结果

enter image description here

根据我的经验,我认为您的问题是由为您的应用分配较低权限角色而仅列出您具有默认访问权限的VM。

任何关注或更新对于了解您的真实问题非常有帮助,请随时告诉我。


0
投票

我不知道这是否是解决问题的最佳方法,但我找到了解决方案:

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

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