replace – Замена всех вхождений определённой строки в файле с использованием обратной ссылки в регулярном выражении
Описание
- Этот модуль заменит все вхождения шаблона в файле.
- Пользователь отвечает за поддержание идемпотентности, гарантируя, что один и тот же шаблон никогда не будет соответствовать каким-либо сделанным заменам.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| after строка добавлен в 2.4 | Если указано, будет заменено/удалено только содержимое после этого совпадения. Может использоваться в сочетании с before. Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Использует режим DOTALL, что означает, что символ . может соответствовать символам новой строки. | |
| attributes строка | Атрибуты, которые должны иметь результирующий файл или каталог. Для получения поддерживаемых флагов см. страницу руководства для 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 число без одного из этих правил, оно будет интерпретировано как десятичное число, что приведёт к неожиданным результатам. Начиная с Ansible 1.8, режим может быть указан в символическом формате (например, u+rwx или u=rw,g=r,o=r). | |
| others строка | Все аргументы, принимаемые модулем 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, в коротких задачах любые последовательности обратного слеша должны быть экранированы, чтобы предотвратить их интерпретацию как экранированные символы строки. См. примеры. | |
| replace строка | Строка для замены совпадений regexp. Может содержать обратные ссылки, которые будут расширены с группами захвата regexp, если regexp совпадёт. Если не задано, совпадения удаляются полностью. Обратные ссылки могут быть использованы неоднозначно, как в \1, или явно, как в \g<1>. | |
| selevel строка | По умолчанию: "s0" | Часть контекста SELinux файла. Это атрибут MLS/MCS, иногда известный как range. Если установлено значение _default, будет использоваться часть политики level, если она доступна. |
| serole строка | Часть контекста SELinux файла. Если установлено значение _default, будет использоваться часть политики role, если она доступна. | |
| setype строка | Часть контекста SELinux файла. Если установлено значение _default, будет использоваться часть политики type, если она доступна. | |
| seuser строка | Часть контекста SELinux файла. По умолчанию используется политика system, где это применимо.Если установлено значение _default, будет использоваться часть политики user, если она доступна. | |
| unsafe_writes логический |
| Влияет на использование атомарных операций для предотвращения повреждения данных или несогласованных чтений из целевого файла. По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованных чтений из целевых файлов, но иногда системы настроены или просто не работают таким образом, что это не возможно. Одним из примеров являются файлы, смонтированные в 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 не имеет смысла.
Примеры
- 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.
- name: Replace between the expressions (requires Ansible >= 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.9/modules/replace_module.html