LoginSignup
149
106

More than 3 years have passed since last update.

gcloud でプロジェクトの切り替え設定

Last updated at Posted at 2019-04-27

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))$ '

とか

149
106
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
149
106