blockinfile モジュール

2019/05/03

Ansible

 Ansible Documentation

blockinfile – Insert/update/remove a text block surrounded by marker lines

 機能

  • 複数行のテキストブロックを挿入、更新、削除します
  • テキストブロックはカスタマイズ可能なマーカーラインで囲まれます

 パラメータ

パラメータ選択肢/
Default
説明
backupno
・yes
元ファイルのバックアップファイルを作成する。ファイル名にタイムスタンプ情報を含む
block-マーカー行の内側に挿入するテキストを指定する
createno
・yes
yes を指定すると path: に指定したファイルが存在しない場合に新規作成する
insertafterEOF
・*regex*
指定した文字列を含む行のうち最後の行の後に block: で指定したテキストを挿入する。指定した文字列を含む行が存在しないとき、block: で指定したテキストは末尾に追加される。文字列の指定に正規表現を使用できる
insertbefore・BOF
・*regex*
指定した文字列を含む行のうち最後の行の前に block: で指定したテキストを挿入する。指定した文字列を含む行が存在しないとき、block: で指定したテキストは末尾に追加される。文字列の指定に正規表現を使用できる
marker# {mark} ANSIBLE MANAGED BLOCKblock: で指定したテキストを挿入するときのマーカーのテンプレート。 {mark} 部分は marker_begin および marker_end で指定した文字列に置き換えられる
marker_beginBEGINblock: で指定されたテキストの前に挿入されるマーカーの {marke} 部分の文字列
marker_endENDblock: で指定されたテキストの後に挿入されるマーカーの {marke} 部分の文字列
path
※必須※
-対象のファイル
state・absent
present
・absent
ブロックを削除する
・present
ブロックを挿入する
validate-変更内容をファイルに保存する前に内容を検証するコマンド。ファイル名は引数 %s に設定されてコマンドに渡される

 注意

  • loop: を使用して複数のテキストブロックを追加する場合、マーカーラインをユニークにしないとテキストブロックが上書きされる

 例

元データ
[workman@node-c0706 ~]$ cat testfile 
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
[workman@node-c0706 ~]$ 

    - name: テキストブロックを追加する
      blockinfile:
        path: ~/testfile
        block: |
          cccccc
          dddddd
実行後
block: で指定したテキストブロックがマーカーラインに囲まれて末尾に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK

    - name: テキストブロックを追加する
      blockinfile:
        path: ~/testfile
        block: |
          {{ item.capital }} {{ item.country}}
      loop:
        - { capital: Tokyo, country: Japan }
        - { capital: Ottawa, country: Canada }
        - { capital: Bern, country: Switzerland  }
実行後
loops: で 3 回繰り返してテキストブロックを挿入したがマーカーラインが同じであるため、最後に追加した内容だけが残った
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK
Bern Switzerland
# END ANSIBLE MANAGED BLOCK

    - name: テキストブロックを追加する
      blockinfile:
        path: ~/testfile
        block: |
          {{ item.capital }} {{ item.country}}
        marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.country }}"
      loop:
        - { capital: Tokyo, country: Japan }
        - { capital: Ottawa, country: Canada }
        - { capital: Bern, country: Switzerland  }
実行後
marker: でループごとにマーカーラインを変更したので、繰り返した分だけの内容が末尾に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK Japan
Tokyo Japan
# END ANSIBLE MANAGED BLOCK Japan
# BEGIN ANSIBLE MANAGED BLOCK Canada
Ottawa Canada
# END ANSIBLE MANAGED BLOCK Canada
# BEGIN ANSIBLE MANAGED BLOCK Switzerland
Bern Switzerland
# END ANSIBLE MANAGED BLOCK Switzerland

    - name: aaaaa で始まる行の後にテキストブロックを追加する
      blockinfile:
        path: ~/testfile
        insertafter: '^aaaaa'
        block: |
          cccccc
          dddddd
