6onoda は IBM Cloud の複数のアカウントで権限を持っています。今回棚卸しのため、自分が作成したサービスをリストする必要がありました。
IBM Cloud CLI で可能なのはわかっていましたが、今回は Copilot にそのスクリプトを生成させてみました。
いったん、アクセス可能な全アカウント、全サービスを csv に吐き出させます。そこから、作成者の ID でフィルターして自分が作成したサービスを確認します。
まあ、csv を grep してもいいけど、今回のコードはそこまで書いていません。
Excel フィルターでも csv - grep でもお好きな方へどうぞ。
なお、IAM ベースなので、Classic 環境には有効ではないと思います。
(現在、Classic 環境にリソースを持っていないので、確認していません。)
完成したスクリプトはこちら
Windows の WSL と Mac の両方で稼働確認しています。
コメントにあるとおり、IBM Cloud CLI と jq がインストールされていることが前提です。
IBM Cloud の CLI 導入の情報は、こちらにあります。
Windows WSL 環境には Linux 用を導入してください。
また、このスクリプトの実行前に「ibmcloud login (-sso)」のように、CLI から IBM Cloud にログインしてください。複数のアカウントにアクセスできる場合、どのアカウントにアクセスしても構いません。
#!/bin/bash
# IBM Cloud CLI にログイン済みであることを前提とします
# jq がインストールされている必要があります
echo "すべてのアカウントとリソースグループにあるサービスインスタンスを取得してCSV形式で出力します..."
# CSVヘッダーを出力
echo "Account GUID,Account Name,Resource Group,Service Name,Service Type,Plan,Region,Created By" > ibmcloud_services_all_accounts.csv
# 全アカウントを取得
ibmcloud account list --output json > accounts.json
account_count=$(jq length accounts.json)
if [ "$account_count" -eq 0 ]; then
echo "アクセス可能なアカウントが見つかりません。"
exit 1
fi
for i in $(seq 0 $(($account_count - 1))); do
account_guid=$(jq -r ".[$i].Guid" accounts.json)
account_name=$(jq -r ".[$i].Name" accounts.json)
echo "アカウント: $account_name ($account_guid) に切り替え中..."
ibmcloud target -c "$account_guid" > /dev/null
# 全リソースグループを取得
resource_groups=$(ibmcloud resource groups --output json | jq -r '.[].name')
for rg in $resource_groups; do
echo "リソースグループ: $rg を処理中..."
ibmcloud target -g "$rg" > /dev/null
ibmcloud resource service-instances --output json | jq -r --arg rg "$rg" --arg aguid "$account_guid" --arg aname "$account_name" '
.[] | select(.created_by != null) |
[$aguid, $aname, $rg, .name, .resource_name, .resource_plan_name, .region_id, .created_by] |
@csv
' >> ibmcloud_services_all_accounts.csv
done
done
rm -f accounts.json
echo "CSVファイル ibmcloud_services_all_accounts.csv に出力が完了しました。"
作成者 ID
csv に表示される 作成者 の ID は、メールアドレスではなく、IBMid-xxxxx という形式で表示されます。
これは、下記から、ユーザーの詳細を開くと、
こちらで確認できるものです。
csv を Excel などで開いて、自分の ID でフィルターしてくだい。
もちろん、csv を開く前に grep してもいいです。
なお、Windows WSL の場合、下記で WSLホルダーをエクスプローラで開けます。
explorer.exe .
Copilot との対話
アカウントの切り替え
最初に生成されたコードはアカウントの切り替えに「ibmcloud account switch」を使おうとしていました。
そのようなオプションは無く、正しくは「ibmcloud target -c 」なので、それを指示して、修正してもらいました。
しかしアカウントの取得が、それでも出来ませんでした。
アカウント ID と名前の取得
ibmcloud account list --output json > accounts.json
何回かの試行のうちに、上記のようにいったんアカウントを json ファイルに吐き出して、そこから、下記のように「id」と「name」でアカウント ID と名前の取得をするコードを生成してきました、
for i in $(seq 0 $(($account_count - 1))); do
account_id=$(jq -r ".[$i].id" accounts.json)
account_name=$(jq -r ".[$i].name" accounts.json)
しかし、実際の属性は、上記のコードのように「Guid」と「Name」です。
試しに「ibmcloud account list --output json には、idアトリビュートはありません。Guidに書き換えてください」と指示してみましたが「Guid」ではなく、小文字の「guid」に変更しただけでした。
ここは、指示をあきらめ自分でスクリプトを書き換えました。
修正しなかった点
「Service Type」と「Plan」というカラムがありますが、ブランクになります。
スクリプトを生成させた目的は達したのと、適当な情報が「ibmcloud resource service-instances --output json 」から、取得でき無さそうだったので、修正をやめました。
ちなみに「type」という属性はあるのですが、特定のアカウントでみると、すべてに「service_instance」と入っていました。
何時、作成して変更したかの「created_at」とか「updated_at」の属性はありますので、そちらを追加する方が、有用かもしれません。