Ansible для serverplus: инфраструктура и настройка серверов
Ansible для serverplus
С Ansible на serverplus работают на двух уровнях. Во-первых, коллекция openstack.cloud создаёт и удаляет саму инфраструктуру (серверы, ключи, сети) декларативно. Во-вторых, обычные плейбуки по SSH настраивают уже поднятые серверы. А динамический inventory берёт список серверов прямо из OpenStack — не нужно вручную вести список хостов.
Установка
pip install "ansible>=9" openstacksdk
ansible-galaxy collection install openstack.cloud
ansible --versionДоступ берётся из того же ~/.config/openstack/clouds.yaml, что и для CLI/Terraform. Модули читают его по имени облака (переменная OS_CLOUD).
Создание сервера
Плейбук create.yml — запускается локально, обращается к API serverplus:
- hosts: localhost
gather_facts: false
environment:
OS_CLOUD: serverplus
tasks:
- name: SSH key
openstack.cloud.keypair:
name: ansible-key
public_key_file: ~/.ssh/id_rsa.pub
- name: Server
openstack.cloud.server:
name: web-1
image: "Ubuntu 22.04"
flavor: m1.small
key_name: ansible-key
network: private
security_groups: [default]
auto_ip: true
register: srv
- debug:
var: srv.server.access_ipv4Про сеть. Как и везде: сеть сервера должна иметь роутер с внешним шлюзом, иначе не будет интернета.
Динамический inventory
Файл inventory.openstack.yml — Ansible сам подтянет ваши серверы из OpenStack:
plugin: openstack.cloud.openstack
expand_hostvars: true
all_projects: falseexport OS_CLOUD=serverplus
ansible-inventory -i inventory.openstack.yml --list
ansible -i inventory.openstack.yml all -m pingНастройка серверов по SSH
Дальше — обычный Ansible. Пример site.yml: установить и запустить nginx:
- hosts: all
become: true
tasks:
- name: nginx
apt:
name: nginx
state: present
update_cache: true
- name: start and enable
service:
name: nginx
state: started
enabled: trueПараметры подключения удобно задать в ansible.cfg:
[defaults]
remote_user = ubuntu
private_key_file = ~/.ssh/id_rsa
host_key_checking = FalseБезопасность
clouds.yaml— под защитой:chmod 600, вне git; используйте application credentials, а не пароль аккаунта.- Секреты — в ansible-vault (
ansible-vault encrypt), а не в открытом виде. - Отдельные SSH-ключи под автоматизацию и их периодическая ротация.
Частые вопросы
Ошибка «openstacksdk is required». Установите openstacksdk в то же окружение Python, где стоит Ansible.
Inventory пустой. Проверьте OS_CLOUD=serverplus и что серверы существуют (openstack server list).
Не подключается по SSH. Нужен floating IP, открытый 22 порт и правильные пользователь/ключ (для Ubuntu — ubuntu).