Contents
導入
前回Ansibleのlineinfileを使ったテキストファイルの編集の基本的な部分を確認したので、今回はより詳しいオプションの使い方を見ていきます。実行環境などは前回と同様です。
Ansibleのlineinfileでテキストファイルを編集する – Koltatt
Options
state & regexp
stateとregexpについては前回扱いました。
owner & group & mode
編集するファイルのowner,group,modeをそれぞれ設定する。
- lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present owner=vagrant group=vagrant mode=660 regexp='text line' line='change line'
実行前
text line
$ ls -l -rw-r--r--. 1 root root ... text.txt
vagrant provision
実行後
change line
$ ls -l -rw-rw----. 1 vagrant vagrant ... text.txt
insert [ before|after ]
insertbefore | 正規表現でmatchした行の前、もしくはBOFでファイルの先頭にlineを書き込む。 |
---|---|
insertafter | 正規表現でmatchした行の後ろ、もしくはEOFでファイルの末尾にlineを書き込む。 |
・state=presentである必要がある。
- lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present insertbefore='BOF' line='BOF line' - lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present insertbefore='base line' line='before line' - lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present insertafter='base line' line='after line' - lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present insertafter='EOF' line='EOF line'
実行前
base line
vagrant provision
実行後
BOF line before line base line after line EOF line
create
対象に指定したファイルが存在しない場合、ファイルを作成した後に編集が実行される。
デフォルトではnoとなっているため、オプションを指定せずにファイルが存在しなかった場合にはエラーが返される。
- lineinfile: > dest=/home/vagrant/lineinfile/text.txt create=yes state=present line='create file/home/vagrant/lineinfile/text.txt'
#ゲストマシンにファイルが存在しない $ ls /home/vagrant/
$ vagrant provision
$ vi /home/vagrant/lineinfile/text.txt
create file/home/vagrant/lineinfile/text.txt
backup
プロビジョニングの実行時に編集対象のファイルのバックアップを作成する。
- lineinfile: > dest=/home/vagrant/lineinfile/text.txt backup=yes state=present regexp='old file' line='new file'
実行前
old file
$ vagrant provision
実行後
$ ls /home/vagrant/lineinfile/ text.txt text.txt.yyyy-mm-dd@hh:mm:ss~
new file
old file
backrefs
regexpとlineで後方参照を行う。
backrefs=yesとなった場合モジュールの挙動が変更されinsertafterとinsertbeforeが無視され、正規表現にマッチする行が無ければ変更は実行されずマッチする行がある場合にはその中で最後の行に変更が実施されます。
- lineinfile: > dest=/home/vagrant/lineinfile/text.txt state=present backrefs=yes regexp='(text line)' line='change \1'
backrefs=yes
text line
$ vagrant provision
change text line
backrefs=no
backrefs=no
$ vagrant provision
change \1
その他のオプション
参照:
http://docs.ansible.com/ansible/lineinfile_module.html#options
あとがき
数が多すぎて全ては扱いきれませんでしたが、特に気になっていたオプションを確認してみました。
設定ファイルの編集の場合細かいオプションの知識よりも正規表現をきちんと書けるかどうかがより重要になってくるかなとも思いますが、オプションについても押さえておくと他人のコードを見る場合などに役立つと思います。