Spec-Zone.ru › Ansible 2.8

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

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

Описание

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

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
after
строка
добавлен в 2.4
Если указано, то заменяться/удаляться будет только содержимое после этого соответствия.
Можно использовать в сочетании с before.
Использует регулярные выражения Python; см. http://docs.python.org/2/library/re.html.
Использует режим DOTALL, что означает, что специальный символ . может соответствовать переходам на новую строку.
attributes
строка
добавлен в 2.3
Атрибуты, которые должен иметь результирующий файл или директория.
Для получения поддерживаемых флагов обратитесь к странице руководства для 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, задачи в сокращённой форме должны иметь любые escape-последовательности с обратным слешем, чтобы предотвратить их интерпретацию как escape-последовательностей литералов строк. См. примеры.
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
логическое
добавлен в 2.2
    Варианты:
  • нет ←
  • да
Влияние на использование атомарной операции для предотвращения повреждения данных или несовместимых чтений из целевого файла.
По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несовместимых чтений из целевых файлов, но иногда системы настроены или просто сломаны таким образом, что это невозможно. Одним из примеров являются файлы, смонтированные в 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.8/modules/replace_module.html

Spec-Zone.ru

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