[chef]jsonlintコマンドを使ってrolesとnodesのjsonをチェックするスクリプトを書いた


[まとめ] 現在開催中のKindleセール情報はこちら

chefでcookした後に、rolesやnodesのjsonのカンマが抜けていてエラーになってしまうのが悲しいので、事前にチェックしたいと思いました。

探せば便利なコマンドがありそうな気がするのですが、うまく見つけられなかったのでシェルスクリプトで書いてみました。

事前に

npm install jsonlint -g

で jsonlint コマンドをインストールしておく必要があります

  • 以下を「jsonlint_chef」としてchefディレクトリに追加

  • 実行権限付与
chmod 755 jsonlint_chef
  • 試してみる
./jsonlint_chef

# 各ファイルのチェックが走る
/Users/chef/roles/base.json
/Users/chef/nodes/sample_stg.json
[Error: Parse error on line 69:
...stg"]    }  }  "run_list": [    "r
--------------------^
Expecting 'EOF', '}', ',', ']', got 'STRING']

nodes/sample_stg.jsonで「,」が抜けているというのが表示されています。

何行目でエラーなのかが表示されるので該当ファイルを開いて修正。

これでcookの前に事前チェックしておけばいきなりjsonエラーでこける問題を回避できます。

もっといい方法ありそうですが、とりあえずはこんな感じです。

参考

[まとめ] 現在開催中のKindleセール情報はこちら