我尝试添加如下所示的内容但出现如下语法错误。
az network application-gateway waf-policy custom-rule update
--resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --set matchConditions[0].matchValues="20.80.71.229/24" "20.80.71.228/24"
预期 <class 'list'>,得到 20.80.71.229/24 (<class 'str'>)
相似地。
az network application-gateway waf-policy custom-rule update --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --set matchConditions[0].matchValues="20.80.71.229,20.80.71.228"
预期 <class 'list'>,得到 20.80.71.229,20.80.71.228 (<class 'str'>)
这个有效。
az network application-gateway waf-policy custom-rule update \
--resource-group rp-licaltcs-aks-prod \
--policy-name waf-licaltcs-prod-eastus \
--name WhitelistIP \
--set "matchConditions[0].matchValues=['20.80.71.229', '20.80.71.228']"
但现在还有一个问题,现有值被替换而不是附加它。
因此我认为首先获取先前的值并将其传递下去。
当我运行以下命令时。
az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output tsv
将提供如下输出
20.80.71.229
20.80.71.228
但如果我将其分配给一个变量,它只会选择第一个值。
existing_ips=$(az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-
prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output json | ./jq.exe -r '.[]')
无论是使用 json 还是 tsv,它都仅分配 ip 的第一个值。
总脚本:
#!/bin/bash
# The IP address you want to add
new_ip="20.80.71.230"
# Get the current list of whitelisted IP addresses
existing_ips=$(az network application-gateway waf-policy custom-rule show --resource-group rp-licaltcs-aks-prod --policy-name waf-licaltcs-prod-eastus --name WhitelistIP --query matchConditions[0].matchValues --output tsv)
# Check if the new IP is already in the list
if echo "$existing_ips" | grep -q "$new_ip"; then
echo "The IP address $new_ip is already in the whitelist."
else
# If not, add it to the list
updated_ips=$(echo -e "$existing_ips\n$new_ip" | tr '\n' ',' | sed 's/,$//')
az network application-gateway waf-policy custom-rule update \
--resource-group rp-licaltcs-aks-prod \
--policy-name waf-licaltcs-prod-eastus \
--name WhitelistIP \
--set "matchConditions[0].matchValues=[$updated_ips]"
echo "The IP address $new_ip has been added to the whitelist."
fi
答案1
powershell 列表由逗号分隔的元素组成。
"foo","bar"
是由字符串"foo"
和组成的列表"bar"
。"foo, bar"
是一个内容为的字符串"foo, bar"
。
因此您应该使用matchConditions[0].matchValues="20.80.71.229","20.80.71.228"
。