2020-05-17
5/17
gcloud-prompt作った
これ: https://github.com/progrhyme/gcloud-prompt
作り始める前に、一応既存のがないかは調べた。 下が見つかった:
上はactiveなconfigurationを表示しているだけ。
下は逆に、 default
configuration前提で、 account
, project
の情報を表示している。
自分のニーズとしては、 project
や compute.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.sh
をclenv/bin/cloadで読み込めるところに配置してくれる。
シェル環境の方の対応コミットは下:
clenvのライブラリをロードするコードがなかったので、追加した。