Задание:

Установить Ansible.

Подготовить Cloud-ADM для работы с Ansible.

Основные моменты на что стоит обратить внимание перед написанием скрипта с использованием Ansible:

Основные моменты (подготовка):

  • Поскольку Топология L3 включает в себя статическую IP-адресацию, значит нет смысла напрягать Terraform для создания динамического инвентаря Ansible:
    • можно воспользоваться файлом /etc/hosts на инстансе Cloud-ADM, например:

    • в дополнении можно воспользоваться файлом ~/.ssh/config на инстансе Cloud-ADM, например:

  • В результате инвентарный файл может выглядеть следующим образом:
all:
  children:

    ha:
      hosts:
        Cloud-HA01:
        Cloud-HA02:

    web:
      hosts:
        Cloud-WEB01:
        Cloud-WEB02:

    db:
      hosts:
        Cloud-DB01:
        Cloud-DB02:
    • при указании параметров для подключения, например group_vars/all.yml, работоспособность:
[altlinux@cloud-adm ansible]$ ansible -m ping all
Cloud-HA01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Cloud-HA02 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Cloud-WEB02 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Cloud-WEB01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Cloud-DB01 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
Cloud-DB02 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
  • Поскольку Cloud-ADM должен иметь корректное доверие к сертификатам для доступа по HTTPS, можно реализовать на нём CA
    • выпустить необходимые сертификаты;

    • используя ansible передать соответствующие сертификаты на соответствующие инстансы;

Вариант реализации:

Cloud-ADM:

  • Установка ansible средствами pip:
pip3 install ansible
  •  
  • Добавляем путь в переменную окружения PATH:
export PATH=/home/altlinux/.local/bin:$PATH
    • Проверяем работоспособность ansible:

  • Перейдём в директорию /home/altlinux/bin:
cd /home/altlinux/bin
  • Создадим директорию ansible и перейдём в неё:
mkdir ansible && cd ansible
  • Создадим файл инвентаря 'inventory.yml':
vim inventory.yml
    • поместим в него следующее содержимое:
    • объявив:
      • 3 группы устройств: ha, web, db
      • по 2 устройства в каждой группе: 
        • ha: Cloud-HA01 и Cloud-HA02;
        • web: Cloud-WEB01 и Cloud-WEB02;
        • db: Cloud-DB01 и Cloud-DB02;
all:
  children:
    
    ha:
      hosts:
        Cloud-HA01:
        Cloud-HA02:
    
    web:
      hosts:
        Cloud-WEB01:
        Cloud-WEB02:
    
    db:
      hosts:
        Cloud-DB01:
        Cloud-DB02:
  • Создадим файл конфигурации для ansible 'ansible.cfg':
vim ansible.cfg
    • поместим в него следующее содержимое:
[defaults]
inventory = ./inventory.yml
host_key_checking = False
callback_enabled = profile_tasks
callback_whitelist = profile_tasks
deprecation_warnings = False
  • Создадим директорию group_vars где будем создавать файлы с переменными для групп хостов:
mkdir group_vars
  • Создадим файл 'all.yml' в директории group_vars:
vim group_vars/all.yml
    • и поместим следующее содержимое:
      • указав те переменных, которые будут одинаковыми для всех групп хостов;
---
ansible_python_interpreter: /usr/bin/python3
ansible_ssh_user: altlinux
ansible_ssh_private_key_file: ~/.ssh/id_rsa
  • Поскольку Топология L3 включает в себя статическую IP-адресацию, значит нет смысла напрягать Terraform для создания динамического инвентаря Ansible:
    • можно воспользоваться файлом /etc/hosts на инстансе Cloud-ADM, например:

    • в дополнении можно воспользоваться файлом ~/.ssh/config на инстансе Cloud-ADM, например:

  • Проверяем возможность ansible подключиться к инстансам описанным в инвентарном файле:
ansible -m ping all
    • Результат:

Последнее изменение: вторник, 24 июня 2025, 12:56