cf コマンドでターゲット毎に $CF_HOME を切り替えるエイリアスを貼る & 自動生成する

雑記。cf コマンドと $CF_HOME の切り替えについて。

cf$CF_HOME

CloudFoundry の CLI であるところの cf コマンドは接続する API とターゲット(Org と Space)を変えるために cf logincf target で切り替える必要がある。なので同時に違う Space のアプリを操作したい時とかは少し面倒。

ところで cf コマンドは接続しているターゲットやログイン情報を ~/.cf を保存するが、環境変数 $CF_HOME がある場合、そちらが指すディレクトリを参照する。なので操作するターゲット毎に $CF_HOME を変えれば、ターゲット切り替えコマンドの実行無しに違うターゲットのアプリを操作できる。

$ CF_HOME=~/.cf.foo cf login -a api.example.com -o foo -s space1 # foo/space1 へのログイン情報を ~/.cf.foo に保存
$ CF_HOME=~/.cf.bar cf login -a api.example.com -o bar -s space2 # bar/space2 へのログイン情報を ~/.cf.bar に保存
$ CF_HOME=~/.cf.foo cf start my-app-foo # foo/space1 のアプリ my-app-foo を起動
$ CF_HOME=~/.cf.bar cf stop my-app-bar  # bar/space2 のアプリ my-app-bar を停止

ターゲット毎にエイリアス化してみる

$CF_HOME=... を毎回タイプするのは補完の力を借りても面倒なので、自分が覚えられる形式のコマンドでラップしたい。

# login コマンド用エイリアス
alias login-foocf="CF_HOME=~/.cf.foo cf login -a api.example.com -o foo -s space1"

# login コマンド以外用のエイリアス
alias foocf="CF_HOME=~/.cf.foo cf"

cf コマンドの補完定義もそこそこに動作する。($CF_HOME を切り替えているので、アプリ名などのターゲット固有の補完はできない)

エイリアスを自動生成する

エイリアスはパターン化できそうなので、直接 .zshrc/.bashrc に書くのではなく、設定ファイル化して自動生成できそう。ということで fcfc というコマンドを作ってみている。

以下のような YAML~/.fcfc.yml に書く

commands:
  - name: foocf
    api: api.example.com
    org: foo
    space: space1
  - name: barcf
    api: api.example.com
    org: bar
    space: space2

そして .zshrc/.bashrceval "$(fcfc)" と書くと前述のようなエイリアスが定義される。