yamlファイルの差分をエビデンスとして残したいような機会があったので、やり方を残しておきます。
メモ
diffだとダメなの…?→ 差分のある行しか表示されず、「これって何だっけ?」となるのでダメ
実行環境
Mac
準備
事前にyqを入れておきます
$ brew install yq
注意
pip installで入れたyqと使い方が異なります。手順
例として、「sample1.yaml
」「sample2.yaml
」の2ファイルを比較するものとしてコマンドを記載します
path1:
path2:
key1: value1
key2: value2
path1:
path2:
key1: value1
key3: value3
yamlファイルを変換
以下のコマンドでproperties形式に変換します。
$ yq eval '.. | select((tag == "!!map" or tag == "!!seq") | not) | (path | join(".")) + "=" + .' sample1.yaml | sort > sample1.properties
$ yq eval '.. | select((tag == "!!map" or tag == "!!seq") | not) | (path | join(".")) + "=" + .' sample2.yaml | sort > sample2.properties
これで
path1:
path2:
key1: value1
key2: value2
このyamlが
path1.path2.key1=value1
path1.path2.key2=value2
こうなります。
diffで比較
1で出力したファイルをdiffで比較します
$ diff sample1.properties sample2.properties
2c2
< path1.path2.key2=value2
---
> path1.path2.key3=value3
わかりやすい✨
余談
ちなみに元のファイルで比較すると
$ diff sample1.yaml sample2.yaml
4c4
< key2: value2
---
> key3: value3
なんのkeyだ。。。