ansible.builtin.replace – Замена всех вхождений определённой строки в файле с использованием обратной ссылки на регулярное выражение
Примечание
Этот модуль является частью ansible-base и включён во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля replace даже без указания ключевого слова collections:. Несмотря на это, рекомендуется использовать FQCN для лёгкой ссылки на документацию модуля и для предотвращения конфликтов с другими коллекциями, которые могут иметь то же имя модуля.
Введено в версии 1.6: of ansible.builtin
Обзор
- Этот модуль заменит все вхождения шаблона в файле.
- Пользователь отвечает за обеспечение идемпотентности, убеждаясь, что один и тот же шаблон никогда не будет совпадать с какими-либо произведёнными заменами.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| after строка добавлен в 2.4 ansible.builtin | Если указано, то только содержимое после этого совпадения будет заменено/удалено. Может использоваться в сочетании с before.Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим DOTALL, что означает, что специальный символ . может соответствовать переходам на новую строку. | |
| attributes строка добавлен в 2.3 ansible.builtin | Атрибуты, которые должен иметь результирующий файл или каталог. Чтобы получить поддерживаемые флаги, см. справку man для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в отображении lsattr. Оператор = предполагается по умолчанию, в противном случае операторы + или - должны быть включены в строку.псевдонимы: attr | |
| backup логический |
| Создать резервную копию файла, включая информацию о временной метке, чтобы вы могли восстановить исходный файл, если вы каким-то образом неправильно его испортили. |
| before строка добавлен в 2.4 ansible.builtin | Если указано, то только содержимое перед этим совпадением будет заменено/удалено. Может использоваться в сочетании с after.Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим DOTALL, что означает, что специальный символ . может соответствовать переходам на новую строку. | |
| encoding строка добавлен в 2.4 ansible.builtin | По умолчанию: "utf-8" | Кодировка символов для чтения и записи файла. |
| group строка | Имя группы, которая должна владеть файлом/каталогом, как передается в chown. | |
| mode сырой | Разрешения, которые должен иметь результирующий файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую ноль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 0644 или 01777) или заключить его в кавычки (например, '644' или '1777') , чтобы Ansible получил строку и смог выполнить своё преобразование из строки в число.Если Ansible получит число без соблюдения одного из этих правил, в результате получится десятичное число, что приведёт к непредсказуемым результатам. Начиная с Ansible 1.8, режим может быть указан как символический режим (например, u+rwx или u=rw,g=r,o=r).Если mode не указано и целевой файл не существует, по умолчанию будет использоваться umask на системе при установке режима для вновь созданного файла.Если mode не указано и целевой файл существует, будет использован режим существующего файла.Указание mode является лучшим способом обеспечить создание файлов с правильными правами. См. CVE-2020-1736 для получения дополнительной информации. | |
| others строка | Все аргументы, принимаемые модулем ansible.builtin.file, также работают здесь. | |
| owner строка | Имя пользователя, который должен владеть файлом/каталогом, как передается в chown. | |
| path путь / обязательно | Файл для изменения. До Ansible 2.3 этот параметр был доступен только как dest, destfile и name. псевдонимы: dest, destfile, name | |
| regexp строка / обязательно | Регулярное выражение, которое необходимо найти в содержимом файла. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим MULTILINE, что означает, что ^ и $ соответствуют началу и концу файла, а также началу и концу соответственно каждой строки файла.Не использует режим DOTALL, что означает, что специальный символ . соответствует любому символу кроме переходов на новую строку. Частая ошибка заключается в предположении, что отрицательный набор символов, такой как [^#], также не будет соответствовать переходам на новую строку.Для исключения переходов на новую строку их необходимо добавить в набор, как в [^#\n].Обратите внимание, что, начиная с Ansible 2.0, задачи короткой формы должны иметь все escape-последовательности с обратной косой чертой, чтобы предотвратить их интерпретацию как escape-последовательности символьных литералов. См. примеры. | |
| replace строка | Строка для замены совпадений regexp. Может содержать обратные ссылки, которые будут расширены с группами захвата regexp, если regexp соответствует. Если не установлено, совпадения удаляются полностью. Обратные ссылки могут быть использованы неоднозначно, как в \1, или явно, как в \g<1>. | |
| selevel строка | Часть уровня контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range.При установке значения _default, будет использоваться часть политики level, если она доступна. | |
| serole строка | Часть роли контекста файла SELinux. При установке значения _default, будет использоваться часть политики role, если она доступна. | |
| setype строка | Часть типа контекста файла SELinux. При установке значения _default, будет использоваться часть политики type, если она доступна. | |
| seuser строка | Часть пользователя контекста файла SELinux. По умолчанию используется политика system, где это возможно.При установке значения _default, будет использоваться часть политики user, если она доступна. | |
| unsafe_writes логический добавлен в 2.2 ansible.builtin |
| Влияние на то, когда использовать атомарную операцию, чтобы предотвратить повреждение данных или несогласованные чтения из целевого файла. По умолчанию этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несогласованные чтения из целевых файлов, но иногда системы настроены или просто неисправны таким образом, что это невозможно. Один пример — смонтированные в 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 был удалён в Ansible 2.5, потому что этот модуль изменяет содержимое файла, поэтому follow=no не имеет смысла.
- Поддерживает
check_mode.
Примеры
- name: Before Ansible 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
ansible.builtin.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)
ansible.builtin.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)
ansible.builtin.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.
- name: Replace between the expressions (requires Ansible >= 2.4)
ansible.builtin.replace:
path: /etc/hosts
after: '<VirtualHost [*]>'
before: '</VirtualHost>'
regexp: '^(.+)$'
replace: '# \1'
- name: Supports common file attributes
ansible.builtin.replace:
path: /home/jdoe/.ssh/known_hosts
regexp: '^old\.host\.name[^\n]*\n'
owner: jdoe
group: jdoe
mode: '0644'
- name: Supports a validate command
ansible.builtin.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
ansible.builtin.replace: path=/etc/hosts regexp='\\b(localhost)(\\d*)\\b' replace='\\1\\2.localdomain\\2 \\1\\2'
- name: Long form task does not
ansible.builtin.replace:
path: /etc/hosts
regexp: '\b(localhost)(\d*)\b'
replace: '\1\2.localdomain\2 \1\2'
- name: Explicitly specifying positional matched groups in replacement
ansible.builtin.replace:
path: /etc/ssh/sshd_config
regexp: '^(ListenAddress[ ]+)[^\n]+$'
replace: '\g<1>0.0.0.0'
- name: Explicitly specifying named matched groups
ansible.builtin.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'
Авторы
- Evan Kaufman (@EvanK)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/replace_module.html