Конфигурация Ansible

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

Введение

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

Понимание конфигурации Ansible по умолчанию

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

Сначала проверим, есть ли системный конфигурационный файл Ansible:

cat /etc/ansible/ansible.cfg

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

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

ansible-config dump

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

  • DEFAULT_HOST_LIST: Путь к файлу инвентаря по умолчанию.
  • DEFAULT_REMOTE_USER: Пользователь SSH по умолчанию, которого Ansible будет использовать для подключения к удаленным хостам.
  • DEFAULT_BECOME_METHOD: Метод повышения привилегий по умолчанию, который Ansible будет использовать (например, sudo).

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

Нажмите Q, чтобы выйти из вывода.

Теперь создадим простой файл инвентаря для использования в следующих шагах:

echo "localhost ansible_connection=local" > /home/labex/project/inventory

Это создаст минимальный файл инвентаря с определением только локального хоста.

Создание пользовательского конфигурационного файла Ansible

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

Создайте новый файл с именем ansible.cfg в директории /home/labex/project:

nano /home/labex/project/ansible.cfg

Добавьте следующее содержимое в файл:

[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Разберем эти настройки:

  • inventory: Указывает путь к нашему файлу инвентаря.
  • remote_user: Устанавливает пользователя SSH по умолчанию для подключений.
  • host_key_checking: Отключает проверку SSH-хост-ключей, что может быть полезно в тестовых средах (но для безопасности должно быть включено в продакшене).
  • stdout_callback: Изменяет формат вывода на YAML для лучшей читаемости.
  • become: Включает повышение привилегий по умолчанию.
  • become_method: Устанавливает sudo в качестве метода повышения привилегий.
  • become_user: Указывает, под каким пользователем нужно выполнять действия при повышении привилегий.
  • become_ask_pass: Отключает запрос пароля sudo.

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

Теперь проверим, что Ansible использует наш новый конфигурационный файл. Запустите следующую команду:

ansible-config dump --only-changed
DEFAULT_BECOME(/home/labex/project/ansible.cfg) = True
DEFAULT_BECOME_ASK_PASS(/home/labex/project/ansible.cfg) = False
DEFAULT_BECOME_METHOD(/home/labex/project/ansible.cfg) = sudo
DEFAULT_BECOME_USER(/home/labex/project/ansible.cfg) = root
DEFAULT_HOST_LIST(/home/labex/project/ansible.cfg) = ['/home/labex/project/inventory']
DEFAULT_REMOTE_USER(/home/labex/project/ansible.cfg) = labex
DEFAULT_STDOUT_CALLBACK(/home/labex/project/ansible.cfg) = yaml
HOST_KEY_CHECKING(/home/labex/project/ansible.cfg) = False

Эта команда покажет только те настройки, которые отличаются от конфигурации по умолчанию. Вы должны увидеть изменения, которые мы внесли в наш пользовательский файл ansible.cfg.

Тестирование пользовательской конфигурации

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

Создайте новый файл с именем test_config.yml в директории /home/labex/project:

nano /home/labex/project/test_config.yml

Обновите содержимое следующим образом:

---
- name: Test Custom Configuration
  hosts: all
  tasks:
    - name: Display remote user
      debug:
        msg: "Connected as user: {{ ansible_user }}"

    - name: Display privilege escalation info
      debug:
        msg: "Privilege escalation is {{ 'enabled' if ansible_become | default(false) else 'disabled' }}"

    - name: Show Ansible configuration
      debug:
        msg: "Inventory file: {{ lookup('config', 'DEFAULT_HOST_LIST') }}"

    - name: Check if become is enabled in ansible.cfg
      command: grep "become = True" /home/labex/project/ansible.cfg
      register: become_check
      changed_when: false
      failed_when: false

    - name: Display become setting from ansible.cfg
      debug:
        msg: "Become is {{ 'enabled' if become_check.rc == 0 else 'disabled' }} in ansible.cfg"

В этом обновленном плейбуке были сделаны следующие изменения:

  1. Мы добавили значение по умолчанию для ansible_become, чтобы избежать ошибки о неопределенной переменной.
  2. Мы добавили два новых таска, которые напрямую проверяют файл ansible.cfg на наличие настройки become, что дает более точное представление о вашей конфигурации.

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

ansible-playbook /home/labex/project/test_config.yml

Он должен запуститься без ошибок и предоставить вам информацию о вашей конфигурации Ansible.

Кроме того, давайте избавимся от предупреждения о deprecation, обновив файл ansible.cfg:

nano /home/labex/project/ansible.cfg

Добавьте следующую строку в раздел [defaults]:

interpreter_python = /usr/bin/python3

Ваш файл ansible.cfg теперь должен выглядеть примерно так:

[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
interpreter_python = /usr/bin/python3

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

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

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

ansible-playbook /home/labex/project/test_config.yml

Вы должны увидеть вывод без предупреждения о deprecation, и он должен корректно отображать ваши настройки конфигурации.

Резюме

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

  1. Ansible использует конфигурационные файлы для управления своим поведением. Конфигурацию по умолчанию можно просмотреть с помощью команды ansible-config dump.

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

  3. Важные настройки конфигурации включают:

    • inventory: Указывает путь к файлу инвентаря.
    • remote_user: Устанавливает пользователя SSH по умолчанию для подключений.
    • host_key_checking: Управляет проверкой SSH-хост-ключей.
    • become и связанные настройки: Управляют повышением привилегий.
  4. Команда ansible-config dump --only-changed полезна для просмотра только тех настроек, которые отличаются от конфигурации по умолчанию.

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

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

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

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

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

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