オムレツ食べ放題

CI/CDとかコンテナとかGCPとかしたりする遊戯王OCGデュエリストの日記

拙作4ツールの使い方の説明(gcctx/adcmod/tfsetws/tfgetws/tfreuse)

なんですかこれは?

わざわざ英文でREADME書いたけど、どうも誰も使ってくれそうにないので日本語のreadmeを書くことにした。

github.com

で、何なの?

これらを使うと、どう嬉しいのか。

つまり、某社のような

  • 複数のGoogleアカウント、GCP Project ServiceAccount(GSA)なりを切り替えて使う必要があり
  • terraformの参照するapplication-default-credentialを切り替えて使う必要があり
  • たとえば自社と客先の複数の環境を行き来する必要があって、いかにも事故りそうで
  • かつ、terraform moduleを多用していていちいち terraform init し直すのに rm -rf ./.terraform なんてしとれるかいボケ!

ってシチュの人が嬉しいツールなのです。

1. gcctx

gcloud config configurations select ってやつがあります。長いですね。アホかと。

これを複数登録して簡単に切り替えたりできるようにするやつです。

詳しくはreadmeを読んでください。

2. adcmod

terraformは Application Default Credential(ADC) とゆーのを読んでくれます。これを活用すれば、 危険な認証jsonファイルをリポジトリに入れたり とかいうアホなことをしなくて済みます。

しかし、Google Cloud SDK(gcloud)のこれの情報は1アカウントしか覚えてくれません。

じゃあ、どうするか。

そもそも、それって環境変数で指定できるんですよね。じゃあ、そうしましょう。

ということで、あらかじめ準備した複数のADCに名前を付けて、それを環境変数に指定したbashをexecするwrapperです。

3. tfgetws / tfsetws

terraform workspace list / new みたいなコマンドがあるんですよ。なげえ。うぜえ。もうやだ。

だから作りました。

結局 ROOTDIR/.terraform/env 配下いじっとるだけやんけ。なので、そこを読み出すだけです。書くほうはGoのコード追うのたりいのでただのwrapperにしました。時間の節約。

4. tfreuse

module使ってterraform書いてると、新しくmodule使ったエントリー追加するたびにinitが発生しますよと。そして、だいたいトラブりますよと。remote stateの場合。

めんどくせーんだよ!!!!!!!

いちいちダウンロードすんな!!!!!!

だから作りました。

$(CWD)/.terraform を rm -rf して、 mkdir .terraform し、 あらかじめ指定しといた .terraform/plugins/* をレストアします。そんだけです。

いかがでしたか?

冗長なコマンドラインはいかがなものかと。

で、実例は?

強欲な読者だなあ…。

  • tfgetws で 現在のworkspaceを読み出す。default だと何も出ない。(shellのpromptに出す用なので)
  • adcmod s PROFILE_NAME でADCつきbashを実行(ここでterraform関連のアカウントが切り替わる)
  • tfgetws a で設定可能な全workspace(ws)を取得する
  • for E in dev stg prd ; do tfsetws $E ; terraform plan ; sleep 4 ; done とかする。
  • リソース作ったら exitbashを抜けると認証情報を捨てることができて安全〜。
  • gcctxでGoogleアカウントとプロジェクトの組を選択 (※実はこの設定はterraformに無関係、gcloudは関係あり)
  • gcctxで指定したGアカでkubectlなりgcloud containerなりをする。

みたいな感じです。