Автоматизируйте OpenStack с помощью Ansible
Ansible предлагает уникальную гибкость при автоматизации вашей инфраструктуры.
В своей предыдущей статье я продемонстрировал, как я управляю OpenStack с помощью Terraform. Использование Terraform as Infrastructure as Code (IaC) является значительным преимуществом, но оно также требует поддержки персонала. Иногда все, что вам действительно нужно, — это возможность предоставлять инфраструктуру в виде синхронизированных ресурсов без намерения создавать долговременные структуры данных. Когда я проектирую гибкую среду, я предпочитаю декларативный язык Ansible.
Гибкость Ansible позволяет мне разрабатывать варианты использования, которые включают:
- Тестовая среда, рассчитанная по времени и которую можно удалить после использования.
- Среда обучения предусматривалась на определенное время, а затем уничтожалась.
- Переход от ручного управления к автоматизированной инфраструктуре при использовании Terraform затруднен, поскольку он отображает существующую инфраструктуру.
Установите Ansible и OpenStack SDK.
Сначала вам необходимо установить Ansible и его SDK. Для этого у вас должен быть установлен Docker или Podman.
Я использую pip-установку Ansible:
$ python3 -m pip install ansible-navigator --user
Команда ansible-navigator
используется платформой автоматизации AWX или Red Hat Ansible для запуска сборников сценариев Ansible. В отличие от предыдущих специальных команд ansible-playbook
или ansible
, здесь создается контейнер и среда выполнения.
Вы должны создать свою среду выполнения с помощью OpenStack SDK. Для этого я настоятельно рекомендую статью Гиниша Мадаппарамбата о том, как создать среду выполнения.
После создания используйте среду выполнения Ansible для настройки образа:
$ ansible-navigator images
Выберите, какой образ использовать, и запустите плейбук:
$ ansible-navigator run main.yaml --stdout
Пример сборника сценариев
В моем образце пьесы используется та же структура, которую я продемонстрировал в своей статье о Terraform:
$ cat >> main.yaml << EOF
---
- hosts: localhost
vars:
flavors:
- name: "small"
ram: 4096
vcpus: 1
- name: "medium"
ram: 8096
vcpus: 2
- name: "large"
ram: 16384
vcpus: 4
- name: "xlarge"
ram: 32768
vcpus: 8
tasks:
- name: create flavors
openstack.cloud.compute_flavor:
state: present
name: "{{ item.name }}"
ram: "{{ item.ram }}"
vcpus: "{{ item.vcpus }}"
disk: 0
loop:
- flavors
- name: create external network
openstack.cloud.network:
state: present
name: "external-network"
provider_network_type: "flat"
provider_physical_network: "physnet1"
external: true
- name: create external subnet
openstack.cloud.subnet:
state: present
name: "external-subnet"
network_name: "external-network"
cidr: "10.0.0.0/8"
gateway_ip: "10.0.0.1"
dns_nameservers:
- "10.0.0.254"
- "10.0.0.253"
allocation_pool_start: "10.0.0.2"
allocation_pool_end: "10.0.254.254"
- name: create external router
openstack.cloud.router:
name: "external-router"
state: present
network: "external-network"
- name: create Cirros image
openstack.cloud.image:
name: cirros
container_format: bare
disk_format: qcow2
state: present
filename: cirros-0.6.1-x86_64-disk.img
- name: create Demo project
openstack.cloud.project:
state: present
name: "Demo"
enabled: True
- name: create demo-user
openstack.cloud.user:
state: present
name: "demo-user"
password: "demo"
default_project: "Demo"
EOF
Полученные результаты
После запуска плейбука вы получаете сети:
(Эй Джей Канлас, CC BY-SA 4.0)
Вы также получаете вкусы:
(Эй Джей Канлас, CC BY-SA 4.0)
И изображения:
(Эй Джей Канлас, CC BY-SA 4.0)
И демо-проект:
(Эй Джей Канлас, CC BY-SA 4.0)
Правильный инструмент
Не существует единственного правильного или неправильного ответа на вопрос, как автоматизировать. Способ реализации автоматизации зависит от потребностей вашей организации, инфраструктуры, конструкции системы и кадровых ресурсов. Выберите один из лучших инструментов с открытым исходным кодом, чтобы начать работу. Приложите усилия сейчас и сэкономьте себе много работы в будущем.