はじめに
※あくまで小ネタの話なので実運用で利用するのはおすすめしません。
YAML は JSON のほぼスーパーセットなのであれば、JSON で Playbook を書けるのでは?と思ったことがあったので試してみました。
Playbook
$ cat test.yml [ { "gather_facts": false, "connection": "local", "tasks": [ { "debug": { "msg": "hello!" } } ], "hosts": "localhost" } ]
- (参考) 上記 Playbook を通常通り YAML で書いた場合
- hosts: localhost gather_facts: false connection: local tasks: - debug: msg: "hello!"
YAML から JSON への変換を試すには、このようなサービスを利用するとお手軽です。
実行
$ ansible-playbook -i localhost, test.yml PLAY [localhost] ****************************************************************************** TASK [debug] ********************************************************************************** ok: [localhost] => { "msg": "hello!" } PLAY RECAP ************************************************************************************ localhost : ok=1 changed=0 unreachable=0 failed=0
できました。(Ansible 2.7)
Playbook のリストやディクショナリの関係がよく分からなくなったりした場合、JSONで書いたり眺めたりすると良い練習になるかも知れません。
補足
Ansible では YAML 1.1 を扱いますが、YAML 1.2 の仕様には
The primary objective of this revision is to bring YAML into compliance with JSON as an official subset.
という記載があります。