【问题标题】:Azure DevOps hosted ubuntu agent issue updating Application GatewayAzure DevOps 托管的 ubuntu 代理问题更新应用程序网关
【发布时间】:2019-04-15 09:39:11
【问题描述】:

我使用 Terraform 部署了一些基础设施,包括应用程序网关。不幸的是,并非所有设置都可以使用 terraform 设置/更新。所以我有一个更新应用程序网关的 shell 脚本。

#!/bin/bash
SP_ID=${1}
SP_SECRET=${2}
TENANT_ID=${3}
SUBSCRIPTION=${4}
RG=${5}

az login --service-principal -u ${SP_ID} -p ${SP_SECRET} -t ${TENANT_ID}
az account set --subscription ${SUBSCRIPTION}
az account list -o table

# Get the name of the AG
echo "RG = ${RG}"
AG=$(az network application-gateway list --resource-group ${RG} | tail -n 1 | awk '{ print $2 }')
echo "AG = ${AG}"

# Get the AG backend pool name
BP=$(az network application-gateway address-pool list --resource-group ${RG} --gateway-name ${AG} | tail -n 1 | awk '{ print $1 }')
echo "Backend pool = ${BP}"

# Get the frontendip of the load balancer
LB=$(az network lb list --resource-group ${RG} | tail -n 1 | awk '{ print $2         }')
LBFEIP=$(az network lb frontend-ip list --lb-name ${LB} --resource-group    ${RG} | tail -n 1 | awk '{ print $2 }')
echo "Load balancer = ${LB}"
echo "Frontend ip LB =  ${LBFEIP}"

# Update the backend pool of the AG with the frontend ip of the loadbalancer
echo "Updating Backend address pool of AG ${AG}"
az network application-gateway address-pool update --gateway-name $AG --resource-group $RG --name $BP --servers ${LBFEIP}

# Update http settings
echo "Updating HTTP settings of AG ${AG}"
AG_HTS=$(az network application-gateway http-settings list --resource-group     ${RG} --gateway-name ${AG} | tail -n 1 | awk '{ print $2 }')
az network application-gateway http-settings update --resource-group ${RG} --gateway-name ${AG} --name ${AG_HTS} --host-name-from-backend-pool true

# Update health probe
echo "Updating Health probe of AG ${AG}"
AG_HP=$(az network application-gateway probe list --resource-group ${RG} --gateway-name ${AG} | tail -n 1 | awk '{ print $4 }')
az network application-gateway probe update --resource-group ${RG} --gateway-name ${AG} --name ${AG_HP} --host '' --host-name-from-http-settings true

这个脚本可以在我的笔记本电脑上本地运行,但是通过 azure devops 发布管道我得到了错误:

ERROR: az network application-gateway address-pool list: error: argument --gateway-name: expected one argument

当脚本通过发布管道运行时,它无法获取应用程序网关名称。 同样,在本地运行此脚本时,它工作正常。有人知道我在这里可能遗漏了什么或可以尝试吗?

我在 WSL Ubuntu 上创建了脚本,并使用 ubuntu 托管代理发布工件,还使用托管 ubuntu 代理部署脚本。

【问题讨论】:

  • 上面你回显AG的结果的行的输出是什么?此外,您似乎在出错的行上有一个复制粘贴错误,或者您实际上正在运行 ... -- resource-group... 而不是 ... --resource-group...(注意空格),这可能会导致您出现问题。
  • 回声没有为 AG 提供任何值,因此不知何故它没有获得 AG 名称。哦,对不起,那是复制粘贴错误。错误在于此命令:az network application-gateway address-pool update --gateway-name $AG --resource-group $RG --name $BP --servers ${LBFEIP}。但这只是因为不知何故这不起作用:AG=$(az network application-gateway list --resource-group ${RG} | tail -n 1 | awk '{ print $2 }')
  • 我想我已经知道问题出在哪里了……现在就试试。但我认为这是因为输出是 json 而不是 table。

标签: azure azure-devops terraform azure-cli


【解决方案1】:

错误直接说明问题。您的参数“AG”为空。您可以通过 CLI 命令获取参数“AG”:

az network application-gateway list -g nancyweb --query "[].name" -o tsv

或者你想要的输出格式表:

az network application-gateway list -g nancyweb -o table | tail -n 1 | awk '{print $3}'

您可以获取有关az network application-gateway list 的更多详细信息。但是如果你想得到一个特定的,你应该注意一点,因为 list 命令显示了所有的应用程序网关。

【讨论】:

  • 嗨,问题是我没有使用表格输出。我在本地使用表输出,但托管代理上的 az cli 默认使用 json。
  • 我知道它列出了所有 AG,但我知道资源组中只有一个 AG。
  • 是的,默认输出格式是 JSON。此外,如果您知道组中只有一个 AG,则确定结果。我只是指出来。
  • 我知道,但也许有人决定在 terraform 模板上更改 AG 的变量值。不希望其他人不得不在不同的地方改变变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多