大したことではないけど、テストで作りたくなるシナリオは確かにあるよな、と。
az cosmosdb postgres role createではadminパスワードが要求されるので、expectを使う。
#!/usr/bin/expect -f
set timeout -1
# 必要な環境変数を取得(Expect内では $env(変数名) で参照可能)
set root_password $env(ROOT_PASSWORD)
set pg_password $env(PGPASSWORD)
# 1から100までループ
for {set i 1} {$i <= 100} {incr i} {
# コマンド作成
set cmd "az cosmosdb postgres role create --no-wait -n \"user$i\" --password $pg_password -g group_name --cluster-name cluster_name"
puts "実行: $cmd"
spawn sh -c $cmd
expect {
"Password:" {
send "$root_password\r"
# パスワード送信後、プロセス終了を待つ(spawnプロセスが既に終了している場合はcatchで対応)
if {[catch {expect eof} err]} {
puts "Warning: spawn id is not open (user$i): $err"
}
}
timeout {
puts "タイムアウトしました: ユーザー user$i の作成時"
exit 1
}
eof {
# 突然EOFになった場合もエラーではなく次のループへ進む
puts "EOFに達しました(user$i)。"
}
}
}