Spec-Zone.ru › Ansible 2.4

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

Новая в версии 1.6.

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

Описание

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

Параметры

параметр обязателен по умолчанию выбор комментарии
after
(добавлен в 2.4)
нет
Если указано, строка после замены/удаления будет началом. Может использоваться в сочетании с before. Используются регулярные выражения Python; см. http://docs.python.org/2/library/re.html.
attributes
(добавлен в 2.3)
нет None
Атрибуты файла или каталога. Чтобы узнать поддерживаемые флаги, посмотрите страницу справки для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и в выводе lsattr.
псевдонимы: attr
backup
нет нет
  • да
  • нет
Создать резервную копию файла, включая информацию о времени, чтобы вы могли получить исходный файл, если вы каким-то образом неправильно его перезаписали.
before
(добавлен в 2.4)
нет
Если указано, строка перед заменой/удалением будет началом. Может использоваться в сочетании с after. Используются регулярные выражения Python; см. http://docs.python.org/2/library/re.html.
encoding
(добавлен в 2.4)
нет utf-8
Кодировка символов для чтения и записи файла.
follow
(добавлен в 1.9)
нет нет
  • да
  • нет
Этот флаг указывает, что должны быть пройдены ссылки на файловую систему, если они существуют.
group
нет
Имя группы, которая должна владеть файлом/каталогом, как это передается в chown.
mode
нет
Режим файла или каталога. Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами (например, 0644). Пропуск ведущего нуля, скорее всего, приведёт к нежелательным результатам. С версии 1.8 режим можно указать в символьной форме (например, u+rwx или u=rw,g=r,o=r).
others
нет
Все аргументы, принимаемые модулем file, также работают здесь.
owner
нет
Имя пользователя, который должен владеть файлом/каталогом, как это передается в chown.
path
да
Файл для изменения.
До версии 2.3 этот параметр был доступен только как dest, destfile и name.
псевдонимы: dest, destfile, name
regexp
да
Регулярное выражение, которое нужно искать в содержимом файла. Используются регулярные выражения Python; см. http://docs.python.org/2/library/re.html. Используется режим MULTILINE, что означает, что ^ и $ соответствуют началу и концу файла, а также соответственно началу и концу каждой строки файла.
Не используется режим DOTALL, что означает, что специальный символ . соответствует любому символу кроме новой строки. Распространённая ошибка заключается в том, что отрицательный набор символов, например, [^#], также не будет соответствовать новой строке. Чтобы исключить новые строки, их нужно добавить в набор, например, [^#\n].
Обратите внимание, что начиная с Ansible 2, задачи короткой формы должны иметь любые последовательности экранирования обратной косой чертой, чтобы предотвратить их интерпретацию как экранирования символов строки. См. примеры.
replace
нет
Строка для замены совпадений regexp. Может содержать обратные ссылки, которые будут расширены с группами захвата regexp, если regexp совпадает. Если не задано, совпадения удаляются полностью.
selevel
нет s0
Часть контекста файла SELinux. Это атрибут MLS/MCS, иногда известный как range. Функция _default работает, как и для seuser.
serole
нет
Часть контекста файла SELinux, функция _default работает, как и для seuser.
setype
нет
Часть контекста файла SELinux, функция _default работает, как и для seuser.
seuser
нет
Часть контекста файла SELinux. Будет по умолчанию соответствовать политике системы, если применимо. Если задано _default, будет использоваться часть политики user, если она доступна.
unsafe_writes
(добавлен в 2.2)
нет
  • да
  • нет
Обычно этот модуль использует атомарные операции, чтобы предотвратить повреждение данных или несовместимые чтения из целевых файлов, иногда системы настроены или просто сломаны таким образом, что это невозможно. Одним из примеров являются файлы, смонтированные в docker, они не могут быть обновлены атомарно и могут быть обновлены только небезопасным способом.
Этот булев параметр позволяет Ansible перейти к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Помните, что это подвержено проблемам гонки и может привести к повреждению данных.
validate
нет None
Команда валидации, которая должна быть запущена перед копированием в место назначения. Путь к файлу для валидации передаётся через '%s', который должен присутствовать, как показано в примере ниже. Команда передаётся безопасно, поэтому такие возможности оболочки, как расширение и pipes, не будут работать.

Примеры

# Before 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'
    backup: yes

# Replace after the expression till the end of the file (requires >=2.4)
- replace:
    path: /etc/hosts
    regexp: '(\s+)old\.host\.name(\s+.*)?$'
    replace: '\1new.host.name\2'
    after: 'Start after line.*'
    backup: yes

# Replace before the expression till the begin of the file (requires >=2.4)
- replace:
    path: /etc/hosts
    regexp: '(\s+)old\.host\.name(\s+.*)?$'
    replace: '\1new.host.name\2'
    before: 'Start before line.*'
    backup: yes

# Replace between the expressions (requires >=2.4)
- replace:
    path: /etc/hosts
    regexp: '(\s+)old\.host\.name(\s+.*)?$'
    replace: '\1new.host.name\2'
    after: 'Start after line.*'
    before: 'Start before line.*'
    backup: yes

- replace:
    path: /home/jdoe/.ssh/known_hosts
    regexp: '^old\.host\.name[^\n]*\n'
    owner: jdoe
    group: jdoe
    mode: 0644

- 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: dest=/etc/hosts regexp='\\b(localhost)(\\d*)\\b' replace='\\1\\2.localdomain\\2 \\1\\2'

- name: long form task does not
  replace:
    dest: /etc/hosts
    regexp: '\b(localhost)(\d*)\b'
    replace: '\1\2.localdomain\2 \1\2'

Примечания

Примечание

  • Начиная с Ansible 2.3, параметр dest был изменён на path по умолчанию, но dest также по-прежнему работает.

Статус

Этот модуль помечен как stableinterface, что означает, что разработчики этого модуля гарантируют, что не будут вноситься несовместимые изменения в интерфейс.

Для получения помощи в разработке модулей, если вы так пожелаете, пожалуйста, прочитайте Информацию о сообществе и сотрудничестве, Тестирование Ansible и Разработка модулей.

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/replace_module.html

Spec-Zone.ru

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