knowledge/technology/tools/Ansible/modules/ansible.builtin.lineinfile.md

11 KiB

ansible.builtin.lineinfile

This module ensures a particular line is in a file, or replace an existing line using a back-referenced regular expression.

Parameter

Parameter Type Default Description
attributes string - The attributes the resulting filesystem object should have. To get supported flags look at the man page for chattr on the target system. The = operator is assumed as default, otherwise + or - operators need to be included in the string.
backup boolean false Create a backup file including the timestamp information so you can get the original file back if you somehow clobbered it incorrectly.
create boolean false Create a new file if it does not exist.
firstmatch boolean false Used with insertafter or insertbefore. If set, insertafter and insertbefore will work with the first line that matches the given regular expression.
group string false Name of the group that should own the filesystem object, as would be fed to chown.
insertafter string - Used with state=present.

If specified, the line will be inserted after the last match of specified regular expression.

If the first match is required, use(firstmatch=yes).

A special value is available; EOF for inserting the line at the end of the file.

If specified regular expression has no matches, EOF will be used instead.

If insertbefore is set, default value EOF will be ignored.
insertbefore string - Used with state=present.

If specified, the line will be inserted before the last match of specified regular expression.

If the first match is required, use firstmatch=yes.

A value is available; BOF for inserting the line at the beginning of the file.

If specified regular expression has no matches, the line will be inserted at the end of the file.
line string - The line to insert/replace into the file.
mode string - The permissions the resulting filesystem object should have.
owner string - Name of the user that should own the filesystem object, as would be fed to chown.
path path - The file to modify.
regexp string - The regular expression to look for in every line of the file.
search_string string - The literal string to look for in every line of the file. This does not have to match the entire line.
state string "present" Whether the line should be there or not.

Choices:

- absent
- present
validate string - The validation command to run before copying the updated file into the final destination.

Examples

# NOTE: Before 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
- name: Ensure SELinux is set to enforcing mode
  ansible.builtin.lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=enforcing

- name: Make sure group wheel is not in the sudoers configuration
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    state: absent
    regexp: '^%wheel'

- name: Replace a localhost entry with our own
  ansible.builtin.lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.0\.1'
    line: 127.0.0.1 localhost
    owner: root
    group: root
    mode: '0644'

- name: Replace a localhost entry searching for a literal string to avoid escaping
  ansible.builtin.lineinfile:
    path: /etc/hosts
    search_string: '127.0.0.1'
    line: 127.0.0.1 localhost
    owner: root
    group: root
    mode: '0644'

- name: Ensure the default Apache port is 8080
  ansible.builtin.lineinfile:
    path: /etc/httpd/conf/httpd.conf
    regexp: '^Listen '
    insertafter: '^#Listen '
    line: Listen 8080

- name: Ensure php extension matches new pattern
  ansible.builtin.lineinfile:
    path: /etc/httpd/conf/httpd.conf
    search_string: '<FilesMatch ".php[45]?$">'
    insertafter: '^\t<Location \/>\n'
    line: '        <FilesMatch ".php[34]?$">'

- name: Ensure we have our own comment added to /etc/services
  ansible.builtin.lineinfile:
    path: /etc/services
    regexp: '^# port for http'
    insertbefore: '^www.*80/tcp'
    line: '# port for http by default'

- name: Add a line to a file if the file does not exist, without passing regexp
  ansible.builtin.lineinfile:
    path: /tmp/testfile
    line: 192.168.1.99 foo.lab.net foo
    create: yes

# NOTE: Yaml requires escaping backslashes in double quotes but not in single quotes
- name: Ensure the JBoss memory settings are exactly as needed
  ansible.builtin.lineinfile:
    path: /opt/jboss-as/bin/standalone.conf
    regexp: '^(.*)Xms(\d+)m(.*)$'
    line: '\1Xms${xms}m\3'
    backrefs: yes

# NOTE: Fully quoted because of the ': ' on the line. See the Gotchas in the YAML docs.
- name: Validate the sudoers file before saving
  ansible.builtin.lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%ADMIN ALL='
    line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
    validate: /usr/sbin/visudo -cf %s

# See https://docs.python.org/3/library/re.html for further details on syntax
- name: Use backrefs with alternative group syntax to avoid conflicts with variable values
  ansible.builtin.lineinfile:
    path: /tmp/config
    regexp: ^(host=).*
    line: \g<1>{{ hostname }}
    backrefs: yes