Устранение неполадок плейбуков и хостов Ansible на RHEL

AnsibleBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь устранять распространенные проблемы, возникающие при работе с Ansible на Red Hat Enterprise Linux. Вы получите практический опыт в выявлении и решении различных проблем, начиная от первоначальной настройки среды и заканчивая распространенными ошибками в плейбуках и проблемами с подключением к управляемым хостам. Упражнения охватывают исправление синтаксиса YAML, исправление ошибок шаблонизации Jinja2 и диагностику проблем на удаленных системах.

Вы начнете с подготовки среды RHEL и настройки Ansible для эффективного логирования. Затем вы погрузитесь в практические сценарии устранения неполадок, используя режим проверки (check mode) Ansible для диагностики проблем, связанных со службами, и исправления конфигураций брандмауэра для решения проблем с недоступностью хостов. К концу этой лабораторной работы вы будете обладать полным набором навыков для поддержания надежных рабочих процессов автоматизации Ansible.

Подготовка среды RHEL и настройка логирования Ansible

На этом этапе вы подготовите вашу среду Red Hat Enterprise Linux для автоматизации с помощью Ansible. Это включает установку необходимого программного обеспечения, создание выделенного каталога проекта и настройку базового конфигурационного файла для управления поведением Ansible и включения логирования. Правильная настройка — первый шаг к эффективной автоматизации и устранению неполадок.

  1. Установка Ansible

    Сначала вам нужно установить Ansible. Основной механизм автоматизации предоставляется пакетом ansible-core. Используйте менеджер пакетов dnf с sudo для его установки. Флаг -y автоматически отвечает "yes" на любые запросы подтверждения.

    sudo dnf install -y ansible-core

    Вы увидите вывод, указывающий на установку пакета вместе с его зависимостями.

    Last metadata expiration check: ...
    Dependencies resolved.
    ================================================================================
     Package             Architecture   Version                Repository      Size
    ================================================================================
    Installing:
     ansible-core        x86_64         <version>              <repo>          2.8 M
    ...
    Transaction Summary
    ================================================================================
    Install  XX Packages
    
    Total download size: XX M
    Installed size: XX M
    ...
    Complete!
  2. Создание каталога проекта

    Хорошей практикой является организация ваших проектов Ansible в выделенных каталогах. Это позволяет аккуратно разделять ваши плейбуки, инвентарь и конфигурационные файлы. Давайте создадим каталог с именем ansible_troubleshooting внутри вашей домашней папки проекта и перейдем в него.

    mkdir -p ~/project/ansible_troubleshooting
    cd ~/project/ansible_troubleshooting

    С этого момента все команды в этой лабораторной работе будут выполняться из каталога ~/project/ansible_troubleshooting.

  3. Создание файла инвентаря Ansible

    Инвентарь — это файл, который перечисляет хосты (или узлы), которыми будет управлять Ansible. Поскольку вы работаете на одной виртуальной машине LabEx, вы настроите Ansible для управления самой локальной машиной.

    Создайте файл с именем inventory и добавьте в него localhost. Часть ansible_connection=local указывает Ansible выполнять команды непосредственно на управляющем узле (вашей виртуальной машине) без использования SSH.

    echo "localhost ansible_connection=local" > inventory

    Вы можете проверить содержимое файла с помощью команды cat:

    cat inventory

    Ожидаемый вывод:

    localhost ansible_connection=local
  4. Настройка логирования Ansible

    Файл ansible.cfg позволяет настраивать поведение Ansible для конкретного проекта. Когда он находится в каталоге проекта, его настройки переопределяют системные значения по умолчанию. Здесь вы создадите этот файл, чтобы указать расположение вашего инвентаря и включить логирование. Логирование имеет решающее значение для устранения неполадок, поскольку оно записывает подробную информацию о каждом запуске плейбука.

    Используйте редактор nano для создания файла ansible.cfg.

    nano ansible.cfg

    Теперь скопируйте и вставьте следующее содержимое в редактор nano. Эта конфигурация указывает Ansible использовать файл inventory в текущем каталоге и записывать весь вывод логов в файл с именем ansible.log.

    [defaults]
    inventory = /home/labex/project/ansible_troubleshooting/inventory
    log_path = /home/labex/project/ansible_troubleshooting/ansible.log

    Чтобы сохранить файл в nano, нажмите Ctrl+X, затем Y для подтверждения и, наконец, Enter для записи файла.

    Ваша среда теперь полностью подготовлена. У вас установлен Ansible и настроен каталог проекта с локальным инвентарем и включенным логированием, готовый к следующим шагам.

Исправление ошибок синтаксиса и отступов YAML в плейбуке

