Возможная строка изменения в файле

Обновлено: 04.07.2024

Как редактировать однострочный текст в файле с помощью модуля Ansible lineinfile.

Сегодня мы поговорим о том, как редактировать однострочный текст в файле с помощью Ansible. Линейный файл модуля Ansible. Меня зовут Лука Бертон, и добро пожаловать на сегодняшний выпуск Ansible Pilot

строка_файла модуля Ansible

Сегодня мы говорим о модуле Ansible lineinfile. Полное имя ansible.builtin.lineinfile означает, что это часть набора модулей, «встроенных» в ansible и поставляемых вместе с ним. Это довольно стабильный модуль, который существует уже много лет и поддерживает большое количество операционных систем. Вы можете вставлять, обновлять и удалять одну строку текста в файле.

Основные параметры

  • path string — путь к файлу
  • строка строка - текст
  • insertafter/insertbefore string – конец файла/регулярное выражение
  • validate string — команда проверки
  • create boolean — создать, если не существует
  • состояние строка - присутствует/отсутствует
  • владелец/группа/режим — разрешение
  • setype/seuser/selevel — SELinux

Этот модуль имеет некоторые параметры для выполнения любых задач. Требуется только «путь», где вы указываете путь файловой системы к файлу, который собираетесь редактировать. «строка» — это строка текста, которую мы хотели бы вставить в файл, легко! По умолчанию текст будет вставлен в конец файла, но мы можем персонализировать его в определенной позиции с помощью «insertafter» или «insertbefore». Если есть какой-либо инструмент для проверки файла, мы могли бы указать его в параметре проверки, что очень полезно для файлов конфигурации. Если файл не существует, мы также можем его «создать»! Обычно мы хотели бы вставить текстовую строку, но мы также можем удалить, используя состояние в сочетании с отсутствующим параметром. Позвольте мне также подчеркнуть, что мы также можем указать некоторые разрешения или свойство SELinux.

Вы готовы испачкать руки? Давайте перейдем к живой демонстрации использования модуля lineinfile в учебнике Ansible.

Подведение итогов

Теперь вы лучше знаете линейный файл модуля Ansible и можете успешно использовать его в своем плейбуке. Подпишитесь на канал YouTube, Medium, Website и Twitter, чтобы не пропустить следующий эпизод Ansible Pilot.

Академия

Изучите технологию автоматизации Ansible на реальных примерах из моего

Атрибуты, которыми должен обладать файл или каталог. Чтобы получить поддерживаемые флаги, просмотрите справочную страницу для chattr в целевой системе. Эта строка должна содержать атрибуты в том же порядке, в котором отображается lsattr.

Используется с state=present . Если установлено, строка может содержать обратные ссылки (как позиционные, так и именованные), которые будут заполнены, если регулярное выражение совпадает. Этот флаг немного меняет работу модуля; insertbefore и insertafter будут игнорироваться, и если регулярное выражение нигде в файле не совпадает, файл останется без изменений. Если регулярное выражение совпадает, последняя совпадающая строка будет заменена расширенным строковым параметром.

Создайте файл резервной копии, включив в него информацию о временной метке, чтобы вы могли вернуть исходный файл, если вы каким-то образом стерли его неправильно.

Используется с state=present . Если указано, файл будет создан, если он еще не существует. По умолчанию произойдет сбой, если файл отсутствует.

Используется с state=present . Если указано, строка будет вставлена ​​после последнего совпадения указанного регулярного выражения. Доступно специальное значение; EOF для вставки строки в конец файла. Если указанное регулярное выражение не имеет совпадений, вместо него будет использоваться EOF. Нельзя использовать с обратными ссылками .

Используется с state=present . Если указано, строка будет вставлена ​​перед последним соответствием заданному регулярному выражению. Доступно значение; BOF для вставки строки в начало файла. Если заданному регулярному выражению нет совпадений, строка будет вставлена ​​в конец файла. Нельзя использовать с обратными ссылками .

