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

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

Введение

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

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

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

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

При подготовке среды в постоянной конфигурации зоны public сохранены правила доступа по SSH и к браузерному терминалу LabEx на 3002/tcp. Сохраните эти правила административного доступа при изменении политики межсетевого экрана для приложения.

  • Установка 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!
    
  • Создание каталога проекта

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

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

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

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

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

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

    echo "localhost ansible_connection=local" > inventory
    

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

    cat inventory
    

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

    localhost ansible_connection=local
    
  • Настройка логирования 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 — важный инструмент для проверки ваших плейбуков перед выполнением.

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

    Сначала вы создадите новый файл плейбука с именем 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.

  • Выявление и исправление ошибки синтаксиса 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, добавив кавычки:

    ## ... (rest of the file)
    vars:
      ## FIX: Add quotes around the string with a colon
      package_comment: "This is a package: httpd"
    ## ... (rest of the file)
    

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

  • Выявление и исправление ошибки отступов 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
    

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

    ## ... (rest of the file)
    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
    

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

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

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

    ansible-playbook --syntax-check webserver.yml
    

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

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

    playbook: webserver.yml
    

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

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

  • Создание файла шаблона 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).

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

    Теперь измените ваш плейбук 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
    

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

  • Выявление и исправление ошибки кавычек 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:

    ## ... (rest of the file)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          ## FIX: Quote the Jinja2 expression
          name: "{{ package_name }}"
          state: present
    ## ... (rest of the file)
    

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

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

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

    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:

    ## ... (rest of the file)
    - 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
    ## ... (rest of the file)
    

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

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

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

    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) позволяет запускать плейбук, чтобы увидеть, какие изменения были бы внесены, фактически не изменяя ничего в системе. Это невероятно полезно для безопасного тестирования плейбуков и диагностики проблем, таких как неправильные имена служб, прежде чем они вызовут реальные проблемы.

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

    Теперь вы создадите новый плейбук, 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).

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

    Вместо обычного запуска плейбука выполните его в режиме проверки. Это предотвратит внесение каких-либо изменений 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
    
  • Поиск правильного имени службы

    Чтобы исправить плейбук, вам нужно найти правильное имя службы для пакета 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.

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

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

    nano service.yml
    

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

    ## ... (rest of the file)
    - 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
    

    Примечание: Этот экземпляр RHEL поддерживает systemd. Режим проверки проверяет предполагаемое изменение службы, не применяя его. Указанное количество изменений changed зависит от текущего состояния службы.

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

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

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

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

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

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

    sudo dnf install -y firewalld
    

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

    sudo systemctl start firewalld
    

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

    ansible-galaxy collection install ansible.posix
    

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

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

    Создайте новый плейбук с именем 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).

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

    Выполните плейбук. Он завершится с ошибкой, поскольку 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
    
  • Поиск правильного имени службы брандмауэра

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

    firewall-cmd --get-services
    

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

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

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

    nano firewall.yml
    

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

    ## ... (rest of the file)
    - 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 не может подключиться к узлу, указанному в вашем инвентаре. Это часто вызвано простой опечаткой в имени узла.

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

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

    nano inventory
    

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

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

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

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

    Сначала вам нужно изменить плейбук 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
    

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

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

    Теперь попробуйте запустить измененный плейбук. Он завершится с ошибкой, потому что инвентарь содержит опечатку 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
    
  • Исправление файла инвентаризации

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

    nano inventory
    

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

    ## FIX: Corrected hostname
    localhost ansible_connection=local
    

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

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

    Если вы хотите восстановить плейбук для использования 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 для безопасного выполнения пробного запуска и выявления потенциальных сбоев служб на целевом узле без внесения фактических изменений. Лаборатория завершилась решением проблем с подключением, где вы исправили конфигурации брандмауэра для устранения недоступности узла, предоставив комплексный подход к отладке от управляющего узла до управляемого узла.