На этом этапе вы научитесь диагностировать и исправлять два наиболее распространенных типа ошибок в плейбуках Ansible: ошибки синтаксиса YAML и неправильные отступы. YAML, язык, используемый для написания плейбуков, очень строг в отношении своей структуры. Один неправильно расположенный пробел или специальный символ без кавычек может помешать выполнению плейбука. Вы будете использовать команду ansible-playbook --syntax-check — важный инструмент для проверки ваших плейбуков перед выполнением.

  1. Создание плейбука с намеренными ошибками

    Сначала вы создадите новый файл плейбука с именем webserver.yml в вашем каталоге проекта (~/project/ansible_troubleshooting). Этот файл содержит намеренные ошибки, которые вы будете исправлять.

    Используйте nano для создания файла:

    nano webserver.yml

    Скопируйте и вставьте следующее содержимое в редактор. Обратите внимание на две намеренные ошибки: строку без кавычек, содержащую двоеточие, и неправильный отступ для второй задачи.

    ---
    - name: Configure Web Server
      hosts: localhost
      vars:
        ## ERROR 1: Unquoted colon in string
        package_comment: This is a package: httpd
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            name: httpd
            state: present
    
        ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ansible.builtin.copy:
              content: "<h1>Welcome to Ansible</h1>"
              dest: /var/www/html/index.html

    Сохраните файл и выйдите из nano, нажав Ctrl+X, затем Y и Enter.

  2. Выявление и исправление ошибки синтаксиса YAML (двоеточие без кавычек)

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

    ansible-playbook --syntax-check webserver.yml

    Ожидаемый вывод (Ошибка): Вы увидите ошибку, потому что значение для package_comment содержит двоеточие (:) , но не заключено в кавычки. YAML интерпретирует двоеточие как разделитель ключ-значение, что приводит к синтаксической ошибке.

    ERROR! We were unable to read either as JSON nor YAML, these are the errors we found:
    - Syntax Error while loading YAML.
      did not find expected ':'
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 6, column 41, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
      vars:
        package_comment: This is a package: httpd
                                            ^ here

    Решение: Чтобы исправить это, вы должны заключить строку в двойные кавычки. Снова откройте файл с помощью nano:

    nano webserver.yml

    Измените строку под vars, добавив кавычки:

    ## ... (остальная часть файла)
    vars:
      ## FIX: Add quotes around the string with a colon
      package_comment: "This is a package: httpd"
    ## ... (остальная часть файла)

    Сохраните и выйдите из редактора.

  3. Выявление и исправление ошибки отступов YAML

    После исправления первой ошибки выполните проверку синтаксиса еще раз.

    ansible-playbook --syntax-check webserver.yml

    Ожидаемый вывод (Ошибка): На этот раз Ansible сообщит о другой ошибке, связанной со структурой плейбука.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 13, column 11, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
    
          ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ^ here

    Эта ошибка возникает потому, что YAML использует отступы для определения структуры. Все элементы списка (в данном случае, задачи, которые являются элементами списка, начинающимися с -) должны иметь одинаковый уровень отступов. Вторая задача, Create a test index page, имеет слишком большой отступ.

    Решение: Откройте файл еще раз, чтобы исправить отступы.

    nano webserver.yml

    Удалите лишние пробелы перед второй задачей, чтобы ее дефис (-) идеально совпадал с дефисом предыдущей задачи.

    ## ... (остальная часть файла)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          name: httpd
          state: present
    
      ## FIX: Correct the indentation to align with the previous task
      - name: Create a test index page
        ansible.builtin.copy:
          content: "<h1>Welcome to Ansible</h1>"
          dest: /var/www/html/index.html

    Сохраните и выйдите из редактора.

  4. Проверка исправленного плейбука

    Наконец, выполните проверку синтаксиса в последний раз.

    ansible-playbook --syntax-check webserver.yml

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

    Ожидаемый вывод (Успех):

    playbook: webserver.yml

