blockinfile を使う場面で
「blockinfile って便利なんだけどファイルの後ろへ順次追加していきたいだけ」って事ありますよね。
- 単一行だけどどんどん追加していきたい(/etc/hostsなど
- 出来れば登録した人とかわかると嬉しい
- 時と場合によっては複数行を扱いたい
って場面があるかと思います。
Blockinfile の動きとしては
「定義されているBEGIN〜ENDまでをチェックして無ければ追加、存在すれば書き換え」となります。
という事は、こんな風に記述すると
blockinfile
task:
- blockinfile:
path: /etc/hosts
backup: yes
insertbefore: EOF
marker_begin: "BEGIN {{ HOST_NAME }}"
marker_end: "END {{ HOST_NAME }}"
marker: "# {mark} ANSIBLE basic setup."
block: |
{{ HOST_IP }} {{ HOST_NAME }}
/etc/hosts
# BEGIN hogehoge ANSIBLE basic setup.
192.168.0.1 hogehoge
# END hogehoge ANSIBLE basic setup.
と出てくれるので
- 同じホスト名なら更新
- 違うホスト名なら自動で追加
と言う動きをしてくれます
Ansible AWX を使った場合
以下のような書き方をすると実行した人と日時が記録されます。
blockinfile
gather_facts: yes
task:
- blockinfile:
path: /etc/hosts
backup: yes
insertbefore: EOF
marker_begin: "BEGIN {{ HOST_NAME }}"
marker_end: "END {{ HOST_NAME }}"
marker: "# {mark} ANSIBLE basic setup."
block: |
# {{ tower_user_name }} {{ ansible_date_time.iso8601 }}
{{ HOST_IP }} {{ HOST_NAME }}
【結果】
/etc/hosts
# BEGIN hogehoge ANSIBLE basic setup.
# nakacya 2019-08-20T01:56:37Z
192.168.0.1 hogehoge
# END hogehoge ANSIBLE basic setup.
blockinfile の扱いで2時間ほど悩んだので Tips として残しておきます。
案外書かれてない事項なので