Spec-Zone.ru › Ansible 2.11

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API