1

私は bash に比較的慣れていないので、Azure CLI を使用して Azure MySQL サーバー インスタンス用に 127 個の VNET セキュリティ ルールを作成する必要があります。これには、ルール名と関連付けられたサブネット ID が必要です。ルール名はサブネット名です。サブネット名と ID を配列に読み取ることができ、配列にデータが取り込まれていることがわかります。

mapfile -t vnetRULEname < <(az network vnet subnet list -g resourcegroup --vnet-name vnet --query "[].{name:name}" -o table)

mapfile -t vnetRULEid < <(az network vnet subnet list -g resourcegroup 
--vnet-name vnet --query "[].{objectID:id}" -o table)

次に、次のコマンドを実行して、配列内の各名前と ID を使用して 127 のルールを作成し、ルールを作成します。

az mysql server vnet-rule create -n <rule name from vnetRULEname> -g resourcegroup -s servername --subnet <subnet ID from vnetRULEid>

サブネット名と ID 値の両方を同じ配列に読み込む方がよいでしょうか?

bashスクリプトでこれを行う最良の方法は何ですか?また、名前とIDという列ヘッダーとGatewaySubnetというサブネットを無視するように指示するにはどうすればよいですか?

出力例(サブネット名)

Name
-------------
GatewaySubnet
app-host-001
app-host-002
app-host-003
app-host-004
app-host-005

出力例(サブネットID)

ObjectID
----------------------------------------------------------------------------- 
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/GatewaySubnet
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/app-host-001
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/app-host-002
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/app-host-003
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/app-host-004
/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/resourcegroup/providers/Microsoft.Network/virtualNetworks/vnet/subnets/app-host-005

ランニング

#!/bin/bash

mapfile -t vnetRULEname < <(az network vnet subnet list -g resourcegroup --vnet-name vnet --query "[].{name:name}" -o table)
mapfile -t vnetRULEid < <(az network vnet subnet list -g resourcegroup --vnet-name vnet --query "[].{objectID:id}" -o table)
echo "These are vnetRULEname: ${vnetRULEname[@]}"
echo "These are vnetRULEids : ${vnetRULEid[@]}"

私が期待するように、両方の配列の内容を画面に表示します。しかし、私が実行すると

mapfile -t vnetRULEname < <(az network vnet subnet list -g resourcegroup --vnet-name vnet --query "[].{name:name}" -o table)
mapfile -t vnetRULEid < <(az network vnet subnet list -g resourcegroup --vnet-name vnet --query "[].{objectID:id}" -o table)
#echo "These are vnetRULEname: ${vnetRULEname[@]}"
#echo "These are vnetRULEids : ${vnetRULEid[@]}"
sizeofarrays=${#arr[@]}
for (( i=0 ; i < sizeofarrays ; i++ ))
do
    az mysql server vnet-rule create --name "${vnetRULEname[$i]}" --resource-group resourcegroup --server server --subnet "${vnetRULEid[$i]}"
done
echo ${arr[@]}  ## print all the array
echo ${#arr[@]} ## print its size

私は得る

0

0

よろしくお願いします。

アンドリュー

4

2 に答える 2