gcloud config configurations を使ってプロジェクトの切り替えができるようにしておくのが良さそう。
認証
OAuth またはサービスアカウント.json で認証
$ gcloud auth login # OAuth
または
$ gcloud auth activate-service-account --key-file パス # Service Account
一覧
$ gcloud auth list
ACTIVE ACCOUNT
xxxx@developer.gserviceaccount.com
* foo@example.com
あとで gcloud config set account アカウント名
のようにして使う。
プロジェクトをまたいで使いまわすこともできる。
設定作成
$ gcloud config configurations create 任意の設定名
$ gcloud config set project プロジェクト名(aliasではない)
$ gcloud config set account アカウント名
設定一覧と切り替え
一覧
$ gcloud config configurations list
NAME IS_ACTIVE ACCOUNT PROJECT DEFAULT_ZONE DEFAULT_REGION
foo False xxxx@developer.gserviceaccount.com foo-foo-217
bar True foo@example.com bar-bar-999
切り替え
$ gcloud config configurations activate 設定名
カレント設定もしくはカレントプロジェクトの表示
$ gcloud config configurations list | grep True | awk '{print $1}'
設定名
$ gcloud config configurations list | grep True | awk '{print $4}'
プロジェクト名
多少もたつくので速度が欲しい場合(PROMPTに表示するなど)はこう
$ cat ~/.config/gcloud/active_config
設定名
$ cat ~/.config/gcloud/configurations/config_設定名 | grep 'project = ' | awk -F' = ' '{print $2}'
プロジェクト名
もっと便利に
peco および zsh completions で一覧からの選択切り替えができるようにしておくと便利
.zshrc
function gcloud-activate() {
name="$1"
project="$2"
echo "gcloud config configurations activate \"${name}\""
gcloud config configurations activate "${name}"
}
function gx-complete() {
_values $(gcloud config configurations list | awk '{print $1}')
}
function gx() {
name="$1"
if [ -z "$name" ]; then
line=$(gcloud config configurations list | peco)
name=$(echo "${line}" | awk '{print $1}')
else
line=$(gcloud config configurations list | grep "$name")
fi
project=$(echo "${line}" | awk '{print $4}')
gcloud-activate "${name}" "${project}"
}
compdef gx-complete gx
gx [TAB]
で補完が表示され、選択すると切り替え。
もしくは gx[ENTER]
とすると peco で絞り込み検索ができます。
GKEクラスタも一緒に切り替える
kubectl でのクラスタの切り替え設定と連動させる。GKEを使っていないプロジェクトでも特に問題にはならないようにしてある。
前提: プロジェクトにGKEクラスタが1つしかないものとしている。複数GKEクラスタがある場合はさらに絞り込みかな。TODO
上記の gcloud-activate
だけ置き換え。
.zshrc
function gcloud-activate() {
name="$1"
project="$2"
echo "gcloud config configurations activate \"${name}\""
gcloud config configurations activate "${name}"
cluster=$(kubectl config get-clusters | grep "${project}")
if [ -n "${cluster}" ]; then; kubectl config use-context "${cluster}"; fi
}
設定名(別名)からプロジェクト名を取得する
.bashrc
# Get project real name
function gcloud-alias() {
gcloud config configurations list | grep "^$1" | head -1 | awk '{print $4}'
}
多少もたつくので速さが欲しければこう
.bashrc
# Get project real name
function gcloud-alias() {
grep 'project = ' "$HOME/.config/gcloud/configurations/config_$1" | awk -F' = ' '{print $2}'
}
使い方
$ gcloud-alias 設定名
プロジェクト名
カレント設定を取得する
.bashrc
function gcloud-current() {
cat $HOME/.config/gcloud/active_config
}
PROMPTにカレント設定を表示する
.bashrc
PROMPT='あなたのいつもの設定($(gcloud-current))$ '
とか