Featured image of post yq(v3)でKubernetesのYAMLをいじる

yq(v3)でKubernetesのYAMLをいじる

[注意]この記事の執筆時点では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)のtaglatest だったのを 1.19.0 みたいなimagedigestが一意に定まるようなバージョンごとの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の値を書き換えることができた.

おわり

yqjqみたいな感じでYAMLを扱えるのでかなり便利.
うまく使いこなせるようになりたい.

おまけ

ほっぺがかわいいねこ

参考