replace – Замена всех вхождений определённой строки в файле с использованием обратной ссылки на регулярное выражение.
Новая в версии 1.6.
Описание
- Этот модуль заменяет все вхождения шаблона в файле.
- Пользователь должен обеспечить идемпотентность, убедившись, что один и тот же шаблон никогда не будет совпадать ни с одной из проведённых заменой.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| after строка Добавлен в 2.4 | Если указано, то заменяться/удаляться будет только содержимое после этого совпадения. Может использоваться в сочетании с before. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим DOTALL, что означает, что специальный символ . может совпадать с переводами строк. | |
| attributes - Добавлен в 2.3 | Атрибуты, которые должен иметь файл или директория. Чтобы получить поддерживаемые флаги, обратитесь к справке man для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и отображается lsattr. = оператор предполагается по умолчанию, в противном случае + или - операторы необходимо включить в строку.Псевдонимы: attr | |
| backup логический |
| Создать резервный файл, включая информацию о времени создания, чтобы вы могли получить обратно исходный файл, если вы случайно его повредили. |
| before строка Добавлен в 2.4 | Если указано, то заменяться/удаляться будет только содержимое перед этим совпадением. Может использоваться в сочетании с after.Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим DOTALL, что означает, что специальный символ . может совпадать с переводами строк. | |
| encoding - Добавлен в 2.4 | По умолчанию: "utf-8" | Кодировка символов для чтения и записи файла. |
| group - | Имя группы, которая должна владеть файлом/директорией, как это передаётся в chown. | |
| 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 - / обязательно | Регулярное выражение, которое нужно искать в содержимом файла. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим MULTILINE, что означает, что ^ и $ соответствуют началу и концу файла, а также началу и концу соответственно каждой строки файла.Не использует режим DOTALL, что означает, что специальный символ . соответствует любому символу кроме переводов строк. Частой ошибкой является предположение, что набор символов с отрицанием, например, [^#], также не будет совпадать с переводами строк. Чтобы исключить переводы строк, они должны быть добавлены в набор, например [^#\\n].Обратите внимание, что начиная с Ansible 2, в задачах с короткими форматами любые последовательности escape должны быть экранированы обратным слешем, чтобы предотвратить их интерпретацию как escape последовательности строки. См. примеры. | |
| replace строка | Строка, которая должна заменить совпадения regexp. Может содержать обратные ссылки, которые будут расширены группами захвата regexp, если regexp соответствует. Если не установлено, совпадения удаляются полностью. Обратные ссылки могут быть использованы неоднозначно, например \1, или явно, как \g<1>. | |
| selevel - | По умолчанию: "s0" | Часть контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. _default функция работает как для seuser. |
| serole - | Роль контекста файла SELinux, _default функция работает как для seuser. | |
| setype - | Тип контекста файла SELinux, _default функция работает как для seuser. | |
| seuser - | Пользовательский контекст файла SELinux. По умолчанию будет использоваться системная политика, если применимо. Если установлено _default, будет использоваться user часть политики, если она доступна. | |
| unsafe_writes логический Добавлен в 2.2 |
| По умолчанию, этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несовместимые чтения из целевых файлов, но иногда системы настроены или просто сломаны так, что это не так. Одним примером являются файлы, смонтированные через docker, которые не могут быть обновлены атомарно изнутри контейнера и могут быть записаны только не безопасным способом. Этот параметр позволяет Ansible переключаться на небезопасные методы обновления файлов, когда атомарные операции терпят неудачу (однако, это не заставляет Ansible выполнять небезопасные записи). ВАЖНО! Небезопасные записи подвержены проблемам гонки и могут привести к повреждению данных. |
| validate - | Команда валидации, которая выполняется перед копированием в место назначения. Путь к файлу для валидации передаётся через '%s', который должен быть присутствующим, как в примере ниже. Команда передаётся безопасно, поэтому такие возможности оболочки, как расширение и трубы, не будут работать. |
Примечания
Примечание
- Начиная с Ansible 2.3, параметр dest был изменён на path по умолчанию, но dest всё ещё работает.
- Начиная с Ansible 2.7.10, совместное использование before и after работает корректно. Если вы полагались на предыдущее неверное поведение, вам, возможно, нужно будет скорректировать свои задачи. Подробнее см. https://github.com/ansible/ansible/issues/31354.
- Параметр follow был удалён в версии 2.5, потому что этот модуль изменяет содержимое файла, поэтому follow=no не имеет смысла.
Примеры
- name: Before Ansible 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
replace:
path: /etc/hosts
regexp: '(\s+)old\.host\.name(\s+.*)?$'
replace: '\1new.host.name\2'
- name: Replace after the expression till the end of the file (requires Ansible >= 2.4)
replace:
path: /etc/apache2/sites-available/default.conf
after: 'NameVirtualHost [*]'
regexp: '^(.+)$'
replace: '# \1'
- name: Replace before the expression till the begin of the file (requires Ansible >= 2.4)
replace:
path: /etc/apache2/sites-available/default.conf
before: '# live site config'
regexp: '^(.+)$'
replace: '# \1'
# Prior to Ansible 2.7.10, using before and after in combination did the opposite of what was intended.
# see https://github.com/ansible/ansible/issues/31354 for details.
# Replace between the expressions (requires >=2.4)
- replace:
path: /etc/hosts
after: '<VirtualHost [*]>'
before: '</VirtualHost>'
regexp: '^(.+)$'
replace: '# \1'
- name: Supports common file attributes
replace:
path: /home/jdoe/.ssh/known_hosts
regexp: '^old\.host\.name[^\n]*\n'
owner: jdoe
group: jdoe
mode: 0644
- name: Supports a validate command
replace:
path: /etc/apache/ports
regexp: '^(NameVirtualHost|Listen)\s+80\s*$'
replace: '\1 127.0.0.1:8080'
validate: '/usr/sbin/apache2ctl -f %s -t'
- name: Short form task (in ansible 2+) necessitates backslash-escaped sequences
replace: path=/etc/hosts regexp='\\b(localhost)(\\d*)\\b' replace='\\1\\2.localdomain\\2 \\1\\2'
- name: long form task does not
replace:
path: /etc/hosts
regexp: '\b(localhost)(\d*)\b'
replace: '\1\2.localdomain\2 \1\2'
- name: Explicitly specifying positional matched groups in replacement
replace:
path: /etc/ssh/sshd_config
regexp: '^(ListenAddress[ ]+)[^\n]+$'
replace: '\g<1>0.0.0.0'
- name: Explicitly specifying named matched groups
replace:
path: /etc/ssh/sshd_config
regexp: '^(?P<dctv>ListenAddress[ ]+)(?P<host>[^\n]+)$'
replace: '#\g<dctv>\g<host>\n\g<dctv>0.0.0.0'
Статус
- Гарантируется, что в этом модуле не будет обратных изменений в интерфейсе в будущем. [stableinterface]
- Этот модуль поддерживается сообществом Ansible. [community]
Авторы
- Evan Kaufman (@EvanK)
Подсказка
Если вы заметите какие-либо проблемы в этой документации, вы можете отредактировать этот документ, чтобы улучшить его.
© 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/replace_module.html