ansibleのlineinfile での落とし穴
bindの社内DNSのゾーン設定をansibleで自動化しようとしていたところ、
下記の記述だと、resolver 1のタスク しかincludeステートメントが追加されていなかった。
- name: resolver 1 lineinfile: dest={{namedconf}} insertafter="^###localhost_resolver" line='include "/etc/named.{{domain}}.zone";' state=present - name: resolver 2 lineinfile: dest={{namedconf}} insertafter="^###internal_resolver" line='include "/etc/named.{{domain}}.zone";' state=present
どうも、lineinfileだと、lineの中身が同一だと、insertafterのマッチ文字列が異なっていても、そこにすでに、行がpresentなものとされ
二つ目は追加されないようです。
2つ目のline=includeの後ろにもう一個半角スペースを入れることで、二つとも追記できるようになりました。
line='include "/etc/named.{{domain}}.zone";' ↓ line='include "/etc/named.{{domain}}.zone"; ' ← これで1回目の文字列と異なるものとしてansibleに認識される