lineinfile – Управление строками в текстовых файлах
Краткое описание
- Этот модуль гарантирует, что определённая строка находится в файле или заменяет существующую строку с помощью обратной ссылки на регулярное выражение.
- Это в первую очередь полезно, когда вы хотите изменить только одну строку в файле. Обратитесь к модулю replace, если хотите изменить несколько похожих строк, или проверьте модуль blockinfile, если хотите вставить/обновить/удалить блок строк в файле. В других случаях обратитесь к модулям copy или template.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| attributes - добавлено в 2.3 | Атрибуты, которые должны иметь файл или директория. Чтобы получить поддерживаемые флаги, обратитесь к странице руководства (man page) для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и отображаемый lsattr. = предполагается в качестве значения по умолчанию, в противном случае + или - операторы должны быть включены в строку.псевдонимы: attr | |
| backrefs boolean |
| Используется с state=present. Если установлено, line может содержать обратные ссылки (как позиционные, так и именованные), которые будут заполнены, если regexp совпадает. Этот флаг немного изменяет работу модуля; insertbefore и insertafter будут проигнорированы, и если regexp не совпадает нигде в файле, файл останется без изменений. Если regexp совпадает, последняя совпавшая строка будет заменена параметром расширенной строки. |
| backup boolean |
| Создать резервную копию файла, включая информацию о времени создания, чтобы можно было восстановить исходный файл, если он был неправильно изменен. |
| create boolean |
| Используется с state=present. Если указано, файл будет создан, если он еще не существует. По умолчанию, он завершится ошибкой, если файл отсутствует. |
| firstmatch boolean добавлено в 2.5 |
| Используется с insertafter или insertbefore. Если установлено, insertafter и inserbefore находят первую строку с совпадением по регулярному выражению. |
| group - | Имя группы, которая должна владеть файлом/директорией, как это передается в chown. | |
| insertafter - |
| Используется с state=present. Если указано, строка будет вставлена после последнего совпадения указанного регулярного выражения. Если требуется первое совпадение, используйте (firstmatch=yes). Доступно специальное значение; EOF для вставки строки в конец файла. Если указанное регулярное выражение не имеет совпадений, используется EOF вместо. Если регулярные выражения переданы как regexp и insertafter, insertafter учитывается только в случае, если не найдено совпадений для regexp. Не может быть использовано с backrefs. |
| insertbefore - |
| Используется с state=present. Если указано, строка будет вставлена перед последним совпадением указанного регулярного выражения. Если требуется первое совпадение, используйте (firstmatch=yes). Доступно значение BOF для вставки строки в начало файла. Если указанное регулярное выражение не имеет совпадений, строка будет вставлена в конец файла. Если регулярные выражения переданы как regexp и insertbefore, insertbefore учитывается только в случае, если не найдено совпадений для regexp. Не может быть использовано с backrefs. |
| line - | Требуется для state=present. Строка для вставки/замены в файле. Если backrefs установлено, может содержать обратные ссылки, которые будут расширены с группами захвата regexp, если regexp совпадает. | |
| mode - | Режим файла или директории. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущий ноль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 0644 или 01777), либо заключить его в кавычки (например, '644' или '1777'), чтобы 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. псевдонимы: regex | |
| selevel - | По умолчанию: "s0" | Часть уровня контекста файла SELinux. Это атрибут MLS/MCS, иногда называемый range. Функция _default работает так же, как для seuser. |
| serole - | Часть роли контекста файла SELinux, _default функция работает, как для seuser. | |
| setype - | Часть типа контекста файла SELinux, _default функция работает, как для seuser. | |
| seuser - | Часть пользователя контекста файла SELinux. Будет по умолчанию соответствовать политике системы, если применимо. Если установлено значение _default, будет использоваться часть user политики, если она доступна. | |
| state - |
| Указывает, должна ли строка присутствовать в файле или нет. |
| unsafe_writes boolean добавлено в 2.2 |
| По умолчанию этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несогласованные чтения из целевых файлов, но иногда системы настроены или просто неисправны в способах, которые препятствуют этому. Одним примером являются файлы, смонтированные в Docker, которые не могут быть обновлены атомарно изнутри контейнера и могут быть записаны только небезопасным способом. Этот параметр позволяет Ansible перейти к небезопасным методам обновления файлов, когда атомарные операции терпят неудачу (однако он не заставляет 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'
# Searches for a line that begins with 127.0.0.1 and replaces it with the value of the 'line' parameter
- 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. [ядро]
Поддержка Red Hat
Дополнительную информацию о поддержке этого модуля Red Hat можно найти в этой статье базы знаний 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.7/modules/lineinfile_module.html