実行後
lineafter: で指定した文字列に該当する行は 3 行あるが、その中で最後の行の後に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK
bbbbbbbbbbbb

    - name: kkkkk で始まる行の後にテキストブロックを追加する
      blockinfile:
        path: ~/testfile
        insertafter: '^kkkkk'
        block: |
          cccccc
          dddddd
実行後
insertafter: で指定した文字列を含む行が存在しないため末尾に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK

    - name: aaaaa で始まる行の前にテキストブロックを追加する
      blockinfile:
        path: ~/testfile
        insertbefore: '^aaaaa'
        block: |
          cccccc
          dddddd
実行後
linebefore: で指定した文字列に該当する行は 3 行あるが、その中で最後の行の後に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK
aaaaaaaaaaaa
bbbbbbbbbbbb

    - name: kkkkk で始まる行の前にテキストブロックを追加する
      blockinfile:
        path: ~/testfile
        insertbefore: '^kkkkk'
        block: |
          cccccc
          dddddd
実行後
insertbefore: で指定した文字列を含む行が存在しないため末尾に追加された
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK

    - name: Canada のテキストブロックを削除する
      blockinfile:
        path: ~/testfile
        marker: "# {mark} ANSIBLE MANAGED BLOCK Canada"
        state: absent
実行前
[workman@node-c0706 ~]$ cat testfile
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK Japan
Tokyo Japan
# END ANSIBLE MANAGED BLOCK Japan
# BEGIN ANSIBLE MANAGED BLOCK Canada
Ottawa Canada
# END ANSIBLE MANAGED BLOCK Canada
# BEGIN ANSIBLE MANAGED BLOCK Switzerland
Bern Switzerland
# END ANSIBLE MANAGED BLOCK Switzerland
[workman@node-c0706 ~]$ 
実行後
marker: で指定したテキストブロックがマーカーラインとともに削除された
workman@node-c0706 ~]$ cat testfile
aaa
bbb
aaaaaa
bbbbbb
aaaaaaaaa
bbbbbbbbb
aaaaaaaaaaaa
bbbbbbbbbbbb
# BEGIN ANSIBLE MANAGED BLOCK Japan
Tokyo Japan
# END ANSIBLE MANAGED BLOCK Japan
# BEGIN ANSIBLE MANAGED BLOCK Switzerland
Bern Switzerland
# END ANSIBLE MANAGED BLOCK Switzerland
[workman@node-c0706 ~]$ 

    - name: バックアップを取ってからテキストブロックを追加する
      blockinfile:
        path: ~/testfile
        backup: yes
        block: |
          cccccc
          dddddd
実行前
[workman@node-c0706 ~]$ ls -l
total 4
-rw-r--r--. 1 workman staff 68 May  3 18:59 testfile
[workman@node-c0706 ~]$ 
実行後
ファイル名にタイムスタンプ情報を含む元ファイルのバックアップファイルが作成された
[workman@node-c0706 ~]$ ls -l
total 8
-rw-r--r--. 1 workman staff 140 May  3 19:00 testfile
-rw-r--r--. 1 workman staff  68 May  3 18:59 testfile.7424.2019-05-03@19:00:16~
[workman@node-c0706 ~]$ 

    - name: ファイルがなければ作成し、テキストブロックを追加する
      blockinfile:
        path: ~/testfile
        create: yes
        block: |
          cccccc
          dddddd
実行前
[workman@node-c0706 ~]$ ls -l
total 0
[workman@node-c0706 ~]$ 
実行後
ファイルが作成され、テキストブロックが追加された
[workman@node-c0706 ~]$ ls -l
total 4
-rw-r--r--. 1 workman staff 72 May  3 19:02 testfile
[workman@node-c0706 ~]$ 
[workman@node-c0706 ~]$ cat testfile 
# BEGIN ANSIBLE MANAGED BLOCK
cccccc
dddddd
# END ANSIBLE MANAGED BLOCK
[workman@node-c0706 ~]$ 

カテゴリー

目次

QooQ