Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
64
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@sonots

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

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

とか

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
64
Help us understand the problem. What are the problem?