具有私有IP(VMSS)的映射实例ID

时间:2019-09-18 14:05:08

标签: azure command-line-interface

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

使用Azure CLI,我需要通过一个命令来获取我的VMSS实例的instance-id和private ip。

我已经尝试过:

  • az vmss list-instances:但是我只有私有IP
  • az network application-gateway show-backend-health:但我只有实例ID

您知道使用cli命令来获取它们吗?

我需要获取我的应用程序网关(后端池是我的VMSS)中不正常的实例并将其删除。

我成功获取了不正常的IP实例(使用命令az vmss delete-instances),但是我需要使用实例ID映射这些IP才能使用此命令:self-join

使用所有az vmss命令,我找不到一种方法来映射具有实例ID的私有IP ...

目标是运行可以自动删除不正常实例的作业。

感谢您的帮助! 瓦伦丁

2 个答案:

答案 0 :(得分:1)

您可以使用已知的专用IP地址过滤虚拟机ID,

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

结果 enter image description here

答案 1 :(得分:0)

我找到了要搜索的内容,并且使用了南希(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