Spec-Zone.ru › Ansible 2.11

ansible.builtin.lineinfile – Управление строками в текстовых файлах

Примечание

Этот модуль является частью ansible-base и включен во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля lineinfile, даже не указывая ключевое слово collections:. Несмотря на это, рекомендуется использовать FQCN для легкой ссылки на документацию модуля и для предотвращения конфликтов с другими коллекциями, которые могут иметь то же имя модуля.

В версии 0.7: of ansible.builtin

  • Описание
  • Параметры
  • Примечания
  • См. также
  • Примеры

Описание

  • Этот модуль гарантирует, что определенная строка присутствует в файле или заменяет существующую строку с использованием обратной ссылки на регулярное выражение.
  • Это в первую очередь полезно, когда вы хотите изменить только одну строку в файле.
  • См. модуль ansible.builtin.replace, если вы хотите изменить несколько похожих строк или проверьте ansible.builtin.blockinfile, если вы хотите вставить/обновить/удалить блок строк в файле. В других случаях см. модули ansible.builtin.copy или ansible.builtin.template.

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
attributes
строка
добавлен в 2.3 ansible.builtin
Атрибуты, которые должны быть у результирующего файла или директории.
Чтобы узнать поддерживаемые флаги, обратитесь к странице руководства для chattr на целевой системе.
Эта строка должна содержать атрибуты в том же порядке, что и при отображении lsattr.
Оператор = предполагается по умолчанию, в противном случае операторы + или - необходимо включить в строку.

псевдонимы: attr
backrefs
логический тип
добавлен в 1.1 ansible.builtin
    Варианты:
  • нет ←
  • да
Используется с state=present.
Если установлено, line может содержать обратные ссылки (как позиционные, так и именованные), которые будут заполнены, если regexp совпадает.
Этот параметр немного изменяет работу модуля; insertbefore и insertafter будут проигнорированы, и если regexp не найдено нигде в файле, файл останется без изменений.
Если regexp найдено, последняя совпавшая строка будет заменена параметром расширенной строки.
Взаимоисключающий с search_string.
backup
логический тип
    Варианты:
  • нет ←
  • да
Создать резервную копию файла, включая информацию о времени, чтобы вы могли восстановить исходный файл, если вы неправильно его испортили.
create
логический тип
    Варианты:
  • нет ←
  • да
Используется с state=present.
Если указано, файл будет создан, если он еще не существует.
По умолчанию, он завершится ошибкой, если файл отсутствует.
firstmatch
логический тип
добавлен в 2.5 ansible.builtin
    Варианты:
  • нет ←
  • да
Используется с insertafter или insertbefore.
Если установлено, insertafter и insertbefore будут работать с первой строкой, которая соответствует заданному регулярному выражению.
group
строка
Имя группы, которая должна владеть файлом/директорией, как это передается в chown.
insertafter
строка
    Варианты:
  • EOF ←
  • *regexp*
Используется с state=present.
Если указано, строка будет вставлена после последнего совпадения указанного регулярного выражения.
Если требуется первое совпадение, используйте (firstmatch=да).
Доступно специальное значение; EOF для вставки строки в конец файла.
Если указанное регулярное выражение не найдено нигде, будет использоваться EOF.
Если insertbefore установлено, значение по умолчанию EOF будет проигнорировано.
Если регулярные выражения передаются как в regexp, так и в insertafter, insertafter учитывается только если не найдено совпадение для regexp.
Нельзя использовать с backrefs или insertbefore.
insertbefore
строка
добавлен в 1.1 ansible.builtin
    Варианты:
  • BOF
  • *regexp*
Используется с state=present.
Если указано, строка будет вставлена перед последним совпадением указанного регулярного выражения.
Если требуется первое совпадение, используйте firstmatch=yes.
Доступно значение BOF для вставки строки в начало файла.
Если указанное регулярное выражение не найдено нигде, строка будет вставлена в конец файла.
Если регулярные выражения передаются как в regexp, так и в insertbefore, insertbefore учитывается только если не найдено совпадение для regexp.
Нельзя использовать с backrefs или insertafter.
line
строка
Строка, которая должна быть вставлена/заменена в файле.
Требуется для state=present.
Если backrefs установлено, может содержать обратные ссылки, которые будут расширены с помощью regexp групп захвата, если regexp соответствует.

