PyYAML では
a: k='xxx: yyy'
といった入力は xxx: のコロンのところでエラーyaml.scanner.ScannerError: mapping values are not allowed here が起きる。
a: "k='xxx: yyy'"
と書くか、折りたたみ形式で
と書くか、折りたたみ形式で
a: >
k='xxx: yyy'
これがPythonでコードを書いている時はよいのだが、Ansibleで
- name: test
lineinfile: dest=/path/to/file state=present regexp='^# setting:' line='# setting: 192.168.1.1'
のような書き方をすると line='# setting: 192.168.1.1'
の :
で ERROR: Syntax Error while loading YAML scriptといったわかりにくいエラーが起こる。yaml.scanner.ScannerError: mapping values are not allowed here
が出ているはず。これを 折りたたみスタイルにすればエラーが出ない。
- name: test
lineinfile: >
dest=/path/to/file state=present regexp='^# setting:' line='# setting: 192.168.1.1'
読みやすさを考慮して適度に折り返すと、このように - name: test
lineinfile: >
dest=/path/to/file state=present
regexp='^# setting:'
line='# setting: 192.168.1.1'
と書くが、じつはこれは無意識にエラーを回避していることになっている。
コロンのところでエラーになるのは、YAMLの文法上、ダブルクオートで括って書かなくても、自動的に文字列として扱ってくれるが、括られていないと、最初にトークン分割したとき
「a」 「: 」 「k='xxx」「: 」 「yyy'」
という形になってしまうため、このようなエラーになるのだろう。
という形になってしまうため、このようなエラーになるのだろう。
Nice .Thanks for explaining .Keep sharing Devops Online Course
返信削除