Spec-Zone.ru › Ansible 2.10

ansible.builtin.replace – Замена всех вхождений определенной строки в файле с использованием обратной ссылки на регулярное выражение

Примечание

Этот модуль является частью ansible-base и включён во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля replace, даже не указывая ключевое слово collections:. Несмотря на это, мы рекомендуем использовать FQCN для удобной ссылки на документацию модуля и для предотвращения конфликтов с другими коллекциями, которые могут иметь такое же имя модуля.

Добавлен в версии 1.6: of ansible.builtin

  • Описание
  • Параметры
  • Примечания
  • Примеры

Описание

  • Этот модуль заменит все вхождения шаблона в файле.
  • Пользователь отвечает за поддержание идемпотентности, гарантируя, что один и тот же шаблон никогда не будет совпадать ни с какими выполненными заменами.

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
after
строка
добавлен в 2.4 of ansible.builtin
Если указано, то будет заменено/удалено только содержимое после этого совпадения.
Может использоваться в сочетании с before.
Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html.
Использует режим DOTALL, что означает, что символ . может совпадать с новой строкой.
attributes
строка
добавлен в 2.3 of ansible.builtin
Атрибуты, которые должны иметь результирующий файл или директория.
Для получения поддерживаемых флагов см. справку по chattr на целевой системе.
Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr.
Оператор = предполагается по умолчанию, в противном случае необходимо включить операторы + или - в строку.

псевдонимы: attr
backup
логическое значение
    Варианты:
  • нет ←
  • да
Создать резервную копию файла, включая информацию о времени, чтобы вы могли получить исходный файл, если вы каким-то образом неправильно его перезаписали.
before
строка
добавлен в 2.4 of ansible.builtin
Если указано, то будет заменено/удалено только содержимое перед этим совпадением.
Может использоваться в сочетании с after.
Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html.
Использует DOTALL, что означает, что символ . может совпадать с новой строкой.
encoding
строка
добавлен в 2.4 of 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).
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, в задачах с коротким именем все последовательности с обратным слэшем должны быть экранированы обратным слэшем, чтобы предотвратить их интерпретацию как экранированных символов строки. См. примеры.
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 of 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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/ansible/builtin/replace_module.html

Spec-Zone.ru

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