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 | Кодировка символов для чтения и записи файла. |
| group | Значение по умолчанию: None | Имя группы, которая должна владеть файлом/каталогом, как это передаётся команде chown. |
| mode | Значение по умолчанию: None | Режим файла или каталога. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами (например, 0644 или 01777). Опущение ведущей нули может привести к нежелательным результатам. Начиная с версии 1.8, режим может быть указан в символической форме (например, u+rwx или u=rw,g=r,o=r). |
| others | Все аргументы, принимаемые модулем file, также работают здесь. | |
| owner | Значение по умолчанию: None | Имя пользователя, который должен владеть файлом/каталогом, как это передаётся команде 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 совпадает. Если не задано, совпадения удаляются полностью. | |
| selevel | Значение по умолчанию: s0 | Часть контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. _default функция работает как для seuser. |
| serole | Значение по умолчанию: None | Часть контекста файла SELinux, _default функция работает как для seuser. |
| setype | Значение по умолчанию: None | Часть контекста файла SELinux, _default функция работает как для seuser. |
| seuser | Значение по умолчанию: None | Часть контекста файла SELinux. Будет по умолчанию использоваться системная политика, если применимо. Если установлено значение _default, будет использоваться часть политики user, если она доступна. |
| unsafe_writes (добавлен в 2.2) |
| Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несогласованные чтения из целевых файлов, но иногда системы настроены или сломаны таким образом, что это невозможно. Примером являются файлы, смонтированные в Docker; они не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом. Этот булевый параметр позволяет Ansible использовать небезопасные методы обновления файлов в тех случаях, когда нет другого выбора. Имейте в виду, что это подвержено гонкам и может привести к повреждению данных. |
| validate | Значение по умолчанию: None | Команда проверки, запускаемая перед копированием в место назначения. Путь к файлу для проверки передаётся через '%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, что означает, что разработчики этого модуля гарантируют, что не будут вноситься обратные несовместимые изменения в интерфейс.
Автор
- 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.5/modules/replace_module.html