Google Compute Engineのstartup scriptsを取得するコマンド。(INSTANCE_NAMEのところはインスタンスの名前を入れます)
$ gcloud compute instances describe INSTANCE_NAME --format json | jq '.metadata.items|from_entries."startup-script"' -r
説明
gcloud compute instances describe
コマンドで、startup scriptsをJSONで取得できるのですが、JSONでエンコーディングされてしまっています。長いスクリプトをこれで見るのは辛いです。
$ gcloud compute instances describe INSTANCE_NAME --format json | jq '.metadata.items' [ { "key": "startup-script", "value": "echo Hello\n" } ]
jq
コマンドで from_entries
というのを使うと、
[ { "key": "startup-script", "value": "echo Hello\n" } ]
を
{ "startup-script": "echo Hello\n" }
に変換できます。なので from_entries."startup-script"
と書くとスクリプトの部分を取得でき、 -r
を付ければできあがりです。
to_entries, from_entries, with_entries | jq Manual (development version)
おまけ:startup scriptsをインスタンスからインスタンスにコピー
gcloud compute instances add-metadata
コマンドの--metadata-from-file
は標準入力も受け取れるようですので、パイプでつないで以下のようにすれば、startup scriptsをインスタンスからインスタンスにコピーできました。
$ gcloud compute instances describe SRC_INSTANCE_NAME --format json | jq '.metadata.items|from_entries."startup-script"' -r | gcloud compute instances add-metadata DST_INSTANCE_NAME --metadata-from-file startup-script=/dev/stdin
2021/05/20 追記
インスタンスからはcurlコマンドでも自身のstartup scriptsを取得できます。
$ curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/attributes/startup-script