replace - Замена всех вхождений определённой строки в файле с использованием обратной ссылки на регулярное выражение.
Новая в версии 1.6.
Описание
- Этот модуль заменит все вхождения шаблона в файле.
- Пользователь обязан обеспечить идемпотентность, убедившись, что тот же шаблон никогда не будет соответствовать ни одной произведённой замене.
Параметры
| параметр | обязателен | по умолчанию | выбор | комментарии |
|---|---|---|---|---|
| after (добавлен в 2.4)
| нет | Если указано, строка после замены/удаления будет началом. Может использоваться в сочетании с before. Используются регулярные выражения Python; см. http://docs.python.org/2/library/re.html. | ||
| attributes (добавлен в 2.3)
| нет | None | Атрибуты файла или каталога. Чтобы узнать поддерживаемые флаги, посмотрите страницу справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr. псевдонимы: attr | |
| backup | нет | нет |
| Создать резервную копию файла, включая информацию о времени, чтобы вы могли получить исходный файл, если вы каким-то образом неправильно его перезаписали. |
| before (добавлен в 2.4)
| нет | Если указано, строка перед заменой/удалением будет началом. Может использоваться в сочетании с after. Используются регулярные выражения Python; см. http://docs.python.org/2/library/re.html. | ||
| encoding (добавлен в 2.4)
| нет | utf-8 | Кодировка символов для чтения и записи файла. | |
| follow (добавлен в 1.9)
| нет | нет |
| Этот флаг указывает, что должны быть пройдены ссылки на файловую систему, если они существуют. |
| group | нет | Имя группы, которая должна владеть файлом/каталогом, как это передается в chown. | ||
| 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 | да | Регулярное выражение, которое нужно искать в содержимом файла. Используются регулярные выражения 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 (добавлен в 2.2)
| нет |
| Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несовместимые чтения из целевых файлов, иногда системы настроены или просто сломаны таким образом, что это невозможно. Одним из примеров являются файлы, смонтированные в docker, они не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом. Этот булев параметр позволяет Ansible перейти к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Помните, что это подвержено проблемам гонки и может привести к повреждению данных. | |
| validate | нет | None | Команда валидации, которая должна быть запущена перед копированием в место назначения. Путь к файлу для валидации передаётся через '%s', который должен присутствовать, как показано в примере ниже. Команда передаётся безопасно, поэтому такие возможности оболочки, как расширение и pipes, не будут работать. |
Примеры
# 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'
Примечания
Примечание
- Начиная с Ansible 2.3, параметр dest был изменён на path по умолчанию, но dest также по-прежнему работает.
Статус
Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют, что не будут вноситься несовместимые изменения в интерфейс.
Для получения помощи в разработке модулей, если вы так пожелаете, пожалуйста, прочитайте Информацию о сообществе и сотрудничестве, Тестирование 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/replace_module.html