我使用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
谢谢
我尝试重现您的问题,但未能通过我的代码列出所有虚拟机,如下所示。在运行我的代码之前,我分配了一个角色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个VM列表,如下图所示。但是,我的代码只有153个VM。我不知道为什么结果不同,但我的代码结果与Azure CLI命令az vm list | grep vmId | wc -l
相同。
图1.当前订阅中的VM数量
图2.我的代码的结果
图3. Azure CLI命令az vm list|grep vmId|wc -l
的结果
根据我的经验,我认为您的问题是由为您的应用分配较低权限角色而仅列出您具有默认访问权限的VM。
任何关注或更新对于了解您的真实问题非常有帮助,请随时告诉我。
我不知道这是否是解决问题的最佳方法,但我找到了解决方案:
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