Установка и настройка Ansible

Добро пожаловать в подробное руководство по установке и настройке Ansible в НАЙС ОС. В этом документе мы рассмотрим процесс установки, настройки и использования Ansible. Ansible — это мощный инструмент для автоматизации задач управления конфигурацией, развертывания приложений и оркестрации. Понимание его установки и конфигурации является важным навыком для системных администраторов и DevOps-инженеров.

Установка Ansible

Для установки Ansible в НАЙС ОС используйте пакетный менеджер tdnf. Выполните следующую команду:

sudo tdnf install -y ansible

Проверка установки

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

ansible --version

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

Настройка Ansible

Основной файл конфигурации Ansible находится в /etc/ansible/ansible.cfg. Рассмотрим основные параметры конфигурации.

Пример конфигурационного файла


[defaults]
inventory = /etc/ansible/hosts
remote_user = your_username
host_key_checking = False
timeout = 30
  

Настройка инвентаря

Инвентарь Ansible определяет, какие узлы будут управляться Ansible. По умолчанию файл инвентаря находится в /etc/ansible/hosts. Рассмотрим пример файла инвентаря.

Пример файла инвентаря


[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com
  

Этот пример определяет две группы узлов: webservers и dbservers, каждая из которых содержит два узла.

Использование Ansible

Ansible использует модули для выполнения задач на удаленных узлах. Рассмотрим основные команды и примеры использования Ansible.

Выполнение команд на удаленных узлах

Для выполнения команд на удаленных узлах используйте модуль command. Например, чтобы выполнить команду uname -a на всех узлах, используйте следующую команду:

ansible all -m command -a "uname -a"

Копирование файлов на удаленные узлы

Для копирования файлов на удаленные узлы используйте модуль copy. Например, чтобы скопировать файл /etc/hosts на все узлы, используйте следующую команду:

ansible all -m copy -a "src=/etc/hosts dest=/tmp/hosts"

Управление пакетами на удаленных узлах

Для установки пакетов на удаленные узлы используйте модуль yum (или apt для систем на основе Debian). Например, чтобы установить пакет httpd на все узлы, используйте следующую команду:

ansible all -m yum -a "name=httpd state=present"

Перезагрузка служб на удаленных узлах

Для перезагрузки служб на удаленных узлах используйте модуль service. Например, чтобы перезапустить службу httpd на всех узлах, используйте следующую команду:

ansible all -m service -a "name=httpd state=restarted"

Использование Playbooks

Playbooks в Ansible позволяют описывать сложные сценарии автоматизации в виде YAML-файлов. Рассмотрим пример Playbook для установки и настройки веб-сервера.

Пример Playbook


---
- name: Установка и настройка веб-сервера
  hosts: webservers
  become: yes
  tasks:
    - name: Установка пакета httpd
      yum:
        name: httpd
        state: present

    - name: Запуск и включение службы httpd
      service:
        name: httpd
        state: started
        enabled: yes

    - name: Копирование файла конфигурации
      copy:
        src: /path/to/local/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
        backup: yes

    - name: Перезагрузка службы httpd
      service:
        name: httpd
        state: restarted
  

Этот Playbook выполняет установку пакета httpd, запускает и включает его, копирует файл конфигурации и перезагружает службу httpd.

Запуск Playbook

Для запуска Playbook используйте команду ansible-playbook. Например, чтобы запустить Playbook site.yml, используйте следующую команду:

ansible-playbook site.yml

Настройка ролей в Ansible

Роли в Ansible позволяют структурировать Playbooks и задачи. Рассмотрим процесс создания и использования ролей.

Создание роли

Для создания новой роли используйте команду ansible-galaxy init. Например, чтобы создать роль webserver, используйте следующую команду:

ansible-galaxy init webserver

Эта команда создаст структуру каталогов для роли webserver:


webserver/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
  

Использование роли в Playbook

Для использования роли в Playbook добавьте её в раздел roles. Например:


---
- name: Применение роли webserver
  hosts: webservers
  become: yes
  roles:
    - webserver
  

Настройка Dynamic Inventory

Dynamic Inventory позволяет автоматически генерировать список узлов для Ansible. Рассмотрим пример настройки Dynamic Inventory для использования с AWS.

Установка и настройка boto3

Для использования Dynamic Inventory с AWS установите библиотеку boto3:

pip install boto3

Настройка скрипта Dynamic Inventory

Создайте скрипт aws_ec2_inventory.py для генерации списка узлов:


#!/usr/bin/env python
import boto3
import json

def get_instances():
    ec2 = boto3.resource('ec2')
    instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
    inventory = {'_meta': {'hostvars': {}}}

    for instance in instances:
        inventory['_meta']['hostvars'][instance.private_ip_address] = {
            'ansible_host': instance.private_ip_address,
            'instance_id': instance.id,
            'instance_type': instance.instance_type,
            'private_ip': instance.private_ip_address,
        }

        for tag in instance.tags:
            if tag['Key'] == 'Name':
                inventory.setdefault(tag['Value'], []).append(instance.private_ip_address)

    return inventory

if __name__ == "__main__":
    print(json.dumps(get_instances(), indent=4))
  

Установите права на выполнение для скрипта:

chmod +x aws_ec2_inventory.py

Использование Dynamic Inventory

Для использования Dynamic Inventory укажите путь к скрипту при выполнении команд Ansible. Например:

ansible all -i aws_ec2_inventory.py -m ping

Заключение

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