cf コマンドでターゲット毎に $CF_HOME を切り替えるエイリアスを貼る & 自動生成する
雑記。cf
コマンドと $CF_HOME
の切り替えについて。
cf
と $CF_HOME
CloudFoundry の CLI であるところの cf
コマンドは接続する API とターゲット(Org と Space)を変えるために cf login
や cf 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
/.bashrc
に eval "$(fcfc)"
と書くと前述のようなエイリアスが定義される。