Ansible – это широко используемый инструмент автоматизации, который может управлять сотнями узлов одновременно. У Ansible есть много отличных функций, и одной из них является его способность управлять одной строкой в файле на удаленных узлах с использованием модуля Ansible lineinfile Ansible lineinfile module.
Модуль Ansible lineinfile – это модуль, выполняющий различные действия с одной строкой в файле, такие как замена строки, обновление строки или добавление конкретной строки.
В этом учебнике вы узнаете, что такое модуль Ansible lineinfile, как он работает, и как его использовать для управления текстовыми файлами.
Предварительные требования
Этот пост будет пошаговым руководством по использованию модуля Ansible lineinfile. Если вы хотите следовать за учебником, убедитесь, что у вас есть следующее:
- Хост-контроллер Ansible – В этом руководстве используется Ansible v2.9.24 на машине с Ubuntu 18.04.5 LTS.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- Apache должен уже быть установлен на удаленном компьютере, если вы хотите точно следовать учебнику.
Модификация текстового файла с помощью модуля Ansible lineinfile.
Давайте начнем этот учебный курс, запустив модуль Ansible lineinfile с помощью команд ad hoc. Команды ad hoc – это быстрый способ протестировать или выполнить одну команду на удаленном хосте.
Войдите на контроллер Ansible и выполните следующую команду. Эта команда использует модуль lineinfile (-m
) для подключения к веб-машины и передачи аргумента (-a
), который является командой для выполнения.
В данном случае модуль lineinfile обновляет запись localhost, сопоставляя IP-адрес 127.0.0.1
с myapache
в файле /etc/hosts. Сопоставление 127.0.0.1
с myapache
позволяет вам локально переходить на тестовую страницу apache по адресу HTTP://myapache:80
path
обозначает местоположение файла.regexp
находит регулярное выражение, если оно есть, в файле и обновляет его с указанным в параметреline
значением127.0.0.1 myapache
.- Флаг
--become
позволяет запускать команду от имени привилегированного пользователя. web
– это группа инвентаря, которая является коллекцией всех серверов.ansible.builtin.lineinfile
или просто lineinfile – это имя модуля.
После выполнения команды вы должны увидеть сообщение ИЗМЕНЕНО, подтверждающее успешное обновление строки на удаленном хосте.

Войдите в удаленный узел с использованием клиента SSH и проверьте, обновлен ли файл /etc/hosts новым значением с использованием команды cat
.
Как видно ниже, запись localhost успешно обновлена на удаленной машине на 127.0.0.1 myapache
.

Изменение нескольких текстовых файлов в рамках сценария
Работа с одной командой ad hoc для управления строками на удаленной машине может быть подходящей, но будет сложно, если нужно управлять строками в нескольких файлах или несколькими строками в файле. Вместо использования ad-hoc команд, рассмотрите использование модуля Ansible lineinfile в рамках сценария с использованием команды ansible-playbook.
Теперь давайте узнаем, как использовать модуль Ansible lineinfile в рамках сценария и изменить несколько строк.
Предполагается, что вы уже вошли на контроллер Ansible:
1. Создайте каталог с именем ansible_lineinfile_module_demo в вашем домашнем каталоге. Этот каталог будет содержать сценарий, который вы будете использовать для вызова модуля lineinfile.
2. Создайте еще один файл с именем my_playbook.yml в каталоге ~/ansible_lineinfile_module_demo и вставьте следующее содержимое YAML-плейбука. В этом плейбуке несколько задач, использующих модуль Ansible lineinfile
для управления строками различных конфигурационных файлов Apache на удаленной машине.
Плейбук ниже содержит следующие задачи:
1. Проверяет, присутствует ли ADMIN
в файле /etc/sudoers; если нет, задача добавляет его.
2. Гарантирует, что Apache по умолчанию слушает порт 8080 в файле /etc/apache2/ports.conf; если обнаруживается любая другая строка порта, модуль lineinfile обновляет ее на порт 8080
. Аналогично в файле /etc/apache2/apache2.conf обновляются значения MaxKeepAliveRequests
на 1000 и KeepAliveTimeout
на 100.
3. Добавляет строку с текстом “Hello This is my Apache Page” в конце файла index.html
на удаленном сервере в каталоге /var/www/html.
Плейбуки Ansible написаны на YAML. Чтобы узнать больше о YAML, нажмите здесь
3. Теперь вызовите плейбук и выполните задачи, используя команду ansible-playbook
, чтобы добавить или обновить все строки, определенные в плейбуке, на удаленном хосте.

Ниже вы можете увидеть, что ЗАДАЧА имеет статус изменен, что означает, что удаленный хост находился в неправильном состоянии и был изменен для выполнения команды. Для той ЗАДАЧИ, которая имеет статус ОК, показывает, что изменения не требуются.
4. Затем подключитесь по SSH к удаленному хосту, используя ваш любимый SSH-клиент.
5. Наконец, проверьте, обновлены ли все строки, определенные в my_playbook.yml, на удаленном хосте, используя команду cat
.
Ниже приведенный скриншот подтверждает, что admin
уже добавлен в файл sudoers.

Снова ниже приведенный скриншот подтверждает, что apache слушает Port 8080
по умолчанию.

Наконец, проверьте, были ли обновлены MaxKeepAliveRequests
и KeepAliveTimeout
до 1000 и 100 соответственно.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Вывод
Модуль Ansible lineinfile – отличный способ изменения текстовых файлов на удаленных хостах. Модуль предоставляет отличную возможность добавлять, удалять и изменять строки в текстовых файлах в ваших плейбуках.
Какие другие случаи использования модуля Ansible lineinfile вы видите?