【问题标题】:Azure CLI How to iterate over listAzure CLI 如何迭代列表
【发布时间】:2018-03-28 20:02:00
【问题描述】:

我需要重新启动 Azure Batch 中的所有节点。我如何使用 Azure CLI 做到这一点?

基本上我如何在 Azure CLI 中迭代 List/Collection 并在该循环中调用命令来停止 VM

【问题讨论】:

    标签: azure azure-cli2


    【解决方案1】:

    没有一个命令可以做到这一点,但您可以使用脚本重新启动所有节点。如果你使用 bash shell,你可以使用下面的例子:

    pools="$(az batch pool list |grep id|awk -F\" '{print $4}')"
    for pool in $pools
    {
      nodes="$(az batch node list --pool-id $name|grep -F "id\":"|awk -F\" '{print $4}')"
          for node in $nodes
          {
              az batch node reboot --node-id $node --pool-id $pool
          }
    }
    

    如果可以使用 Power Shell,则可以使用

    重新启动所有节点
    Get-AzureBatchComputeNode -PoolId "MyPool" -BatchContext $Context | Restart-AzureBatchComputeNode -BatchContext $Context
    

    有关此的更多信息,请参阅link。

    【讨论】:

    • 如果您在 Windows 上使用 cli,请告诉我,我可以更改脚本。
    • 一般来说,我建议使用--query 选择我感兴趣的字段,使用--output tsv 从 az 命令获取原始文本输出。很少需要 grep 和 awk。
    • @JohanStenberg-MSFT 老实说,我是 Linux 脚本爱好者。我更喜欢使用sed 和awk。是的,也许--query 可以获得价值。但它得到一个json文件。我需要使用jq 再次过滤。您好,如果您是 Azure CLI 开发人员,建议您对其进行优化。
    • --query 的使用和预期的输出格式是正交的。换句话说,使用--query 并不意味着--output json。 CLI 支持 --output tsv 的原因之一是确切地支持从输出中提取一个或多个标量值并将它们作为一组空格传递的场景(实际上是制表符)将值分隔到您最喜欢的下一个命令中。
    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2019-09-17
    • 2021-10-28
    • 2020-05-24
    • 2015-02-04
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多