[注意]この記事の執筆時点ではyq version3系を使用していたため、コマンド例にversion4系で使用できないオプションが含まれています。
→yq(v4)でKubernetesのYAMLをいじる
yqすごい
yqでKubernetesのYAMLから値を抽出したり値を書き換えたりした.
まとめ
yq
はべんり.
# YAMLの値(key=spec.containers[0].image)を抽出
$ yq read 'pod.yaml' 'spec.containers[0].image'
# 正規表現でimageとtagを抜き出す
$ yq read 'pod.yaml' 'spec.containers[0].image' | grep -o '^[^:]\+'
$ yq read 'pod.yaml' 'spec.containers[0].image' | grep -o '[^:]\+$'
# YAMLの値(key=spec.containers[0].image)を上書き
$ yq write -i 'pod.yaml' 'spec.containers[0].image' 'nginx:1.19.0'
環境
- macOS Mojave 10.14
- yq version 3.3.2
やりかた
こんな感じのKubernetes
のマニフェストファイル(YAML
)を扱っていたときに,
使用しているimage
(nginx)のtag
が latest だったのを 1.19.0 みたいなimage
のdigest
が一意に定まるようなバージョンごとのtag
に変更したくなった.
pod.yaml
手で直接編集するのもいいんだけど,
ゆくゆくは自動化したりしたいのでyq
を使ってスクリプトを書いてみる.
image-tag-fix.sh
作成したスクリプトを実行する.
$ ls
image-tag-fix.sh pod.yaml
# タグ置換スクリプト実行
$ chmod +x ./image-tag-fix.sh
$ ./image-tag-fix.sh
image : nginx
tag : latest
replaced: nginx:latest => nginx:1.19.0
# 内容確認
$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.19.0
いい感じ.yq
を使ってYAML
の値を書き換えることができた.
おわり
yq
はjqみたいな感じでYAML
を扱えるのでかなり便利.
うまく使いこなせるようになりたい.