lineinfile - Убедитесь, что определённая строка есть в файле или замените существующую строку с использованием обратной ссылки на регулярное выражение.
Описание
- Этот модуль ищет в файле строку и гарантирует, что она присутствует или отсутствует.
- Это в основном полезно, когда вам нужно изменить только одну строку в файле. Обратитесь к модулю replace, если вы хотите изменить несколько похожих строк или проверьте blockinfile, если вы хотите вставить/обновить/удалить блок строк в файле. В других случаях см. модули copy или template.
Параметры
| параметр | обязательно | значение по умолчанию | варианты | комментарии |
|---|---|---|---|---|
| attributes (добавлен в 2.3)
| нет | None | Атрибуты, которые должен иметь файл или директория. Чтобы получить поддерживаемые флаги, см. страницу справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr. псевдонимы: attr | |
| backrefs | нет | нет |
| Используется с state=present. Если установлено, строка может содержать обратные ссылки (позиционные и именованные), которые будут заполнены, если regexp соответствует. Этот флаг немного изменяет работу модуля; insertbefore и insertafter будут проигнорированы, и если regexp нигде не соответствует в файле, файл останется без изменений. Если regexp соответствует, последняя соответствующая строка будет заменена на параметр расширенной строки. |
| backup | нет | нет |
| Создать резервную копию файла, включая информацию о времени, чтобы вы могли получить исходный файл, если вы каким-то образом неправильно его перезаписали. |
| create | нет | нет |
| Используется с state=present. Если указано, файл будет создан, если он ещё не существует. По умолчанию, он завершится неудачей, если файл отсутствует. |
| group | нет | Имя группы, которая должна владеть файлом/каталогом, как если бы оно было передано в chown. | ||
| insertafter | нет | EOF |
| Используется с state=present. Если указано, строка будет вставлена после последнего совпадения указанного регулярного выражения. Доступно специальное значение; EOF для вставки строки в конец файла. Если указанное регулярное выражение не имеет совпадений, будет использоваться EOF. Не может использоваться с backrefs. |
| insertbefore | нет |
| Используется с state=present. Если указано, строка будет вставлена перед последним совпадением указанного регулярного выражения. Доступно значение; BOF для вставки строки в начало файла. Если указанное регулярное выражение не имеет совпадений, строка будет вставлена в конец файла. Не может использоваться с backrefs. | |
| line | нет | Требуется для state=present. Строка для вставки/замены в файле. Если backrefs установлено, она может содержать обратные ссылки, которые будут расширены с помощью regexp групп захвата, если совпадение найдено. | ||
| mode | нет | Режим файла или директории. Для тех, кто знаком с /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами (например, 0644). Опускание ведущего нуля, вероятно, приведёт к неожиданным результатам. Начиная с версии 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, шаблон строки(ок) для удаления. Использует регулярные выражения 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 | нет | present |
| Нужно ли наличие строки. |
| unsafe_writes (добавлен в 2.2)
| нет |
| Обычно этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов. Иногда системы настраиваются или просто выходят из строя таким образом, что это невозможно. Один пример - файлы, смонтированные в Docker, которые не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом. Этот логический параметр позволяет Ansible перейти к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Помните, что это подвержено гонкам и может привести к повреждению данных. | |
| validate | нет | None | Команда валидации, которая выполняется перед копированием в нужное место. Путь к файлу для валидации передаётся через '%s', который должен присутствовать, как показано в примере ниже. Команда передаётся безопасно, поэтому такие функции оболочки, как расширение и конвейеры, не будут работать. |
Примеры
# 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 it does not exist, without passing regexp
- lineinfile:
path: /tmp/testfile
line: '192.168.1.99 foo.lab.net foo'
# 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 2.3, параметр dest был изменён на path по умолчанию, но dest также по-прежнему работает.
Статус
Этот модуль помечен как превью, что означает, что он не гарантирует обратную совместимость интерфейса.
Информация о техническом обслуживании
Дополнительную информацию о поддержке этого модуля компанией Red Hat см. в knowledge base article<https://access.redhat.com/articles/rhel-top-support-policies>.
Для получения помощи в разработке модулей, если вам это интересно, ознакомьтесь с Информация о сообществе и участие в разработке, Тестирование Ansible и Разработка модулей.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/lineinfile_module.html