Инструменты пользователя

Инструменты сайта


ansible:info

Концепция

Управление хостами, по сети, через ssh подключение, нужен беспарольный доступ с хоста ансибла на целевой хост
При запуске плейбука из консоли, используется авторизованный пользователь, в файле ansible.cfg можно указать другого в параметре «remote_user»

В командах мы описываем желаемое состояние системы, при выполнении софт проверяет так ли это, если нет, то выполняет необходимые действия
Команды можно выполнять одиночно из cli, либо объединять в файлы конфигурации т.н. плейбуки «playbooks», описание в формате yaml

:!: Пример плейбука

Описано две задачи, сначала установка nginx, затем копирование файла

- hosts: web-servers
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=installed update_cache=true
    - name: Push future default virtual host configuration
      copy: src=files/site.conf dest=/etc/nginx/sites-enabled/ mode=0640

Inventory файл в котором хранится перечень целевых хостов, с которыми ведется работа. Так же здесь могут хранится переменные.
По умолчанию /etc/ansible/inventory/hosts, можно задавать другое расположение через конфиг. Расширение добавлять не нужно
Хосты могут объединяться в группы, с-но при выполнении можно указывать эти группы

:!: Пример файла инвертори

./inventory/hosts.yaml

all:
  children:
    myGroup:
      vars:
        myVariable1: value
        myVariable2: value
        myVariable3: value
      hosts:
        alias1: 
          ansible_host: 0.0.0.0
        alias2: 
          ansible_host: 1.1.1.1
        alias3: 
          ansible_host: 2.2.2.2

Непонятки с организацией этого инвентаря, полезная команда «ansible-inventory -i hosts.yaml –list» для отладки

Далее в коде доступны эти хосты и набор переменных к каждому ./test.yaml

...
with_items: "{{ groups['myGroup'] }}" # Применить таску ко всем хостам из группы
 
"{{ hostvars[item] }}" # Элемент группы, хост
"{{ hostvars[item][myVariable1-4] }}" # Во вложенном массиве доступна вся инфа о хосте, в т.ч. набор переменных из инвентори, персонализированный получается

Roles, роли используются для разделения плейбука на части, и организации файлов. Для роли создается каталог, технически структура файлов может быть любой, но есть соглашение об конкретной организации файлов, что добавляет универсальности и порядка.
Создание происходит автоматически, командой $ ansible-galaxy init role-name
Особенность в том что роли могут быть вложенными т.е. составлять цепочку выполнения

Все переменные в ансибл глобальные, но есть замороченная система уровней, которая как то работает, и есть куча нюансов, так что с именованием нужно быть аккуратнее
Хороший путь ансибл это максимально простое и линейное описание последовательного процесса, по возможности стоит максимально исключить условия, циклы и прочую логику из конфигов, лучше написать 10 тривиальных строк вместо одной «кучерявой»
Шаблоны нечто иное как использование переменных типа { { inventory_hostname } } (двойные скобки вместе), это собсна и есть «jinja2»- система шаблонов для python
notify обработчик, который будет вызван в случае успешного выполнения задачи
handlers описание обработчика, который может быть вызван по имени
ansible.cfg основной конфиг

:!: Пример

Тут есть более полное описание

[defaults]
# Используемый инвентори
inventory = ./myhosts
 
# Чтобы убрать предупреждение об автопоиске питона
interpreter_python = auto_silent
 
# Подключаемый пользователь
remote_user = anuser
 
# Отключение подтверждения нового ssh ключа
host_key_checking = False
 
# Отключение сбора фактов
gathering = explicit
ansible/info.txt · Последнее изменение: 2023/08/05 05:12 — admin