Решение ошибок кавычек и путей к шаблонам Jinja2

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

  1. Создание файла шаблона Jinja2

    Сначала вам понадобится файл шаблона. В отличие от статического файла, шаблон может содержать переменные, которые Ansible заменит фактическими значениями во время выполнения плейбука. Вы создадите простой HTML-шаблон.

    Используйте nano для создания файла с именем index.html.j2 в вашем каталоге проекта (~/project/ansible_troubleshooting). Расширение .j2 является распространенным соглашением для шаблонов Jinja2.

    nano index.html.j2

    Скопируйте и вставьте следующее содержимое HTML в редактор. Обратите внимание на заполнитель {{ welcome_message }}, который является переменной Jinja2.

    <h1>{{ welcome_message }}</h1>
    <p>This page was deployed by Ansible.</p>

    Сохраните файл и выйдите из nano (Ctrl+X, Y, Enter).

  2. Изменение плейбука для использования шаблона и внесение ошибок

    Теперь измените ваш плейбук webserver.yml, чтобы использовать модуль ansible.builtin.template. Вы также внесете две новые ошибки: переменную Jinja2 без кавычек и неправильный путь к шаблону.

    Откройте webserver.yml с помощью nano:

    nano webserver.yml

    Замените все содержимое файла следующим. Директива become: true указывает Ansible выполнять задачи с правами администратора (используя sudo), что необходимо для установки программного обеспечения и записи файлов в системные каталоги, такие как /var/www/html.

    ---
    - name: Configure Web Server
      hosts: localhost
      become: true
      vars:
        package_name: httpd
        welcome_message: "Welcome to Ansible with Jinja2"
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            ## ERROR 1: Unquoted Jinja2 variable
            name: { { package_name } }
            state: present
    
        - name: Create a test index page from template
          ansible.builtin.template:
            ## ERROR 2: Incorrect template source path
            src: index.j2
            dest: /var/www/html/index.html

    Сохраните и выйдите из редактора.

  3. Выявление и исправление ошибки кавычек Jinja2

    Несмотря на то, что это проблема Jinja2, она может проявляться как ошибка синтаксиса YAML. Запустите проверку синтаксиса, чтобы увидеть, как ее интерпретирует Ansible.

    ansible-playbook --syntax-check webserver.yml

    Ожидаемый вывод (Ошибка): Вы получите ошибку синтаксиса, потому что значение YAML, начинающееся с {{, рассматривается как специальная конструкция и должно быть заключено в кавычки, чтобы интерпретироваться как строка.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 11, column 19, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
              ## ERROR 1: Unquoted Jinja2 variable
              name: {{ package_name }}
                      ^ here

    Решение: Откройте webserver.yml и заключите переменную Jinja2 в двойные кавычки.

    nano webserver.yml

    Измените задачу Install httpd package:

    ## ... (остальная часть файла)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          ## FIX: Quote the Jinja2 expression
          name: "{{ package_name }}"
          state: present
    ## ... (остальная часть файла)

    Сохраните и выйдите. Проверка синтаксиса теперь должна пройти успешно.

  4. Выявление и исправление ошибки пути к шаблону

    Теперь, когда синтаксис правильный, попробуйте запустить плейбук.

    ansible-playbook webserver.yml

    Ожидаемый вывод (Ошибка): Плейбук завершится с ошибкой, но на этот раз это ошибка времени выполнения, а не синтаксическая. Сообщение об ошибке ясно указывает, что исходный файл index.j2 не найден.

    TASK [Create a test index page from template] **********************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/labex/project/ansible_troubleshooting/index.j2' on the Ansible Controller."}

    Это происходит потому, что параметр src в вашем плейбуке указывает на index.j2, но файл, который вы создали, называется index.html.j2.

    Решение: Откройте webserver.yml в последний раз и исправьте имя файла.

    nano webserver.yml

    Измените параметр src в задаче Create a test index page from template:

    ## ... (остальная часть файла)
    - name: Create a test index page from template
      ansible.builtin.template:
        ## FIX: Correct template source filename
        src: index.html.j2
        dest: /var/www/html/index.html
    ## ... (остальная часть файла)

    Сохраните и выйдите из редактора.

  5. Успешный запуск плейбука

    Запустите плейбук снова. Теперь он должен успешно выполнить все задачи.

    ansible-playbook webserver.yml

    Ожидаемый вывод (Успех):

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Install httpd package] ***************************************************
    changed: [localhost]
    
    TASK [Create a test index page from template] **********************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Использование режима проверки (Check Mode) для устранения ошибок служб на управляемых узлах

На этом этапе вы научитесь использовать одну из самых мощных функций Ansible для устранения неполадок: режим проверки. Режим проверки (активируется с помощью флага --check) позволяет запускать плейбук, чтобы увидеть, какие изменения были бы внесены, фактически не изменяя ничего в системе. Это невероятно полезно для безопасного тестирования плейбуков и диагностики проблем, таких как неправильные имена служб, прежде чем они вызовут реальные проблемы.

  1. Создание плейбука для управления службой

    Теперь вы создадите новый плейбук, service.yml, предназначенный для обеспечения работы веб-сервера httpd. Однако вы намеренно используете неправильное имя службы, чтобы имитировать распространенную ошибку.

    Используйте nano для создания файла service.yml в вашем каталоге ~/project/ansible_troubleshooting.

    nano service.yml

    Скопируйте и вставьте следующее содержимое. Обратите внимание, что имя службы установлено на apache2, что является распространенным именем для веб-сервера Apache в других дистрибутивах Linux, но неверно для RHEL.

    ---
    - name: Manage Web Server Service
      hosts: localhost
      become: true
      tasks:
        - name: Ensure web server service is started
          ansible.builtin.service:
            ## ERROR: Incorrect service name for RHEL
            name: apache2
            state: started
            enabled: true

    Сохраните файл и выйдите из nano (Ctrl+X, Y, Enter).

  2. Использование режима проверки для выявления ошибки службы

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

    ansible-playbook --check service.yml

    Ожидаемый вывод (Ошибка): Плейбук завершится с ошибкой. Сообщение об ошибке ясно укажет, что служба с именем apache2 не найдена. Это немедленно сообщит вам, что параметр name в вашем плейбуке неверен.

    TASK [Ensure web server service is started] ************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find the requested service 'apache2': host"}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  3. Поиск правильного имени службы

    Чтобы исправить плейбук, вам нужно найти правильное имя службы для пакета httpd в RHEL. Надежный способ сделать это — перечислить файлы, установленные пакетом, и найти файл юнита службы, который обычно находится в /usr/lib/systemd/system/.

    Используйте команду rpm для запроса пакета httpd:

    rpm -ql httpd | grep systemd

    Ожидаемый вывод: Эта команда перечислит файлы, связанные с systemd, включая файл службы.

    /usr/lib/systemd/system/httpd.service
    /usr/lib/systemd/system/httpd@.service
    ...

    Вывод httpd.service указывает, что правильное имя службы — httpd.

  4. Исправление плейбука и повторный запуск в режиме проверки

    Теперь, когда вы знаете правильное имя службы, отредактируйте файл service.yml.

    nano service.yml

    Измените имя службы с apache2 на httpd.

    ## ... (остальная часть файла)
    - name: Ensure web server service is started
      ansible.builtin.service:
        ## FIX: Correct service name for RHEL
        name: httpd
        state: started
        enabled: true

    Сохраните и выйдите из редактора. Теперь снова запустите плейбук в режиме проверки.

    ansible-playbook --check service.yml

    Ожидаемый вывод (Успех в режиме проверки): На этот раз плейбук должен сообщить статус changed. В режиме проверки changed означает «было бы внесено изменение, если бы это был реальный запуск». Это указывает на то, что логика вашего плейбука теперь правильна, и Ansible определил, что службу httpd необходимо запустить.

    TASK [Ensure web server service is started] ************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Примечание: В этой конкретной лабораторной среде на основе контейнеров полноценная система инициализации systemd не запущена. Хотя режим проверки работает правильно, обычный запуск модуля ansible.builtin.service все равно может столкнуться с проблемами. Главный урок здесь заключается в использовании режима проверки для проверки логики вашего плейбука в соответствии с конфигурацией системы.

Исправление конфигурации брандмауэра и проблем с недоступностью узла

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

Часть 1: Корректировка конфигурации брандмауэра

Распространенной задачей при настройке сервера является открытие портов в брандмауэре. Плейбук может легко завершиться с ошибкой, если он ссылается на службу брандмауэра, которая не существует в целевой системе.

  1. Установка и подготовка firewalld

    Сначала убедитесь, что пакет firewalld установлен, поскольку он предоставляет службу управления брандмауэром в RHEL.

    sudo dnf install -y firewalld

    Запустите службу firewalld.

    sudo systemctl start firewalld

    Вам также необходимо установить коллекцию ansible.posix, которая содержит модуль firewalld, используемый в этом упражнении.

    ansible-galaxy collection install ansible.posix

    Примечание: Вы можете увидеть предупреждение о совместимости версий Ansible, но коллекция все равно будет работать корректно для этого упражнения.

  2. Создание плейбука с ошибкой брандмауэра

    Создайте новый плейбук с именем firewall.yml, который пытается включить службу http. Однако вы намеренно используете неправильное имя службы, web, чтобы вызвать ошибку.

    nano firewall.yml

    Скопируйте и вставьте следующее содержимое в редактор:

    ---
    - name: Configure System Firewall
      hosts: localhost
      become: true
      tasks:
        - name: Allow web traffic through firewall
          ansible.posix.firewalld:
            ## ERROR: 'web' is not a standard firewalld service
            service: web
            permanent: true
            state: enabled

    Сохраните и выйдите из nano (Ctrl+X, Y, Enter).

  3. Запуск плейбука и диагностика сбоя

    Выполните плейбук. Он завершится с ошибкой, поскольку firewalld не распознает службу с именем web.

    ansible-playbook firewall.yml

    Ожидаемый вывод (Ошибка): Сообщение об ошибке ясно указывает, что web не является поддерживаемой службой, указывая вам непосредственно на проблему.

    TASK [Allow web traffic through firewall] **************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "web is not a supported service. This is what I have."}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  4. Поиск правильного имени службы брандмауэра

    Чтобы найти список допустимых, предопределенных имен служб, вы можете использовать утилиту командной строки firewall-cmd.

    firewall-cmd --get-services

    Ожидаемый вывод: Вы увидите длинный список доступных служб. Просмотрите список, чтобы найти правильное для веб-трафика, которым является http.

    RH-Satellite-6 ... ftp http https imaps ipp ipp-client ...
  5. Исправление плейбука и успешный запуск

    Отредактируйте firewall.yml и замените неправильное имя службы web на правильное — http.

    nano firewall.yml

    Исправленная задача должна выглядеть следующим образом:

    ## ... (остальная часть файла)
    - name: Allow web traffic through firewall
      ansible.posix.firewalld:
        ## FIX: Use the correct firewalld service name
        service: http
        permanent: true
        state: enabled

    Сохраните и выйдите. Теперь запустите плейбук снова. Он должен завершиться успешно.

    ansible-playbook firewall.yml

