replace - Замена всех вхождений определённой строки в файле с использованием обратной ссылки на регулярное выражение.
Новая версия 1.6.
Обзор
- Этот модуль заменяет все вхождения шаблона в файле.
- Пользователь должен сам следить за идемпотентностью, гарантируя, что один и тот же шаблон никогда не будет соответствовать никаким сделанным заменам.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| after (добавлен в 2.4) | Если указано, строка после замены/удаления будет начинаться. Может использоваться в сочетании с before. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. | |
| attributes (добавлен в 2.3) | Атрибуты, которые должен иметь файл или каталог. Чтобы получить поддерживаемые флаги, см. страницу руководства для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и отображаемый lsattr. псевдонимы: attr | |
| backup bool |
| Создать резервную копию файла, включая информацию о времени создания, чтобы вы могли вернуть исходный файл, если каким-то образом неправильно его перезаписали. |
| before (добавлен в 2.4) | Если указано, строка перед замены/удалением будет присутствовать. Может использоваться в сочетании с after. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. | |
| encoding (добавлен в 2.4) | По умолчанию: "utf-8" | Кодировка символов для чтения и записи файла. |
| group | Имя группы, которая должна владеть файлом/каталогом, как это подаётся в chown. | |
| mode | Режим файла или каталога. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны указать ведущую нуль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 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 обязательно | Регулярное выражение для поиска в содержимом файла. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Использует режим MULTILINE, что означает ^ и $ соответствуют началу и концу файла, а также началу и концу соответственно каждой строки файла.Не использует DOTALL, что означает, что специальный символ . соответствует любому символу кроме символов новой строки. Частая ошибка заключается в том, что предполагается, что отрицательный набор символов, например, [^#], также не будет соответствовать символам новой строки. Чтобы исключить символы новой строки, их необходимо добавить в набор, как в [^#\n].
Обратите внимание, что начиная с Ansible 2, в задачах короткой формы любые последовательности символов обратного слэша должны быть экранированы обратным слэшем, чтобы предотвратить их интерпретацию как экранированных последовательностей в строке. См. примеры. | |
| replace | Строка для замены совпадений regexp. Может содержать обратные ссылки, которые будут расширены с группами захвата regexp, если regexp соответствует. Если не указано, совпадения полностью удаляются. | |
| selevel | По умолчанию: "s0" | Часть уровня контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. _default функция работает так же, как и для seuser. |
| serole | Часть роли контекста файла SELinux, _default функция работает так же, как и для seuser. | |
| setype | Часть типа контекста файла SELinux, _default функция работает так же, как и для seuser. | |
| seuser | Часть пользователя контекста файла SELinux. Будет использовать политику системы по умолчанию, если применимо. Если установлено в _default, будет использована часть политики user, если она доступна. | |
| unsafe_writes bool (добавлен в 2.2) |
| Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несогласованные чтения из целевых файлов. Иногда системы настроены или просто сломаны таким образом, что это не возможно. Один из примеров - смонтированные в Docker файлы; они не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом. Этот булевый параметр позволяет Ansible перейти к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Имейте в виду, что это подвержено гонкам и может привести к повреждению данных. |
| validate | Команда проверки, которая должна быть запущена перед копированием в нужное место. Путь к проверяемому файлу передаётся через «%s», который должен быть присутствовать, как в примере ниже. Команда передаётся безопасно, поэтому такие оболочечные функции, как расширение и конвейеры, не будут работать. |
Примечания
Примечание
- Начиная с Ansible 2.3, параметр dest изменён на path по умолчанию, но dest всё ещё работает.
- Параметр follow удалён в версии 2.5, так как этот модуль изменяет содержимое файла, поэтому follow=no не имеет смысла.
Примеры
# Before 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'
backup: yes
# Replace after the expression till the end of the file (requires >=2.4)
- replace:
path: /etc/hosts
regexp: '(\s+)old\.host\.name(\s+.*)?$'
replace: '\1new.host.name\2'
after: 'Start after line.*'
backup: yes
# Replace before the expression till the begin of the file (requires >=2.4)
- replace:
path: /etc/hosts
regexp: '(\s+)old\.host\.name(\s+.*)?$'
replace: '\1new.host.name\2'
before: 'Start before line.*'
backup: yes
# Replace between the expressions (requires >=2.4)
- replace:
path: /etc/hosts
regexp: '(\s+)old\.host\.name(\s+.*)?$'
replace: '\1new.host.name\2'
after: 'Start after line.*'
before: 'Start before line.*'
backup: yes
- replace:
path: /home/jdoe/.ssh/known_hosts
regexp: '^old\.host\.name[^\n]*\n'
owner: jdoe
group: jdoe
mode: 0644
- 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: dest=/etc/hosts regexp='\\b(localhost)(\\d*)\\b' replace='\\1\\2.localdomain\\2 \\1\\2'
- name: long form task does not
replace:
dest: /etc/hosts
regexp: '\b(localhost)(\d*)\b'
replace: '\1\2.localdomain\2 \1\2'
Статус
Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют, что не будут вноситься обратные несовместимые изменения в интерфейс.
Техническое обслуживание
Этот модуль помечен как community, что означает, что он поддерживается сообществом Ansible. Дополнительную информацию см. в разделе Техническое обслуживание модулей и поддержка.
Список других модулей, также поддерживаемых сообществом Ansible, см. в этом разделе.
Автор
- 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.6/modules/replace_module.html