Automatize OpenStack usando Ansible
O Ansible oferece flexibilidade única ao automatizar sua infraestrutura.
Demonstrei como gerencio OpenStack usando Terraform em meu artigo anterior. Usar o Terraform como infraestrutura como código (IaC) é uma vantagem significativa, mas também exige que a equipe o apoie. Às vezes, tudo o que você realmente precisa é a capacidade de provisionar a infraestrutura como recursos cronometrados, sem a intenção de construir estruturas de dados duradouras. Quando projeto um ambiente flexível, prefiro a linguagem declarativa do Ansible.
A flexibilidade do Ansible me permite projetar casos de uso que incluem:
- Um ambiente de teste cronometrado e que pode ser excluído após o uso.
- Um ambiente de treinamento fornecido por um período específico de tempo e depois destruído.
- Passar de uma infraestrutura manual para uma automatizada quando o Terraform é difícil porque mapeia sua infraestrutura existente.
Instale o SDK Ansible e OpenStack
Primeiro, você precisa instalar o Ansible e seu SDK. Para isso, você deve ter o Docker ou Podman instalado.
Eu uso a instalação pip do Ansible:
$ python3 -m pip install ansible-navigator --user
O comando ansible-navigator
é usado pelo AWX ou Red Hat Ansible Automation Platform para executar playbooks Ansible. Ao contrário dos comandos ad-hoc ansible-playbook
ou ansible
anteriores, isso cria um contêiner e um ambiente de execução.
Você deve construir seu ambiente de execução com um OpenStack SDK. Para isso recomendo fortemente o artigo de Gineesh Madapparambath sobre como criar um ambiente de execução.
Após a criação, use seu ambiente de execução Ansible para configurar sua imagem:
$ ansible-navigator images
Escolha qual imagem usar e execute um manual:
$ ansible-navigator run main.yaml --stdout
Exemplo de manual
Meu exemplo de manual usa a mesma estrutura que demonstrei em meu artigo 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
Resultados
Depois de executar o manual, você obtém redes:
(AJ Canlas, CC BY-SA 4.0)
Você também ganha sabores:
(AJ Canlas, CC BY-SA 4.0)
E imagens:
(AJ Canlas, CC BY-SA 4.0)
E um projeto de demonstração:
(AJ Canlas, CC BY-SA 4.0)
A ferramenta certa
Não existe uma única resposta certa ou errada sobre como você automatiza. A maneira como você implementa sua automação depende das necessidades, da infraestrutura, do design do sistema e dos recursos de equipe da sua organização. Selecione uma das excelentes ferramentas de código aberto disponíveis para começar. Esforce-se agora e poupe muito trabalho no futuro.