Часть 2: Устранение проблем недоступности узла

Ошибка «недоступен» означает, что Ansible не может подключиться к узлу, указанному в вашем инвентаре. Это часто вызвано простой опечаткой в имени узла.

  1. Имитация недоступного узла

    Намеренно введите опечатку в ваш файл inventory и удалите настройку локального подключения. Это заставит Ansible попытаться установить фактическое сетевое соединение с неправильно написанным именем узла.

    nano inventory

    Измените localhost на localhossst и удалите ansible_connection=local.

    ## ERROR: Intentional typo in hostname, no local connection
    localhossst

    Сохраните и выйдите из редактора.

  2. Изменение плейбука для использования узлов инвентаризации

    Сначала вам нужно изменить плейбук webserver.yml, чтобы использовать узлы инвентаризации вместо жестко заданного localhost. Когда плейбук использует hosts: localhost, Ansible обрабатывает это как особый случай и полностью игнорирует файл инвентаризации.

    nano webserver.yml

    Измените строку hosts с localhost на all:

    ---
    - name: Configure Web Server
      hosts: all ## Changed from 'localhost' to use inventory hosts
      become: true
      ## ... rest of the playbook remains the same

    Сохраните и выйдите из редактора.

  3. Запуск плейбука для вызова ошибки

    Теперь попробуйте запустить измененный плейбук. Он завершится с ошибкой, потому что инвентарь содержит опечатку localhossst.

    ansible-playbook webserver.yml

    Ожидаемый вывод (Ошибка): Ansible завершится с ошибкой и сообщит, что узел UNREACHABLE. Сообщение об ошибке указывает, что имя узла не удалось разрешить.

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] **********************************************************
    fatal: [localhossst]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname localhossst: Name or service not known", "unreachable": true}
    
    PLAY RECAP *********************************************************************
    localhossst                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  4. Исправление файла инвентаризации

    Статус UNREACHABLE — это сигнал для проверки имен узлов и сетевого подключения. В данном случае исправление заключается в исправлении опечатки в файле inventory.

    nano inventory

    Измените localhossst обратно на localhost.

    ## FIX: Corrected hostname
    localhost ansible_connection=local

    Сохраните и выйдите. Повторный запуск ansible-playbook webserver.yml теперь будет успешным.

  5. Необязательно: восстановление исходного плейбука

    Если вы хотите восстановить плейбук для использования hosts: localhost для будущих упражнений, вы можете изменить его обратно:

    nano webserver.yml

    Измените строку hosts обратно на localhost:

    ---
    - name: Configure Web Server
      hosts: localhost ## Restored to original
      become: true
      ## ... rest of the playbook

    Сохраните и выйдите. Этот шаг демонстрирует разницу между использованием жестко заданного localhost (который обходит инвентарь) и использованием узлов, определенных в инвентаре.

Резюме

В этой лаборатории вы подготовили среду Red Hat Enterprise Linux для Ansible, установив ansible-core и настроив журналирование, а затем приступили к устранению различных распространенных проблем. Вы научились диагностировать и устранять ошибки в плейбуках, такие как исправление неправильного синтаксиса YAML, отступов, кавычек Jinja2 и недопустимых путей к шаблонам. Эти навыки являются основополагающими для написания корректного и надежного кода автоматизации.

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