遭遇したエラー
先日、ansible-playbook
コマンド実行時に、以下のエラーに遭遇しました。
$ ansible-playbook -i inventory.ini test.yml PLAY [sv] ******************************************************************************************************************************************************************************** ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleUnicode': {} "\u3042"
なにやら、期待される種類の文字以外ものが入ってる系のエラーのようです。しかし、Playbook やインベントリファイルを確認、切り分けしてもとくにおかしいところはありませんでした。
原因
かなり苦戦してしまったのですが、原因は group_vars
配下の変数定義ファイルでした。
以下のようにマルチバイト文字が、キーバリュー形式ではないかたちで入ってました。
(あくまで再現可能な範囲のサンプルです)
---
あ
おそらく host_vars
でも同様だと思います。
気になったので、もう少し他のパターンも試しました。:
のあとにスペースがない場合です。
---
key1:val1
の場合は、以下のエラーでした。
ERROR! failed to combine variables, expected dicts but got a 'dict' and a 'AnsibleUnicode': {} "key1:val1"
もっと YAML 的にエラーになるようにすると ERROR! Syntax Error while loading YAML.
になりますが、微妙なラインだとちゃんと読み込もうとしてエラーになるようです。マルチバイトかどうかは関係ないってことですね。
この手のエラーが発生したら、変数定義ファイルを確認するよ良さそうです。ついつい Playbook の方ばかり見てしまいますが。