Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

とか

sonots
A Ruby, Fluentd, and Chainer Committer. SRE Engineer. Qiitaは小ネタの投稿場所として利用しています。業務コードで、なぜそういう書き方をしているのか解説をQiitaに書いて、コードにはQiitaへのリンクを張る、という使い方をしていることが多いです(自己紹介じゃない)
https://medium.com/@sonots
zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした