CoreOSのcloud-config.ymlのsyntax check方法
つい先日、CoreOSの cloud-config.yml をスマートにsyntax checkしたくて一日考え込むハメになったので覚え書き程度のネタです。
1. coreos-cloudinit -validate
CoreOS上でcoreos-cloudinit -validateコマンドを叩くことで手軽にsyntax checkできる。例えば、CoreOS上で /foo/bar/ディレクトリ配下にcloud-config.yml があるなら、下記のようにコマンドを実行するとエラーを検知したときには該当エラーを表示してくれます。
coreos-cloudinit -validate="true" -from-file="/foo/bar/cloud-config.yml"
(うっかり、-validate="true" が抜けちゃうと、-from-file=""に指定したcloud-config.ymlが即適用されちゃうのでコピペミスとかにはご注意ください・・・。)
2. Cloud-Config Validator
https://coreos.com/validate のページにあるCloud-Config Validatorでもsyntax checkできます。
3. https://validate.core-os.net/validate
どうもそれらしきTipsが書かれているドキュメントは見つからなかったのですが、https://coreos.com/validate/ のページにあるフォームの裏では、https://validate.core-os.net/validate というURLでRESTなHTTP APIがあって、これにcloud-config.ymlを渡すとvalidate処理の結果を返してくれるという仕組みで動いてました。(このAPIのソースコードは coreos/coreos-cloudinit-validator · GitHub にあります。)
なので、/foo/bar/ディレクトリ配下に cloud-config.yml を用意しているときは、下記のようなcurlコマンドを実行するとsyntax checkの結果を受け取れます。
curl -sk -X PUT https://validate.core-os.net/validate --data-binary @/foo/bar/cloud-config.yml
結果はJSONフォーマットで返してくれます。何も問題がなければ {"result":null} という結果を返します。
GitHubなどにpushしたcloud-config.ymlをCIサービスなどのテストでsyntax checkしたいときには、このようにcurlコマンドで https://validate.core-os.net/validate のHTTP APIを叩く方法が一番便利だと思います。
パブリックなAPIの形で公開してくれていたCoreOSに感謝。