[注意]この記事の執筆時点では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を扱えるのでかなり便利.
うまく使いこなせるようになりたい.
おまけ

