2020-05-17

5/17

gcloud-prompt作った

これ: https://github.com/progrhyme/gcloud-prompt

作り始める前に、一応既存のがないかは調べた。 下が見つかった:

上はactiveなconfigurationを表示しているだけ。
下は逆に、 default configuration前提で、 account, project の情報を表示している。

自分のニーズとしては、 projectcompute.region を入れたい。
あまりconfigurationsを活用できてないけど、なるべくconfigurationsで管理していきたい気持ちはあるので、activeなconfigurationも表示したいと思った。

…で、上のgcloud-ps1のコードを参考にしながら、とりあえずMacの.zshrcにベタに実装していたが、愚直に実装するとgcloudコマンドが遅すぎて使い物にならないことに気がついた。

コマンド1回で0.3sぐらいかかってたので、configuration, project, compute.regionをそれぞれ取得していたら、ENTERを打つたびに1秒待つことになる。
さすがに無理である。

activeなconfigurationの取得

そこで、activeなconfigurationの取得については、環境変数CLOUDSDK_ACTIVE_CONFIG_NAMEが設定されていればそちらを、そうでなければ $HOME/.config/gcloud/active_config を直接見ることにした。

configパラメータの取得

…で、configパラメータの取得だが、現在の設定リストは default configurationであれば $HOME/.config/gcloud/configurations/config_default に保存されている。
ただし、INIファイル形式で、さすがにシェルスクリプトで自前でパースするのはしんどそう。

CLIリファレンスを読み込んでいると、 gcloud config list --format=FORMAT オプションで任意のキーを所望のフォーマットで取得できることがわかった。

これも毎回実行していると遅いので、コマンドの実行結果をキャッシュファイルに書いて、上のファイルとのタイムスタンプを比較して、更新されていなければキャッシュファイルをcatして返すようにした。

clenv対応

submoduleにしたくなかったので、clenv/bin/clamでinstallできるようにした。
なにげに自作のシェルスクリプトライブラリを自分のシェル環境で常にロードして使うのは初めてだったのかも?

自分で作ったclenvの使い方をすっかり忘れていたので、ソースを解読して使い方を把握した。

name=gcloud-prompt
version=0.5.0
libraries="gcloud-prompt.sh"

上を clam.spec ってファイルで作っておくとclamでインストールして、 gcloud-prompt.shclenv/bin/cloadで読み込めるところに配置してくれる。

シェル環境の方の対応コミットは下:

clenvのライブラリをロードするコードがなかったので、追加した。