【Ansible×NW自動化】blockinfileモジュールで「ANSIBLE MANAGED BLOCK」を表示させない方法

# はじめに
<バージョン>
ansible 2.9.1

以下のようなplaybookでvMXからshowコマンドの結果を取得し、
blockinfileモジュールで結果をテキストに出力しようと思ったのですが、
出力結果に「ANSIBLE MANAGED BLOCK」という文字列が出てきてしまい、
個人的に納得いかない出力結果となりました。

```yaml:blockinfile_test1.yml
---
- name: blockinfile TEST
  hosts: junos
  gather_facts: no
  vars:
    ansible_python_interpreter: /usr/bin/python3
    show_commands:
      - show version
      - show interfaces terse
  tasks:
    - name: junos show command
      junos_command:
        commands: "{{ item }}"
      register: junos_results
      with_items: "{{ show_commands }}"

    - name: save command
      blockinfile:
        block: "{{ item.stdout[0] }}"
        path: "result/{{ inventory_hostname }}.log"
        marker_begin: "=================={{ item.item }}=================="
        marker_end: ""
        create: yes
      with_items: "{{ junos_results.results }}"
      loop_control:
        label: "{{ item.item }}"
```

# 出力結果1
各ループの始まりと終わりに「ANSIBLE MANAGED BLOCK」という文字列が出てきてしまいます。

```text:出力1
# ==================show version================== ANSIBLE MANAGED BLOCK
Hostname: ip-<addr>
Model: vmx
Junos: 18.4R1.8
～以下、略～
#  ANSIBLE MANAGED BLOCK
# ==================show interfaces terse================== ANSIBLE MANAGED BLOCK
Interface               Admin Link Proto    Local                 Remote
cbp0                    up    up
demux0                  up    up
～以下、略～
#  ANSIBLE MANAGED BLOCK
```





# 解決策
markerを空にして、blockの書き方を工夫します。

__ポイント__
(1)「marker: ""」 と書いて、「ANSIBLE MANAGED BLOCK」が出ないようにする
(2)block内で |(パイプ)を使うと、内容を複数行に渡って書くことが出来る

```yaml:blockinfile_test2yml
---
- name: blockinfile TEST
  hosts: junos
  gather_facts: no
  vars:
    ansible_python_interpreter: /usr/bin/python3
    show_commands:
      - show version
      - show interfaces terse
  tasks:
    - name: junos show command
      junos_command:
        commands: "{{ item }}"
      register: junos_results
      with_items: "{{ show_commands }}"

    - name: save command
      blockinfile:
        block: |
               =================={{ item.item }}==================
               {{ item.stdout[0] }}
        path: "result/{{ inventory_hostname }}.log"
        marker: ""
        create: yes
      with_items: "{{ junos_results.results }}"
      loop_control:
        label: "{{ item.item }}"
```

# 出力結果2
余計なマーカーが入らず、スマートな出力になりました。

```text:出力2
==================show version==================
Hostname: ip-<addr>
Model: vmx
Junos: 18.4R1.8
～以下、略～

==================show interfaces terse==================
Interface               Admin Link Proto    Local                 Remote
cbp0                    up    up
demux0                  up    up
～以下、略～
```

# ちなみに
以下のようにmarkerを使うと、「ANSIBLE MANAGED BLOCK」は出てこないのですが、
各ループの前後にマーカーが記載されます。
自分としては、ループの始めだけにマーカーを出したかったです。

```yaml:blockinfile_test3.yml
---
- name: blockinfile TEST
  hosts: junos
  gather_facts: no
  vars:
    ansible_python_interpreter: /usr/bin/python3
    show_commands:
      - show version
      - show interfaces terse
  tasks:
    - name: junos show command
      junos_command:
        commands: "{{ item }}"
      register: junos_results
      with_items: "{{ show_commands }}"

    - name: save command
      blockinfile:
        block: "{{ item.stdout[0] }}"
        path: "result/{{ inventory_hostname }}.log"
        marker: "=================={{ item.item }}=================="
        create: yes
      with_items: "{{ junos_results.results }}"
      loop_control:
        label: "{{ item.item }}"
```

# 出力結果3
各ループの前後にマーカーが記載されます。この出力方法が好みの方もいらっしゃると思います。

```text:出力3
==================show version==================
Hostname: ip-<addr>
Model: vmx
Junos: 18.4R1.8
～以下、略～
==================show version==================
==================show interfaces terse==================
Interface               Admin Link Proto    Local                 Remote
cbp0                    up    up
demux0                  up    up
～以下、略～
==================show interfaces terse==================
```