lineinfile - Управление строками в текстовых файлах
Описание
- Этот модуль гарантирует, что определённая строка присутствует в файле или заменяет существующую строку с помощью обратных ссылок в регулярном выражении.
- Это в основном полезно, когда нужно изменить только одну строку в файле. Обратитесь к модулю replace, если нужно изменить несколько похожих строк или посмотрите модуль blockinfile, если нужно вставить/обновить/удалить блок строк в файле. В других случаях см. модули copy или template.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| attributes (добавлено в 2.3) | Атрибуты, которые должен иметь файл или директория. Чтобы получить поддерживаемые флаги, посмотрите страницу руководства для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и при отображении lsattr. псевдонимы: attr | |
| backrefs bool |
| Используется с state=present. Если установлено, line может содержать обратные ссылки (как позиционные, так и именованные), которые будут заполнены, если regexp соответствует шаблону. Этот флаг немного изменяет работу модуля; insertbefore и insertafter будут проигнорированы, и если regexp нигде в файле не соответствует шаблону, файл останется без изменений. Если regexp соответствует шаблону, последняя соответствующая строка будет заменена расширенной строкой-параметром. |
| backup bool |
| Создаёт резервную копию файла, включая информацию о времени, чтобы вы могли восстановить исходный файл, если вы неправильно его перезаписали. |
| create bool |
| Используется с state=present. Если указано, файл будет создан, если он ещё не существует. По умолчанию, если файла нет, произойдёт ошибка. |
| firstmatch bool (добавлено в 2.5) |
| Используется с insertafter или insertbefore. Если установлено, insertafter и inserbefore находят первую строку, соответствующую регулярному выражению. |
| group | Имя группы, которая должна владеть файлом/директорией, так же как и при использовании chown. | |
| insertafter |
| Используется с state=present. Если указано, строка будет вставлена после последнего совпадения указанного регулярного выражения. Если требуется первое совпадение, используйте (firstmatch=yes). Доступно специальное значение; EOF для вставки строки в конец файла. Если указанное регулярное выражение не имеет совпадений, будет использовано EOF. Нельзя использовать с backrefs. |
| insertbefore |
| Используется с state=present. Если указано, строка будет вставлена перед последним совпадением указанного регулярного выражения. Если требуется первое совпадение, используйте (firstmatch=yes). Доступно значение BOF для вставки строки в начало файла. Если указанное регулярное выражение не имеет совпадений, строка будет вставлена в конец файла. Нельзя использовать с backrefs. |
| line | Обязательно для state=present. Строка для вставки/замены в файле. Если backrefs установлено, может содержать обратные ссылки, которые будут расширены с помощью regexp групп захвата, если регулярное выражение соответствует. | |
| mode | Режим файла или директории. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны указать ведущий ноль, чтобы Ansible's YAML-парсер знал, что это восьмеричное число (например, 0644 или 01777) или заключить его в кавычки (например, '644' или '0644'), чтобы Ansible получил строку и выполнил преобразование из строки в число. Если вы передадите Ansible число без этих правил, он будет воспринимать его как десятичное, что приведёт к неожиданным результатам. С версии 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r). | |
| others | Все аргументы, принимаемые модулем file, также работают здесь. | |
| owner | Имя пользователя, который должен владеть файлом/директорией, так же как и при использовании chown. | |
| path обязательно | Файл для изменения. До версии 2.3 этот параметр был доступен только как dest, destfile и name. псевдонимы: dest, destfile, name | |
| regexp (добавлено в 1.7) | Регулярное выражение для поиска в каждой строке файла. Для state=present, шаблон для замены, если найдено. Будет заменена только последняя найденная строка.Для state=absent, шаблон строки(ок) для удаления.Если регулярное выражение не найдено, строка будет добавлена в файл в соответствии с настройками `insertbefore` или `insertafter`. При изменении строки регулярное выражение должно обычно соответствовать как начальному состоянию строки, так и её состоянию после замены line, чтобы обеспечить идемпотентность.Использует регулярные выражения Python. См. http://docs.python.org/2/library/re.html. | |
| selevel | По умолчанию: "s0" | Часть контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. Функциональность _default работает так же, как для seuser. |
| serole | Часть контекста файла SELinux, роль. Функциональность _default работает так же, как для seuser. | |
| setype | Часть контекста файла SELinux, тип. Функциональность _default работает так же, как для seuser. | |
| seuser | Часть контекста файла SELinux, пользователь. Будет по умолчанию использовать политику системы, если применимо. Если установлено значение _default, будет использоваться часть политики user, если она доступна. | |
| state |
| Нужно ли, чтобы строка присутствовала или нет. |
| unsafe_writes bool (добавлено в 2.2) |
| Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несовместимые чтения из целевых файлов. Иногда системы настроены или просто неисправны таким образом, что это невозможно. Один пример — файлы, смонтированные через Docker; их нельзя обновлять атомарно и можно обновлять только небезопасным способом. Этот булевый параметр позволяет Ansible использовать небезопасные методы обновления файлов в тех случаях, когда нет другого выбора. Имейте в виду, что это подвержено проблемам гонки и может привести к повреждению данных. |
| validate | Команда проверки, выполняемая перед копированием в место назначения. Путь к файлу, подлежащему проверке, передаётся через '%s', что должно быть указано, как в примере ниже. Команда передаётся безопасно, поэтому функции оболочки, такие как расширение и конвейеры, не будут работать. |
Примечания
Примечание
- Начиная с Ansible 2.3, параметр dest изменён на path по умолчанию, но dest всё ещё работает.
Примеры
# Before 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
- lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: 'SELINUX=enforcing'
- lineinfile:
path: /etc/sudoers
state: absent
regexp: '^%wheel'
- lineinfile:
path: /etc/hosts
regexp: '^127\.0\.0\.1'
line: '127.0.0.1 localhost'
owner: root
group: root
mode: 0644
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
insertafter: '^#Listen '
line: 'Listen 8080'
- lineinfile:
path: /etc/services
regexp: '^# port for http'
insertbefore: '^www.*80/tcp'
line: '# port for http by default'
# Add a line to a file if the file does not exist, without passing regexp
- lineinfile:
path: /tmp/testfile
line: '192.168.1.99 foo.lab.net foo'
create: yes
# Fully quoted because of the ': ' on the line. See the Gotchas in the YAML docs.
- lineinfile:
path: /etc/sudoers
state: present
regexp: '^%wheel\s'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
# Yaml requires escaping backslashes in double quotes but not in single quotes
- lineinfile:
path: /opt/jboss-as/bin/standalone.conf
regexp: '^(.*)Xms(\\d+)m(.*)$'
line: '\1Xms${xms}m\3'
backrefs: yes
# Validate the sudoers file before saving
- lineinfile:
path: /etc/sudoers
state: present
regexp: '^%ADMIN ALL='
line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
validate: '/usr/sbin/visudo -cf %s'
Статус
Этот модуль помечен как превью, что означает, что он не гарантирует обратную совместимость.
Техническое обслуживание
Этот модуль помечен как ядерный, что означает, что он поддерживается командой Ansible Core. См. Техническое обслуживание и поддержка модулей для получения дополнительной информации.
Список других модулей, поддерживаемых командой Ansible Core, см. здесь.
Поддержка
Дополнительную информацию о поддержке этого модуля компанией Red Hat см. в этой статье базы знаний
Автор
- Daniel Hokka Zakrissoni (@dhozac)
- Ahti Kitsik (@ahtik)
Подсказка
Если вы заметите какие-либо проблемы в этом руководстве, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/modules/lineinfile_module.html