我正在尝试编写Azure CLI脚本,使用服务主体将我登录到门户网站,选择订阅,然后仅为每个资源组的订阅标记VM。
az login -u $service_principal_ID -p $service_principal_password --service-principal --tenant $tenant_ID
az account set --subscription $subID
az resource tag --resource-group $rg \
--tags tags.project=$project tags.owner=$owner tags.environment=$env \
--resource-type "Microsoft.Compute/virtualMachines" \
--output tsv
Azure在运行时出现错误,说--name
缺失,但我不想逐个标记虚拟机。
任何想法?
答案 0 :(得分:0)
我还没有尝试过这个(我不需要任何资源标记;)
但是这样的事情会让你工作。
基本上,您需要传递该命名参数,唯一的方法是首先解析VM列表。
sample=$(az vm list --resource-group $rg )
for row in $(echo "${sample}" | jq -r '.[] | @base64'); do
_jq() {
echo ${row} | base64 --decode | jq -r ${1}
}
VMName=$(_jq '.name')
az resource tag --resource-group $rg \
--tags tags.project=$project tags.owner=$owner tags.environment=$env \
--resource-type "Microsoft.Compute/virtualMachines" \
--name $VMName \
--output tsv
done
完全不相关,这可能应该被删除 - 但是该死的,我确实想念这个东西在PowerShell中是多么容易。
答案 1 :(得分:0)
将所需的标记添加到资源组:
az group update -n $rg \
--set tags.project=$project tags.owner=$owner tags.environment=$env
然后将该资源组中的所有代码应用于每个子资源:
do
jsontag=$(az group show -n $rg --query tags)
t=$(echo $jsontag | tr -d '"{},' | sed 's/: /=/g')
r=$(az resource list -g $rg --query [].id --output tsv)
for resid in $r
do
az resource tag --tags $t --id $resid
done
done