псевдонимы: value
mode
raw
Разрешения, которые должны быть у результирующего файла или директории.
Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую нуль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 0644 или 01777) или заключить его в кавычки (например, '644' или '1777') для того, чтобы Ansible получил строку и мог выполнить свое преобразование из строки в число.
Передача Ansible числа без выполнения одного из этих правил приведет к десятичному числу, что приведет к непредвиденным результатам.
Начиная с Ansible 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r).
Если mode не указано, и целевой файл не существует, по умолчанию будет использоваться umask системы при установке режима для вновь созданного файла.
Если mode не указано, и целевой файл существует, режим существующего файла будет использован.
Указание mode является лучшим способом убедиться, что файлы создаются с правильными разрешениями. См. CVE-2020-1736 для получения дополнительной информации.
others
строка
Все аргументы, принимаемые модулем ansible.builtin.file, также работают здесь.
owner
строка
Имя пользователя, который должен владеть файлом/директорией, как это передается в chown.
path
путь / обязательно
Файл, который нужно изменить.
До версии Ansible 2.3 этот параметр был доступен только как dest, destfile и name.

псевдонимы: dest, destfile, name
regexp
строка
добавлен в 1.7 ansible.builtin
Регулярное выражение, которое нужно найти в каждой строке файла.
Для state=present, шаблон для замены, если он найден. Будет заменена только последняя найденная строка.
Для state=absent, шаблон строки(ок) для удаления.
Если регулярное выражение не найдено, строка будет добавлена в файл в соответствии с insertbefore или insertafter параметрами.
При модификации строки регулярное выражение должно обычно соответствовать как начальному состоянию строки, так и её состоянию после замены line, чтобы обеспечить идемпотентность.
Использует регулярные выражения Python. См. https://docs.python.org/3/library/re.html.

псевдонимы: regex
search_string
строка
добавлен в 2.11 ansible.builtin
Литеральная строка для поиска в каждой строке файла. Она не должна совпадать со всей строкой.
Для state=present, строка для замены, если строка найдена в файле. Будет заменена только последняя найденная строка.
Для state=absent, строка(и) для удаления, если строка находится в строке.
Если литеральное выражение не найдено, строка будет добавлена в файл в соответствии с insertbefore или insertafter параметрами.
Взаимоисключающий с backrefs и regexp.
selevel
строка
Часть уровня SELinux контекста файла.
Это атрибут MLS/MCS, иногда называемый range.
Когда установлено значение _default, будет использоваться часть политики level, если она доступна.
serole
строка
Часть роли SELinux контекста файла.
Когда установлено значение _default, будет использоваться часть политики role, если она доступна.
setype
строка
Часть типа SELinux контекста файла.
Когда установлено значение _default, будет использоваться часть политики type, если она доступна.
seuser
строка
Часть пользователя SELinux контекста файла.
По умолчанию используется политика system, где это применимо.
Когда установлено значение _default, будет использоваться часть политики user, если она доступна.
state
строка
    Варианты:
  • отсутствует
  • есть ←
Следует ли присутствовать строке или нет.
unsafe_writes
логический тип
добавлен в 2.2 ansible.builtin
    Варианты:
  • нет ←
  • да
Влияние на использование атомарной операции для предотвращения повреждения данных или несогласованного чтения из целевого файла.
По умолчанию, этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов, но иногда системы настроены или просто неисправны таким образом, что это невозможно. Один из примеров — файлы, смонтированные через Docker, которые не могут обновляться атомарно изнутри контейнера и могут быть записаны только небезопасным способом.
Этот параметр позволяет Ansible использовать небезопасные методы обновления файлов, когда атомарные операции завершаются неудачно (однако, он не заставляет Ansible выполнять небезопасные записи).
ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных.
END_OF_DOCUMENT_MARKER
validate
string
Команда валидации, которая выполняется перед копированием в указанное место.
Путь к файлу, который нужно валидировать, передаётся через «%s», что обязательно, как показано в примерах ниже.
Команда передаётся безопасно, поэтому такие функции оболочки, как расширение и конвейеры, работать не будут.

Примечания

Примечание

  • Начиная с Ansible 2.3, параметр dest изменён на path по умолчанию, но dest всё ещё работает.
  • Поддерживает check_mode.

См. также

См. также

ansible.builtin.blockinfile

Официальная документация по модулю ansible.builtin.blockinfile.

ansible.builtin.copy

Официальная документация по модулю ansible.builtin.copy.

ansible.builtin.file

Официальная документация по модулю ansible.builtin.file.

ansible.builtin.replace

Официальная документация по модулю ansible.builtin.replace.

ansible.builtin.template

Официальная документация по модулю ansible.builtin.template.

community.windows.win_lineinfile

Официальная документация по модулю community.windows.win_lineinfile.

Примеры

# 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
  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
  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

Авторы

  • Daniel Hokka Zakrissoni (@dhozac)
  • Ahti Kitsik (@ahtik)
  • Jose Angel Munoz (@imjoseangel)

© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/lineinfile_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API