Обязательно для состояния=присутствует . Строка для вставки/замены в файл. Если установлены обратные ссылки, они могут содержать обратные ссылки, которые будут расширены с помощью групп захвата регулярных выражений, если регулярное выражение совпадает.

Режим, которым должен быть файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы на самом деле представляют собой восьмеричные числа (например, 0644). Отсутствие начального нуля, вероятно, приведет к неожиданным результатам. Начиная с версии 1.8 режим может быть указан как символьный режим (например, u+rwx или u=rw,g=r,o=r ).

Уровень — часть контекста файла SELinux. Это атрибут MLS/MCS, иногда называемый диапазоном. Функция _default работает так же, как и для seuser.

Пользовательская часть контекста файла SELinux. По умолчанию используется системная политика, если применимо. Если установлено значение _default , будет использоваться пользовательская часть политики, если она доступна.

Обычно этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов, иногда системы настроены или просто повреждены таким образом, чтобы это предотвратить. Одним из примеров являются файлы, смонтированные в Docker, их нельзя обновить атомарно, и это можно сделать только небезопасным способом.

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

Команда проверки для запуска перед копированием на место. Путь к файлу для проверки передается через «%s», который должен присутствовать, как в примере ниже. Команда передается безопасно, поэтому функции оболочки, такие как расширение и каналы, не будут работать.

Ansible предоставляет несколько способов замены строки, целой строки или слов, соответствующих определенному шаблону. Для этого можно использовать два модуля: модуль replace и встроенный модуль. Мы углубимся и рассмотрим несколько примеров того, как эти модули можно использовать в плейбуке для замены строк и строк.

Замена строки из файла с помощью Ansible

Модуль замены заменяет все экземпляры определенной строки в файле.

Если строка не существует, то ничего не будет сделано и ошибка не появится. Ansible просто возвращает, что ничего не изменилось. Для успешной замены строк в файле необходимы три параметра:

  • Расположение файла, обозначенное директивой ‘ path ’.
  • Директива ‘ regexp ‘ – строка, которую нужно заменить или изменить. Кроме того, вы можете передать любое регулярное выражение Python.
  • Директива « replace » — это заменяющее слово или строка.

Вот как выглядит синтаксис модуля replace:

У меня есть образец текстового файла с именем sample.txt, содержимое которого приведено ниже.

Unix – это бесплатная система с открытым исходным кодом, используемая разработчиками и любителями настольных компьютеров. Благодаря усилиям Linux Torvalds Unix стала самой популярной системой с открытым исходным кодом.

Цель состоит в том, чтобы заменить строку « Unix » на « Linux ». Для этого мы создадим файл playbook, как показано на рисунке.

Затем мы запустим playbook.

Из вывода ясно видно, что строка « Unix » была заменена на « Linux »

Ansible- Playbook-replace-strings

Возьмем другой пример.

Мы создадим файл playbook change_hostname.yml, который будет выглядеть следующим образом:

Change- hostname-with-ansible

При запуске плейбука имя доменного имени изменяется соответствующим образом, как показано на рисунке:

Run-Playbook-to-change-hostname-Ansible

Модуль Ansible lineinfile

Встроенный модуль Ansible можно использовать по-разному. Его можно использовать для вставки новой строки, удаления или изменения существующей строки из файла. Мы собираемся более подробно рассмотреть каждый из них.

Вставка строки в конец файла (EOF)

Для начала мы начнем с изучения того, как создать строку, если ее нет в файле. Начните с указания пути к файлу, в который вы собираетесь добавить строку, используя атрибут пути. Это заменило параметр dest, который использовался в Ansible 2.3 и более ранних версиях.

Затем укажите строку, которую нужно добавить в конец файла. В данном случае мы добавляем новую запись в файл /etc/hosts. Если строка уже существует, Ansible пропустит ее добавление и никаких изменений не будет.

Параметр state указывает Ansible записать строку в файл, а параметр create указывает Ansible создать файл, если его еще нет. Это файл playbook update_ip.yml.

