y-ohgi's blog

しがないSREなフリーランスの徒然

GCPを複数プロジェクト触るのでbashを良い感じにする

概要

お仕事でGCPを複数プロジェクト扱うことになった
操作は基本 gcloudコマンドから行っているので、shellを良い感じにしたいのがモチベーション。 // あとGAEのデプロイ先GCPプロジェクトを間違えたのもモチベーション...
それと、GKEも使うのでそっちも良い感じにする

shellはmacOSデフォルトのbash
zshやfishは試したけど基本emacs上に居るしそんなにカスタマイズしなくて良いなーと思い結局bashに戻ってきた

GCP

プロジェクトを変更する

プロジェクト一覧を確認する

$ gcloud projects list

プロジェクトの変更

$ gcloud config set project <PROJECT_ID>

プロンプトに現在のプロジェクトを表示させる

.bash_profile へ以下を追記

PS1="[\W (\[\e[0;34m\$(cat ~/.config/gcloud/configurations/config_default | grep project | sed -E 's/^\project = (.*)$/\1/'))\[\e[0m\])]\$ "

こうなる f:id:y-ohgi:20180512150710p:plain

GKE

jonmosco/kube-ps1 を用いる。

導入

インストール

$ brew install kube-ps1

公式の .bash_profile コンフィグだと動かなかったので適当に追記

source "/usr/local/opt/kube-ps1/share/kube-ps1.sh"
PS1='[\W $(kube_ps1)]\$ '

適用

$ source ~/.bash_profile

contextが長いのでリネームする

GKEデフォルトのcontext名はプロジェクト名・クラスタ名・リージョン名の3つで構成されるため、やたら長いので短くする。

現在のcontext名を確認。NAMEカラムがcontext名にあたる

$ kubectl config get-contexts

リネーム

$ kubectl config rename-context <YOUR CURRENT CONTEXT NAME> <NEW CONTEXT NAME>

kubectl呼び出し時にkube-ps1を呼び出す

何時もkubernetsを使うわけではないので、kubernetesを使う時にkube-ps1を呼び出したい。
「kubernetesを使うときはkubectlを呼び出す」はずなので、kubectl初回呼び出し時にkube-ps1も同時に呼び出す(ついでに kubectl だと長いし、 kubectx と被り補完がめんどうなので、 k をaliasにする)

export IS_KUBE_PS1_ENABLED=false

kps1() {
    source "/usr/local/opt/kube-ps1/share/kube-ps1.sh"
    PS1='[\W $(kube_ps1)]\$ '
}

k() {
    [[ "${IS_KUBE_PS1_ENABLED}" == false ]] && IS_KUBE_PS1_ENABLED=true && kps1

    kubectl $@
}

GitHub

github.com

雑記

Kubernetesだけいじりたいけど現実は非なり...