LoginSignup
2
3

More than 5 years have passed since last update.

Azure CLI で自動的にk8sのクレデンシャルを取得する

Posted at

最近 WSL をバージョンアップしたときに、前の設定が消えてしまった。よくよく考えると当たり前なので、次回アップデートしたときに、環境をセットアップできるようにしておこうと思った。

Azure CLI のインストールスクリプトは作ったので、後は、kubectl と kubeconfig の取得を自動化したい。Azure CLI で簡単にできたので、忘れないようにメモしておく

前提

下記のコマンドを実施ずみであること。これを前提にすると、Azure CLI でいろいろ自動化しやすい。

az login

スクリプト

#!/bin/bash

# Install kubectl
# This requires your password.
sudo az aks install-cli

# install jq
sudo apt install jq -y

# fetch all credentials of your k8s clusters
aks_list=$(az aks list)

# create a small list which gets name and resoruceGroup
sample=$(echo ${aks_list} | jq -c '[.[]| {name: .name, resourceGroup: .resourceGroup}]')

for row in $(echo "${aks_list}" | jq -r '.[] | @base64'); do
 _jq() {
    echo ${row} | base64 --decode | jq -r ${1}
 }
 az aks get-credentials -n $(_jq '.name') -g $(_jq '.resourceGroup')
done

az aks list は、aks のリストを取得するコマンド。次のこの行はおまけ。本来必要ない。

sample=$(echo ${aks_list} | jq -c '[.[]| {name: .name, resourceGroup: .resourceGroup}]')

結果はこうなる

[{"name":"sadevopsoh","resourceGroup":"RemoveDevOpsOH"}]

jq を使うと簡単にクエリできる。実は同じようなことが、--query パラメータでもできる。

$ az aks list --query "[].{name: name, resourceGroup: resourceGroup}"

結果

[
  {
    "name": "sadevopsoh",
    "resourceGroup": "RemoveDevOpsOH"
  }
]

--query パラメータの文法は、jq に似た構文の JMEPATHというやつ。この--query は自動化したいとき例えば、シークレットを取得して、ほかのコマンドに渡したいときとか頻繁に使われる。

ループして特定のコマンドを実行する

さて、bash で JSON をループさせて、何かのコマンドを実行したいときはどうしたらいいだろう。


for row in $(echo "${aks_list}" | jq -r '.[] | @base64'); do
 _jq() {
    echo ${row} | base64 --decode | jq -r ${1}
 }
 az aks get-credentials -n $(_jq '.name') -g $(_jq '.resourceGroup')
done

この部分。解説すると、bash で for 文はワードごとに繰り返しを行う。

aaa="a b c d e"
$ for i in ${aaa}; do
> echo item: $i
> done
item: a
item: b
item: c
item: d
item: e

もちろん、JSONだとそんなうまくかない。だからどうするか?というと、jq を使って配列の要素ごとに繰り返しをする。

$ echo ${sample}
[{"name":"ushio"}, {"name":"yamada"}]
${sample} | jq -r '.[]'
{
  "name": "ushio"
}
{
  "name": "yamada"
}

で、尚且つ各エレメントをbase64 にしてしまえばそれぞれが1ワードになるわけ。

$ echo ${sample} | jq -r '.[] | @base64'
eyJuYW1lIjoidXNoaW8ifQ==
eyJuYW1lIjoieWFtYWRhIn0=

考えた人賢すぎる。これをイレートさせて、使うときはデコードして、_jq メソッドの第一パラメータで
検索しているというロジック。素晴らしい。

Resource

2
3
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
2
3