yaeでエイリアスを多用したYAMLファイルの出力確認をしてみる
YAMLでエイリアスが意図した構成になっているかどうか、軽く確認したい場合に有用なツール yae を取りあげてみました。
はじめに
YAMLに項目を追加する際、重複した構成ならエイリアスの利用が好ましいと思いますが、エイリアスが意図した構成になっているかどうかが問題となります。
CircleCIのconfig.yamlに設定したWorkflowから重複を省くため、エイリアス展開を目視しながらの編集を実現するものを探していましたが特に見つからず、代わりにエイリアスを展開出力するツールにて確認を行ってみました。
yaeについて
Goで作成された、YAML の alias を anchor の内容に展開した YAML を出力するコマンドです。要はYAML展開専用のツールです。
shin1x1/yae: YAML aliases expander
go get -u github.com/shin1x1/yae yae .circleci/config.yaml | less
PythonにおけるOrderedDictのような挙動ではないため若干項目に上下があり、インデント等にも整形が入ります。そのため厳密な差分確認には向かないと思われます。
以下、実際にエイリアスを使ったファイルをyaeに展開した例です。
.circleci/config.yaml
version: 2.1 orbs: aws-cli: circleci/aws-cli@0.1.16 slack: circleci/slack@3.4.0 aws-ecr: circleci/aws-ecr@6.5.0 references: save_cach_ref: &save_cach_ref key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }} paths: - ".venv" docker_image: &docker_image docker: - image: circleci/python:3.7.3 environment: PIPENV_VENV_IN_PROJECT: true resource_class: small parameters: python-version: type: string default: "3.7" . . jobs: test: <<: *docker_image executor: aws-cli/default steps: - checkout - setup_remote_docker - restore_cache: key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }} - run: echo "export latest_commit_log=$(git log --oneline -1)" >> $BASH_ENV - run: command: | pipenv sync --dev - save_cache: <<: *save_cach_ref
% yae .circleci/config.yaml . . job: test: docker: - environment: PIPENV_VENV_IN_PROJECT: true image: circleci/python:3.7.3 executor: aws-cli/default parameters: python-version: default: "3.7" type: string resource_class: small steps: - checkout - setup_remote_docker - restore_cache: key: pipenv-{{ .Branch }}-{{ checksum "Pipfile.lock" }}
あとがき
yq
でのキー構成確認という手もありますが、複数の構成が正常に展開されたかどうか俯瞰確認するのには辛いなと思い、今回のエントリとなりました。
circleci cliでのvalidateにて、キー構成のミスが分かり、かつエイリアス設定のため非常に確認が面倒なケースには重宝すると思われます。