lineinfile – Управление строками в текстовых файлах
Описание
- Этот модуль гарантирует, что определённая строка присутствует в файле или заменяет существующую строку с использованием обратной ссылки на регулярное выражение.
- Это в первую очередь полезно, когда нужно изменить только одну строку в файле.
- См. модуль replace, если нужно изменить несколько похожих строк или проверьте модуль blockinfile, если нужно вставить/обновить/удалить блок строк в файле. В других случаях см. модули copy или template.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| attributes строка | Атрибуты, которые должны быть у результирующего файла или каталога. Для получения поддерживаемых флагов обратитесь к странице man для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и при отображении lsattr. Оператор = предполагается по умолчанию, в противном случае операторы + или - должны быть включены в строку.Псевдонимы: attr | |
| backrefs логическое значение |
| Используется с state=present. Если установлено, line может содержать обратные ссылки (как позиционные, так и именованные), которые будут заполнены, если regexp совпадает.Этот параметр немного изменяет работу модуля; insertbefore и insertafter будут проигнорированы, и если regexp нигде в файле не найдено, файл останется без изменений.Если regexp найдено, последняя совпавшая строка будет заменена расширенной строкой параметра. |
| backup логическое значение |
| Создать резервную копию файла, включая информацию о времени, чтобы вы могли вернуть исходный файл, если вы каким-то образом его неправильно перезаписали. |
| create логическое значение |
| Используется с state=present. Если указано, файл будет создан, если он еще не существует. По умолчанию он завершится ошибкой, если файл отсутствует. |
| firstmatch логическое значение добавлен в 2.5 |
| Используется с insertafter или insertbefore. Если установлено, insertafter и insertbefore будут работать с первой строкой, соответствующей заданному регулярному выражению. |
| group строка | Имя группы, которая должна владеть файлом/каталогом, как в команде chown. | |
| insertafter строка |
| Используется с state=present. Если указано, строка будет вставлена после последнего совпадения указанного регулярного выражения. Если требуется первое совпадение, используйте (firstmatch=да). Доступно специальное значение; EOF для вставки строки в конец файла.Если указанное регулярное выражение не имеет совпадений, будет использоваться КОНЕЦ_ФАЙЛА вместо. Если insertbefore установлено, значение по умолчанию EOF будет проигнорировано.Если регулярные выражения переданы как в regexp, так и в insertafter, insertafter учитывается только в том случае, если не найдено совпадение для regexp. Нельзя использовать с backrefs или insertbefore. |
| insertbefore строка |
| Используется с state=present. Если указано, строка будет вставлена перед последним совпадением указанного регулярного выражения. Если требуется первое совпадение, используйте firstmatch=yes. Доступно значение; BOF для вставки строки в начало файла.Если указанное регулярное выражение не имеет совпадений, строка будет вставлена в конец файла. Если регулярные выражения переданы как в regexp, так и в insertbefore, insertbefore учитывается только в том случае, если не найдено совпадение для regexp. Нельзя использовать с backrefs или insertafter. |
| line строка | Строка для вставки/замены в файле. Требуется для state=present. Если backrefs установлено, может содержать обратные ссылки, которые будут расширены с использованием regexp групп захвата, если regexp соответствует.Псевдонимы: значение | |
| mode строка | Разрешения, которые должен иметь результирующий файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую ноль, чтобы парсер Ansible YAML знал, что это восьмеричное число (например, 0644 или 01777) или заключить его в кавычки (например, '644' или '1777') так, чтобы Ansible получил строку и выполнил преобразование из строки в число.Передача Ansible числа без выполнения одного из этих правил приведет к десятичному числу, что приведет к неожиданным результатам. Начиная с Ansible 1.8, режим может быть указан как символический режим (например, u+rwx или u=rw,g=r,o=r). | |
| others строка | Все аргументы, принимаемые модулем file, также работают здесь. | |
| owner строка | Имя пользователя, который должен владеть файлом/каталогом, как в команде chown. | |
| path путь / обязательно | Файл, который нужно изменить. До Ansible 2.3 этот параметр был доступен только как dest, destfile и name. Псевдонимы: dest, destfile, name | |
| regexp строка | Регулярное выражение, которое нужно найти в каждой строке файла. Для state=present, шаблон для замены, если он найден. Будет заменена только последняя найденная строка.Для state=absent, шаблон строки(ок) для удаления.Если регулярное выражение не найдено, строка будет добавлена в файл в соответствии с настройками insertbefore или insertafter. При изменении строки регулярное выражение должно обычно соответствовать как начальному состоянию строки, так и ее состоянию после замены line, чтобы обеспечить идемпотентность.Использует регулярные выражения Python. См. http://docs.python.org/2/library/re.html. Псевдонимы: regex | |
| selevel строка | По умолчанию: "s0" | Часть уровня контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. Если установлено значение _default, будет использоваться часть политики level, если она доступна. |
| serole строка | Часть роли контекста файла SELinux. Если установлено значение _default, будет использоваться часть политики role, если она доступна. | |
| setype строка | Часть типа контекста файла SELinux. Если установлено значение _default, будет использоваться часть политики type, если она доступна. | |
| seuser строка | Часть пользователя контекста файла SELinux. По умолчанию используется политика system, где это применимо.Если установлено значение _default, будет использоваться часть политики user, если она доступна. | |
| state строка |
| Нужно ли, чтобы строка была там или нет. |
| unsafe_writes логическое значение |
| Влияет на то, когда использовать атомную операцию для предотвращения повреждения данных или несогласованного чтения из целевого файла. По умолчанию этот модуль использует атомные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов, но иногда системы настроены или просто неисправны таким образом, что это не позволяет сделать. Одним из примеров являются файлы, смонтированные в Docker, которые не могут быть обновлены атомарно изнутри контейнера и могут быть записаны только не безопасным способом. Этот параметр позволяет Ansible переходить к небезопасным методам обновления файлов, когда атомные операции завершаются ошибкой (однако это не заставляет Ansible выполнять небезопасные записи). ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных. |
| validate string | Команда валидации, которая выполняется перед копированием в место назначения. Путь к файлу для валидации передаётся через «%s», что обязательно, как показано в примерах ниже. Команда передаётся безопасно, поэтому такие оболочки как расширение и конвейеры работать не будут. |
Примечания
Примечание
- Начиная с Ansible 2.3, опция dest изменена на path по умолчанию, но dest по-прежнему работает.
См. также
См. также
- blockinfile – Вставка/обновление/удаление блока текста, окружённого маркерами строк
- Официальная документация модуля blockinfile.
- copy – Копирование файлов на удалённые узлы
- Официальная документация модуля copy.
- file – Управление файлами и свойствами файлов
- Официальная документация модуля file.
- replace – Замена всех вхождений определённой строки в файле с использованием обратной ссылки на регулярное выражение
- Официальная документация модуля replace.
- template – Шаблон файла для удалённого сервера
- Официальная документация модуля template.
- win_lineinfile – Обеспечение наличия определённой строки в файле или замена существующей строки с использованием обратной ссылки на регулярное выражение
- Официальная документация модуля win_lineinfile.
Примеры
# NOTE: Before 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
- name: Ensure SELinux is set to enforcing mode
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=enforcing
- name: Make sure group wheel is not in the sudoers configuration
lineinfile:
path: /etc/sudoers
state: absent
regexp: '^%wheel'
- name: Replace a localhost entry with our own
lineinfile:
path: /etc/hosts
regexp: '^127\.0\.0\.1'
line: 127.0.0.1 localhost
owner: root
group: root
mode: '0644'
- name: Ensure the default Apache port is 8080
lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
insertafter: '^#Listen '
line: Listen 8080
- name: Ensure we have our own comment added to /etc/services
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
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
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
lineinfile:
path: /etc/sudoers
state: present
regexp: '^%ADMIN ALL='
line: '%ADMIN ALL=(ALL) NOPASSWD: ALL'
validate: /usr/sbin/visudo -cf %s
Статус
- Этот модуль не гарантирует обратную совместимость. [превью]
- Этот модуль поддерживается Командой Ansible Core. [core]
Поддержка 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.9/modules/lineinfile_module.html