Ansible Lineinfile Module With Regexp Examples
Ansible lineinfileモジュールは、ファイルの末尾やファイルの任意の場所に新しい行を挿入するために使用されます。 ansible lineinfile モジュールで、ファイルから存在する行を削除したり、行を置き換えたりすることができます。 以下の例では、ansible lineinfile モジュールを使って、正規表現などのパラメータを変えて、改行を挿入する方法を紹介します。
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible lineinfile mdoule. lineinfile: path: /project/devops/abc.txt line: decodingdevops talks about all the devops tools state: present create: yes
lineinfileモジュールでは、要求に応じて様々なパラメータを使用することができます。 ここではpathパラメータを使用します。pathパラメータはlineinfileがどのファイルを変更しなければならないかを指示します。 lineパラメータには、ファイルに追加する行を指定します。 行を追加するには、stateパラメータを指定する必要があります。
このプレイブックの機能
新しいファイルを作成し、ファイルに行を追加します。 行が存在しない場合は lineinfile が行を追加するため、playbook を再度実行してもそのファイルに変更は起こりません。
createパラメータを削除してplaybookを実行した場合、行が既に存在する場合は、その行を再び追加することはありません。 定義されたパスにファイルが存在する必要があり、そうでない場合は
fatal: のようなエラーが発生します。 FAILED! => {“changed”: false, “msg”: “Destination /project/devops/abc.txt does not exist !”, “rc”: 257}
If The File is already Existed:
If the file is already existed then it will append to end of file.
Ansible Lineinfile With Regexp 例: ファイルが既に存在する場合。
---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' line: 'hello devops' state: present backrefs: yes
正規表現は、ファイル内の特定の行を変更するために使用されます。 ここでは正規表現パラメータに ‘^devops’ と記述していますが、これは docker で始まる行をファイル内の ‘hello devops’ という行で変更することを意味します。 backrefs yesは、ファイル中の正規表現行(^docker)が見つかった場合のみ、その行をhello devopsに置き換えます。 dockerで始まる行がない場合、ファイル内は何も変更されず、ファイルは変更されないままです。
デフォルトでは backrefs の値は no なので、タスクで backrefs に言及していない場合は ‘backref: no’ と見なされます
What Will Happen If you have Not Mention Backrefs: or
backrefs に yes と言及していない場合、そして docker で始まるラインがない場合でもファイルの最後にラインは追加されます。 playbookを複数回実行すると、その回数だけ行が追加されます。 この問題を避けるには、backrefをyesと記述する必要があります。
特定の行の後/前に行を追加する。
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt insertafter: '^docker' line: 'hello devops'
ここでは、docker で開始した行の後に ‘hello devops’ という行が追加されます。
dockerで始まる行の前に行を追加したい場合は、insertbeforeと記述します。
Ansible regexpで行を削除
# cat lineinfile.yml---- hosts: localhost gather_facts: no tasks: - name: Ansible check directory. lineinfile: path: /project/devops/abc.txt regexp: '^docker' state: absent
ここではdockerで始まる行を削除しています。 Ansible の正規表現を使用して行を削除するには、state パラメータを absent とします。
上記のすべての例で、記号 (^) に言及したので、開始した行について説明しました。 この記号は、’line starting with’ を表します。もし、もっと別のオプションを知りたければ、python regexp を学ぶべきです。
Leave a Reply