我正在尝试使用Azure RM的rest接口获取资源组中所有VM的状态。
我可以使用URL获取1个VM的状态 https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroup]/providers/Microsoft.Compute/virtualmachines/[serverName]?$扩大= instanceView
我可以使用此URL获取所有VM https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroup]/providers/Microsoft.Compute/virtualmachines
然而,这不会返回VM的状态。我尝试传递$ expand = instanceView,但是当我获得所有虚拟机时,这没有任何影响。
答案 0 :(得分:0)
这不会返回VM的状态。我尝试传递$ expand = instanceView,但是当我获得所有虚拟机时,这并没有任何影响。
从this documentation开始,我们发现GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}?api-version=2016-03-30[&$expand]
允许我们使用$ expand选项展开属性,但GET /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines?api-version=2016-03-30
不支持$ expand选项。列出指定资源组中所有虚拟机的API方法可能不会返回IQueryable或不允许查询选项。
正如evilSnobu所说,你可以尝试分两步:列出指定资源组中的所有虚拟机并迭代所有虚拟机并提取名称属性,然后发送请求以检索指定虚拟机的信息并使用$ expand in扩展instanceView属性的请求的查询字符串。
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/virtualMachines/{2}?api-version=2016-03-30&$expand=instanceView", subscriptionid, resourcegroup, vmname));
request.Method = "GET";
request.Headers["Authorization"] = "Bearer " + token;
答案 1 :(得分:0)
要从虚拟机获取所有状态,只需一个API请求/调用,您可以使用:
var monsters = ["slug", "zombie", "wasp"];
var randomForMon = Math.floor(Math.random() * monsters.length);
var randMonster = monsters[randomForMon];
var user_answer = getNumber("answer_input");
var monstersAnswers = [null, null, null];
//when monster clicked, show fighting symbol and change screen
onEvent(randMonster, "click", function() {
const monsterAnswer = monstersAnswers[randomForMon];
if (monsterAnswer === false) {
// don't do anything
return;
}
hideElement("clickMonster_label");
showSymbol();
setTimeout(function() {
setScreen("equation_screen");
}, 1300);
newEquation();
var userAnswer = /* something */
monstersAnswers[randomForMon] = correctAnswer === userAnswer;
});
从此Azure RESTful API-虚拟机-列出所有documentation:
statusOnly = true启用获取所有虚拟服务器的运行时状态 订阅中的计算机。
因此,设置GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines?api-version=2020-06-01&statusOnly=true
可让您接收statusOnly=true
属性和一个provisioningState
对象,其中包含instanceView
,例如“ PowerState / running”,“ PowerState / stopped” “等等...
此外,返回的PowerState
对象中还有许多其他有用和重要的信息。在documentation上对此有更多了解。
经过数小时的搜索,这是我发现只需一次调用即可恢复所有实例状态的唯一方法。我看到的所有其他方法都是使用循环,并对每个VM执行一个API请求,这太慢了,并且取决于VM的应用程序和数量,这是不可接受的...