Spec-Zone.ru › Ansible 2.9

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

Spec-Zone.ru

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