Ansible-плейбуки полностью описывают текущее состояние инфраструктуры. С помощью данного репозитория можно полностью управлять серверами и виртуальными машинами, а также происходит подстановка данных из инвентаря, позволяющая создавать виртуальные машины в автоматическом виде.
На данный момент с помощью этих инструментов настраиваются следующие машины:
inventory
— это Ansible-инвентарь[1], содержащий в себе конкретные конфигурационные файлы для всех настраиваемых серверов и виртуальных машин. Помимо параметров, необходимых для работы с виртуальными машинами, как с Ansible-хостами, в конфигурационных файлах виртуальных машин также содержатся параметры, необходимые для их создания с помощью Ansible-роли[2] project370.devops.libvirt_vm
.playbooks
— это набор Ansible-плейбуков[3], обеспечивающих автоматизированное создание виртуальных машин и применение необходимых конфигураций к нашему оборудованию из inventory
.tasks
— это директория с переиспользуемыми задачами, которые оказались слишком большими, чтобы вносить их внутрь Ansible-плейбуков, но слишком маленькими, чтобы выносить их в отдельные Ansible-роли.
create_vm_from_inventory.yml
— это плейбук, который принимает параметр inventory_vm
, обозначающий название вирутальной машины в инвентаре, и вызывает роль project370.devops.libvirt_vm
, получая информацию из инвентаря и передавая в нее всю необходимую информацию для создания виртуальной машины с заданным именем. Вызывать эту задачу рекомендуется следующим образом:- name: Create VMs using information from inventory
ansible.builtin.include_tasks:
file: "<relative path to>/create_vm_from_iventory.yml"
loop: "{{ groups['<inventory group name>'] }}"
loop_control:
loop_var: inventory_vm
Чтобы применить желаемую конфигурацию, нужно выполнить соответствующие Ansible-плейбуки с помощью утилиты ansible-playbook
. Перед этим нужно убедиться, что все необходимые для работы плейбуков коллекции с Ansible-ролями установлены, сделать это можно с помощью утилиты ansible-galaxy
.
ansible-galaxy install -r requirements.yml
ansible-playbook -i inventory playbooks/<path to playbook>
Виртуальные машины Libvirt[4] создаются автоматоматически из информации полученной из Ansible-инвентаря с помощью задачи из файла tasks/create_vm_from_iventory.yml
.
Приведение инфраструктуры к желаемому состоянию достигается путем интеграции Ansible[5] с системой контроля версий Git[6] в GitLab[7] с помощью механизмов GitLab CI/CD. Конвейер, обеспечивающий автоматизацию, описан в специальном файле .gilab-ci.yml
, и запускается в тот момент, когда конфигурация инфраструктуры в ветке main
обновляется.
В нашем случае для этого производится динамическая генерация и запуск CI-задач по выполнению Ansible-плейбуков.
.gilab-ci.yml
задача — prepare-jobs
— выполняет Ansible-плейбук playbooks/ci.yml
, в котором вызывается Ansible-роль roles/ci
. В рамках которой генерируется новый CI-файл — playbooks.gitlab-ci.yml
, содержащий по одной CI-задаче на каждый плейбук в директории playbooks
.playbooks.gitlab-ci.yml
запускается второй описанной в файле .gilab-ci.yml
задачей — trigger
.