【モジュールの使い方】Linefile
機能
コマンドにより以下の操作が可能 + 指定した内容の行を指定した位置に追加 + 指定した内容の行の削除 + 正規表現での行のマッチング
使用例
- /root/test.conf の「bbbb:」項目の後に 「cccc: 3」 を挿入する
- hosts: all become: yes tasks: - name: lineinfile test lineinfile: path: /root/test.conf line: 'cccc: 3' insertafter: 'bbbb: .*'
主なパラメータ
パラメータ | 必須 | デフォルト値 | 説明 |
---|---|---|---|
path | ● | 変更するファイルパスとファイル名 | |
line | 【state=present指定必須】 ファイルに挿入/置換する行を指定 設定されている場合:backerfsを設定していると指定したregexpの条件が適用される。 |
||
insertafter | EOF/正規表現 | 【state=present指定必須】 指定した場合:正規表現で最後に一致した行の後に追加 正規表現の最初に一致した行のあとに追加した場合、(firstmach=yes)を設定 特別な値「EOF」も追加可能 指定された正規表現に一致するものがない場合:代わりに「EOF」を使用 insertbeforeが設定されている場合:デフォルト値EOFは無視される。 正規表現がregexpとinsertafter両方で設定されている場合:insertafterは、regexpで一致しなければ適用される。 backerefsまたは、insertbeforeと一緒に使用は出来ません。 |
|
insertbefore | BOF/正規表現 | 【state=present指定必須】 指定した場合:正規表現で最後に一致した行の前に追加 正規表現の最初に一致した行の前に追加した場合、(firstmach=yes)を設定 特別な値「BOF」も追加可定 指定された正規表現に一致するものがない場合:代わりに「BOF」を使用 正規表現がregexpとinsertbefore両方で設定されている場合:insertbeforeは、regexpで一致しなければ適用される。 backerefsまたは、insertafterと一緒に使用は出来ません。 |
|
firstmatch | yes/no | 【insetafter/insertbeforeの設定必須】 yesの場合:insertafter/insertbeforeで指定された正規表現に一致する最初の行で実行 |
|
state | absent regexpで指定した文字列を含むすべての行を削除する present regexpで指定した文字列を含む行を line: で指定した文字列に置き換える。insertbefore: / insertafter、firstmatch が指定されている場合、その動作に従って line: に指定した文字列を行として追加する |
||
create | yes/no | 【state=present指定必須】 yesの場合:ファイルが存在しない場合はファイルを作成 noの場合(デフォルト):ファイルが見つからない場合は失敗 |
全パラメータ
パラメータ | 必須 | デフォルト値 | 説明 |
---|---|---|---|
attributes | ファイルの属性を指定 | ||
backerfs | yes/no | 【state=present指定必須】 lineを設定した場合:指定した行に、regexpで一致した最後に見つかった行を置換及び追記出来る。 このパラメータはモジュールの内容を少しだけ変更可能。inserafterとinsertbeforeは有効にならず、regexpの正規表現を利用し、指定してファイル内で見つからない場合は変更されません。 regexpで一致する場合:最後に一致した行のパラメータに置き換えする。 search_stringsとは(相互に排他的)同時利用できません。 |
|
backup | yes/no | タイムスタンプを含むバックアップファイルを作成し 変更ファイルが壊れた際、バックアップファイルを利用し切り戻すことが出来る |
|
create | yes/no | 【state=present指定必須】 yesの場合:ファイルが存在しない場合はファイルを作成 noの場合(デフォルト):ファイルが見つからない場合は失敗 |
|
firstmatch | yes/no | 【insetafter/insertbeforeの設定必須】 yesの場合:insertafter/insertbeforeで指定された正規表現に一致する最初の行で実行 |
|
group | chownに供給されるような、ファイル/ディレクトリを所有すべきグループの名前。 | ||
insertafter | EOF/正規表現 | 【state=present指定必須】 指定した場合:正規表現で最後に一致した行の後に追加 正規表現の最初に一致した行のあとに追加した場合、(firstmach=yes)を設定 特別な値「EOF」も追加可能 指定された正規表現に一致するものがない場合:代わりに「EOF」を使用 insertbeforeが設定されている場合:デフォルト値EOFは無視される。 正規表現がregexpとinsertafter両方で設定されている場合:insertafterは、regexpで一致しなければ適用される。 backerefsまたは、insertbeforeと一緒に使用は出来ません。 |
|
insertbefore | BOF/正規表現 | 【state=present指定必須】 指定した場合:正規表現で最後に一致した行の前に追加 正規表現の最初に一致した行の前に追加した場合、(firstmach=yes)を設定 特別な値「BOF」も追加可定 指定された正規表現に一致するものがない場合:代わりに「BOF」を使用 正規表現がregexpとinsertbefore両方で設定されている場合:insertbeforeは、regexpで一致しなければ適用される。 backerefsまたは、insertafterと一緒に使用は出来ません。 |
|
line | 【state=present指定必須】 ファイルに挿入/置換する行を指定 設定されている場合:backerfsを設定していると指定したregexpの条件が適用される。 |
||
mode | ファイルまたはディレクトリをモードにする必要があります。 /usr/bin/chmodでモードが実際には0644のような8進数であることを覚えている人のために。 先行ゼロを離れると、予期しない結果が生じる可能性があります。 バージョン1.8では、モードはシンボリックモード(たとえば、 u + rwx または u = rw、g = r、o = r )として指定できます。 |
||
othres | ファイルモジュールで受け入れられるすべての引数もここで動作します。 | ||
owner | chown に供給されるファイル/ディレクトリを所有するユーザーの名前。 | ||
path | ● | 変更するファイルパスとファイル名 | |
regexp | 指定したファイル内の正規表現による検索条件を指定 state=presentの場合:指定したファイル内の文字列で正規表現が引っかかった場合、最後に見つかった行のみ置換する。state=absentの場合:指定したファイル内の文字列で引っかかた場合、その文字列を削除する。 正規表現が一致しない場合、insertbeforeまたはinsertafterに従って、行がファイルに追加されます。 行を変更する場合、正規表現はその行の初期状態と変更後の状態の両方に一致する必要がる。べき等性(特定のリクエストに対して何回でも続けて同じ効果が起こること)を確保するための行による置換 |
||
search_string | 指定したファイル内を検索する文字。1行の文字列と完全一致する必要はない state=presentの場合:指定したファイルの内で文字列が見つかった場合、検索された行を置き換える。検索で最後に見つかった行が置き換わる。 state=absentの場合:指定したファイル内で文字列を見つけ場合、その行を削除 リテラル式 例:"test"を記載し一致しない場合:insertbeforeもしくはinsertafterの設定に従い、新しい行が追加されます。 backerefsとreqexptとは(相互に排他的)同時利用できません。 |
||
selevel | SELinuxファイルシステムオブジェクトコンテキストのレベル部分。 これはMLS/MCS属性であり、範囲とも呼ばれます。 _defaultに設定:seuser のように機能します。 |
||
serole | SELinuxファイルシステムオブジェクトコンテキストのロール部分。 _defaultに設定:seuser のように機能します。 |
||
setype | SELinuxファイルシステムオブジェクトコンテキストのタイプ部分。 _defaultに設定:seuser のように機能します。 |
||
seuser | SELinuxファイルシステムオブジェクトコンテキストのユーザー部分。 該当する場合、システムポリシーをデフォルトにします。 _defaultに設定:seuser のように機能します。 |
||
state | absent regexpで指定した文字列を含むすべての行を削除する present regexpで指定した文字列を含む行を line: で指定した文字列に置き換える。insertbefore: / insertafter、firstmatch が指定されている場合、その動作に従って line: に指定した文字列を行として追加する |
||
unsafe_writes | 通常、このモジュールでは、アトミック操作を使用してデータの破損やターゲットファイルからの一貫性のない読み込みを防止しています。 1つの例は、Dockerがマウントしたファイルです。 アトミックに更新することはできず、安全でない方法でのみ実行できます。 このオプションを使用:アトミック操作が失敗した時にAnsibleがファイルオブジェクトを更新する安全でない、メソッドにフォールバックできます(ただし、Ansibleに安全でない書き込みを矯正することはありません) 重要!安全でない書き込みは競合を生み、データの破損につながる可能性がある。 |
||
validate | 場所にコピーする前に実行する検証コマンド 検編集対象のファイルを直接編集せず、編集用に一時ファイルを作成します。その一時ファイルのパスが %s に格納されます。但し、拡張やパイプなどのシェル機能は機能しません。 |
validateの使用例
tasks: - name: configure Listen Port lineinfile: path: /etc/httpd/conf/httpd.conf regexp: '^Listen 80$' line: 'Listen 8080' validate: httpd -tf %s # point notify: - restart httpd
validate: httpd -tf %s について補足
- validate オプションには
httpd -tf %s
を指定しています。- httpd コマンドの
-t
オプションによってhttpd.conf に問題がないか検証できます。-f
オプションを併用することで検証対象のファイルを明示指定できます。%s
は Ansible 側の仕様によるものです。- lineinfile などのモジュールでは、編集対象のファイルを直接編集せず、 編集用に一時ファイルを作成します。その一時ファイルのパスが
%s
に格納されます。httpd -t のみの指定の場合
- Ansible が編集した一時ファイルを検証の対象にしないでご注意ください。
validate オプションを指定しなかった場合
httpd.conf
に問題があっても、ハンドラーrestart httpd
が呼ばれてしまい 再起動を試みたところで失敗し、httpd
が停止したままになってしまいます。- validate オプションを有効に使うことで、このような自体を未然に防げます。
ドキュメント
【Ansible Documentation】Module Linefile