У меня не было большого успеха с JMESPath для запроса вывода.Но я обнаружил, что с помощью jq немного проще разобрать возвращаемый json.
Например, мне нужно добавить внутренние конечные точки службы для всех подсетей в конкретной виртуальной сети.Я передам вывод json в массив bash, и с помощью цикла for вы можете выполнять команды, используя пары значений ключей json.
update_subnet() {
subnet_service_endpoints="Microsoft.EventHub Microsoft.KeyVault Microsoft.ServiceBus Microsoft.Storage"
subnet_json=$(az network vnet subnet list --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --output json)
readarray -t SUBARR < <(echo ${subnet_json} | jq -c '.[]')
for SUBNET in "${SUBARR[@]}"
do
SUBNET_NAME=$(echo "${SUBNET}" | jq -r .name)
ADDRESS_PREFIX=$(echo "${SUBNET}" | jq -r .addressPrefix)
RESOURCE_GROUP=$(echo "${SUBNET}" | jq -r .resourceGroup)
RESULT=$(az network vnet subnet update --subscription ${subscription_name} --resource-group ${resource_group} --vnet-name ${virtual_network} --name ${SUBNET_NAME} --address-prefixes ${ADDRESS_PREFIX} --service-endpoints ${subnet_service_endpoints})
if [ "$RESULT" == "" ]
then
echo "Something happened and unable to parse command"
else
echo "${RESULT}"
fi
done
}