Ansible- playbook-inline-usage

При запуске файла playbook обратите внимание на добавление новой записи или строки.

 Inline-Playbook-execution-result

Вставка строки до или после

Иногда может потребоваться вставить новую строку непосредственно перед или после раздела файла, но не всегда в конце строки.Для этого вам нужно использовать директивы insertafter и insertbefore.

В приведенном ниже плейбуке мы добавляем строку для указания предпочтительного файла инвентаризации сразу после раздела [defaults] в файле ansible.cfg. Мы экранировали [], так как это символы регулярного выражения.

Insert-Line-after-matching-pattern-with-ansible

Удалить строку с помощью модуля lineinfile

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

Remove-Line-with-Ansible-playbook-execution

Еще один способ удалить строку – использовать параметр regexp. Например, приведенный ниже плейбук удаляет все строки в файле, начинающиеся со слова Unix.

В этой статье все, надеюсь, она поможет понять, как заменить строку и строки с помощью Ansible.

Также прочтите: 9 примеров команд tee в Linux

Ansible заменить строку в файле

Ansible Replace Line in File — это модуль, предоставляемый в пакете Ansible для замены шаблона строки в файле. Для среды Linux, где у нас есть все в виде файла. Становится очень важным управлять всеми важными файлами конфигурации, библиотек и скриптов. Это делается администратором путем регулярного обновления всех таких файлов всеми обновлениями в инфраструктуре. Ansible предоставляет такие модули, как replace, blockinfile, copy, template и lineinfile для работы с такими ситуациями. Выбор модуля зависит от объема задач и количества итераций, связанных с ними. Поэтому сначала следует оценить, а затем выбрать модуль для работы.

Работа Ansible Replace Line in File

В Ansible, как и в любом другом модуле, где у нас есть набор доступных параметров и возможных допустимых значений для них, в модуле Ansible Replace у нас есть то же самое.

Веб-разработка, языки программирования, тестирование программного обеспечения и другое

Список ниже включает многие важные параметры, если не все, которые можно использовать в сочетании для получения желаемых результатов:

Примеры замены строки Ansible в файле

Мы увидим несколько примеров, но прежде чем перейти к ним, мы сначала разберемся в нашей лаборатории, которую мы использовали для целей тестирования. Здесь у нас есть управляющий сервер Ansible с именем ansible-controller и два удаленных хоста с именами host-one и host-two. Мы создадим плейбуки и запустим команды ansible на узле ansible-controller и посмотрим результаты на удаленных хостах.

В этом примере у нас есть образец файла, в котором мы пытаемся заменить строку с помощью Ansible. Для этого у нас есть плейбук, как показано ниже, где мы используем модули замены и отладки Ansible для замены и отображения выходных данных.

Код:

---
- hosts: все,
gather_facts: no,
задачи:
- name: Здесь мы проверяем содержимое файла /var/tmp/sample_file на целевых машинах .
shell: 'cat /var/tmp/sample_file'
register: var_output
- name: Вот содержимое файла /var/tmp/sample_file на целевых машинах перед заменой
debug:
var: var_output.stdout_lines
- name: Здесь мы заменяем шаблон строки
replace:
path: /var/tmp/sample_file
regexp: ' Hello World'
replace: "Namaste To All"
- name: Здесь мы снова проверяем содержимое файла /var/tmp/sample_file на целевых машинах.
shell: 'cat /var/tmp/sample_file'
register: var_output_1
- name: Вот содержимое файла /var/tmp/sample_file на целевых машинах после замены
отладка:
var: var_output_1.stdout_lines

Теперь выполняем этот плейбук, как показано ниже:

У нас есть вывод ниже, где мы видим, что Hello World заменен на Namaste To All.

Обучение Ansible (1 курс, 4 проекта) 1 онлайн-курсы | 4 практических проекта | 8+ часов | Поддающийся проверке сертификат об окончании | Пожизненный доступ
4,5 (5704 оценки)

Читайте также: