Ansible Documentation
blockinfile – Insert/update/remove a text block surrounded by marker lines機能
- 複数行のテキストブロックを挿入、更新、削除します
- テキストブロックはカスタマイズ可能なマーカーラインで囲まれます
パラメータ
パラメータ | 選択肢/ Default | 説明 |
---|---|---|
backup | ・no ・yes | 元ファイルのバックアップファイルを作成する。ファイル名にタイムスタンプ情報を含む |
block | - | マーカー行の内側に挿入するテキストを指定する |
create | ・no ・yes | yes を指定すると path: に指定したファイルが存在しない場合に新規作成する |
insertafter | ・EOF ・*regex* | 指定した文字列を含む行のうち最後の行の後に block: で指定したテキストを挿入する。指定した文字列を含む行が存在しないとき、block: で指定したテキストは末尾に追加される。文字列の指定に正規表現を使用できる |
insertbefore | ・BOF ・*regex* | 指定した文字列を含む行のうち最後の行の前に block: で指定したテキストを挿入する。指定した文字列を含む行が存在しないとき、block: で指定したテキストは末尾に追加される。文字列の指定に正規表現を使用できる |
marker | # {mark} ANSIBLE MANAGED BLOCK | block: で指定したテキストを挿入するときのマーカーのテンプレート。 {mark} 部分は marker_begin および marker_end で指定した文字列に置き換えられる |
marker_begin | BEGIN | block: で指定されたテキストの前に挿入されるマーカーの {marke} 部分の文字列 |
marker_end | END | block: で指定されたテキストの後に挿入されるマーカーの {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 ~]$