てくなべ (tekunabe)

ansible / network / automation / StackStorm

[Ansible] 小ネタ: Playbook は JSON で書ける

はじめに

※あくまで小ネタの話なので実運用で利用するのはおすすめしません。

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.

という記載があります。