【问题标题】:Map instance ID with private IP (VMSS)使用私有 IP (VMSS) 映射实例 ID
【发布时间】:2019-09-20 17:35:26
【问题描述】:

我的你好消失了,所以你好

使用 Azure CLI,我需要在一个命令中获取我的 VMSS 实例的实例 ID 和私有 IP。

我已经试过了:

  • az vmss nic list-vm-nics : 但我只有私网IP
  • az vmss list-instances : 但我只有实例 id

你知道获取它们的 cli 命令吗?

我需要在我的应用程序网关(后端池是我的 VMSS)中获取不健康的实例并删除它们。

我成功获得了不健康的 ip 实例(使用命令 az network application-gateway show-backend-health),但我需要将这些 IP 与实例 ID 映射才能使用此命令:az vmss delete-instances

对于所有 az vmss 命令,我找不到将私有 IP 与实例 ID 映射的方法...

目标是运行自动删除不健康实例的作业。

感谢您的帮助! 瓦伦丁

【问题讨论】:

    标签: azure command-line-interface


    【解决方案1】:

    您可以像这样使用已知的私有 IP 地址过滤虚拟机 ID,

    az vmss nic list -g resourcegroupname --vmss-name vmssname --query "[?ipConfigurations[0].privateIpAddress == '10.0.0.7'].virtualMachine.id" -o tsv
    

    结果

    【讨论】:

    • 谢谢南希,我在您的消息之前也找到了一种使用查询的方法但是您的查询比我的更优化,所以我会使用它! :)
    【解决方案2】:

    我找到了我正在搜索的内容,并且我使用了 Nancy 的查询,所以如果它可以帮助某人,我将我的脚本放在这里

    #!/bin/bash
    
    set -e
    set -o pipefail
    
    #############
    # VARIABLES #
    #############
    
    resource_group="your_rg"
    appgw_name="your_appgw"
    vmss_name="your_vmss"
    subscription="your_sub"
    
    
    ##########
    # SCRIPT #
    ##########
    
    az account set --subscription ${subscription}
    
    # Get Actual Backend IPs
    backend_ips=$(az network application-gateway show-backend-health --resource-group ${resource_group} --name ${appgw_name} | grep 'address')
    backend_ips=$(sed 's/"//g;s/ //g;s/address://g' <<< ${backend_ips})
    
    # Get Backend Health 
    backend_health=$(az network application-gateway show-backend-health --resource-group ${resource_group} --name ${appgw_name} | grep 'health\"')
    backend_health=$(sed 's/"//g;s/ //g;s/health://g' <<< ${backend_health})
    
    # Get Backend Count
    backend_count=$(echo ${backend_ips} | awk -F "," '{print NF-1}')
    
    # Put backend ips and health into tab
    IFS=',' read -ra backend_ips <<< "${backend_ips}" 
    IFS=',' read -ra backend_health <<< "${backend_health}" 
    
    
    # SEARCH FOR A UNHEALTHY INSTANCE
    for (( i=0; i < ${backend_count}; i++))
    do
            echo -e "\n########\n# [IP] ${backend_ips[$i]}"
            echo -e "# [Health] ${backend_health[$i]}\n########\n"
    
            if [ "${backend_health[$i]}" == "Unhealthy" ]
            then
                    echo -e "  -> L'instance ${backend_ips[$i]} est à l'état Unhealthy."
                    unhealthy_instance_id=$(az vmss nic list -g ${resource_group} --vmss-name ${vmss_name} --query "[?ipConfigurations[0].privateIpAddress == '${backend_ips[$i]}'].virtualMachine.id" -o tsv | cut -d "/" -f 11)
    
                    echo -e "  -> Suppression de l'instance n°${unhealthy_instance_id}" 
                    #az vmss delete-instances -g ${resource_group} -n ${vmss_name} --instance-ids ${unhealthy_instance_id}
            fi
    done
    
    
    exit 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2022-01-15
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2017-08-13
      相关资源
      最近更新 更多