OCI CLI のプロファイルからテナンシの OCID を得る Bash スクリプト

OCI (Oracle Cloud Infrastructure) の各種操作・閲覧が行える OCI CLI

OCI CLI を使う際は、接続先の環境などを記したプロファイルを用意する。$ oci setup config コマンドでプロファイルを作成すると、デフォルトでは ~/.oci/config というパスにファイルが生成される。

今回は、このプロファイルからテナンシの OCID (OCI 上の全てのリソースに割り振られる ID) を抽出してみる。テナンシの OCID が分かれば、コレを基に OCI 上の色々な情報を抽出できるようになるだろう。

参考にしたのは以下のスクリプト。

# -- Check if the PROFILE exists
grep "\[$PROFILE\]" $OCI_CONFIG_FILE > /dev/null 2>&1
if [ $? -ne 0 ]; then echo "ERROR: PROFILE $PROFILE does not exist in file $OCI_CONFIG_FILE !"; exit 2; fi

# -- get tenancy OCID from OCI PROFILE
TENANCYOCID=`egrep "^\[|ocid1.tenancy" $OCI_CONFIG_FILE|sed -n -e "/\[$PROFILE\]/,/tenancy/p"|tail -1| awk -F'=' '{ print $2 }' | sed 's/ //g'`

整理すると以下のとおり。~/.oci/config ファイルから DEV というプロファイルのテナンシ OCID を拾うサンプルだ。

grep -E '^\[|ocid1.tenancy' "${HOME}/.oci/config" | sed -n '/\[DEV\]/,/tenancy/p' | tail -1 | awk -F'=' '{ print $2 }' | sed 's/ //g'

ファイルの所在とプロファイル名を変数に切り出した場合は以下のとおり。

OCI_CONFIG_FILE="${HOME}/.oci/config"
OCI_PROFILE='DEV'
grep -E '^\[|ocid1.tenancy' "${OCI_CONFIG_FILE}" | sed -n "/\[${OCI_PROFILE}\]/,/tenancy/p" | tail -1 | awk -F'=' '{ print $2 }' | sed 's/ //g'

いくつかのコマンドがパイプで連結されているが、各コマンドでやっていることは以下のとおり。

# egrep = grep -E。行頭が `[` で始まるか、`ocid1.tenancy` を含む行を抽出する
grep -E '^\[|ocid1.tenancy' config

# sed -n : 置換できた行だけを出力する。-e は付けても付けなくても変わらない
sed -n '/\[DEV\]/,/tenancy/p'

# Profile 名とテナンシ ID の2行が抽出できるので、下1行 = テナンシ ID だけ抽出する
tail -1

# 区切り文字を `=` に設定し、2列目を取得する。先頭の `tenancy=` が削れて OCID だけになる
awk -F'=' '{ print $2 }'

# 余計なスペースがあった時のために念のため削っておく
sed 's/ //g'

sedawk の使い方がとても参考になった。