前提・実現したいこと
ansible の yaml で辞書の要素を読み込んだ順序で出力したい。
Order my dicts のプルリクエストをみると、ansible ではデフォルトで要素の順序を保存するように修正されているように見えるのですが、まだリリースされていないのでしょうか?
発生している問題
辞書オブジェクトの要素の順序が読み込んだ順ではなく abc 順で出力されてしまいます。
たとえば、以下の playbook では、辞書オブジェクトの要素を d, bの順序で定義しているのに b,d の順になってしまいます。 python の OrderedDict のように要素の順序を保存してほしいです。
$ ansible-playbook book.yml [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' PLAY [localhost] ***************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [localhost] TASK [debug] ********************************************************************************************************************************* ok: [localhost] => { "test": { "b": 3, "d": 1 } } PLAY RECAP *********************************************************************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
該当のソースコード
ansible
1- hosts: localhost 2 vars: 3 test: 4 d: 1 5 b: 3 6 tasks: 7 - debug: var=test
試したこと
パース側
ファイルから読み込んで from_json などでパースしても同じでした。
lookup('file', 'test.json') | from_json
lookup('file', 'test.yml') | from_yaml
出力側
ansible.cfg に以下を追加して yaml で出力しても要素の順序は同じでした。
[defaults] stdout_callback=yaml
補足情報(FW/ツールのバージョンなど)
OS: MacOS Big Sur 11.2.1
$ ansible --version ansible 2.10.5 config file = None configured module search path = ['/Users/mitsuru/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /Users/mitsuru/.pyenv/versions/3.7.3/envs/ansible/lib/python3.7/site-packages/ansible executable location = /Users/mitsuru/.pyenv/versions/ansible/bin/ansible python version = 3.7.3 (default, Jun 7 2019, 11:23:14) [Clang 10.0.1 (clang-1001.0.46.4)]
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。