Ansible-коллекция для интеграции с Timeweb Cloud через динамический
inventory-плагин mitmx.timeweb.timeweb.
Коллекция предоставляет inventory-плагин, который получает список серверов из API Timeweb Cloud и динамически формирует инвентарь для Ansible.
| Поле | Описание |
|---|---|
| Collection | mitmx.timeweb |
| Inventory Plugin | mitmx.timeweb.timeweb |
| Supported API Endpoint | https://api.timeweb.cloud/api/v1/servers |
| Requirements | Python requests, действующий API-токен Timeweb |
# requirements.yml
collections:
- name: https://github.com/mitmx/timeweb-ansible-collection.git
type: git
version: mainУстановка:
ansible-galaxy collection install -r requirements.ymlИли напрямую:
ansible-galaxy collection install git+https://github.com/mitmx/timeweb-ansible-collection.gitСоздайте inventory-файл, например timeweb.yml:
plugin: mitmx.timeweb.timeweb
api_token: "{{ lookup('env','TIMEWEB_TOKEN') }}"
validate_certs: true
# Необязательные параметры:
# compose:
# ansible_user: "'root'"
# keyed_groups:
# - key: region
# prefix: region_
# groups:
# running: "'status' in hostvars[inventory_hostname] and hostvars[inventory_hostname]['status'] == 'on'"Проверка работы:
ansible-inventory -i timeweb.yml --listЗапуск плейбука с этим inventory:
ansible-playbook -i timeweb.yml site.yml- Зайдите в свой аккаунт Timeweb Cloud → раздел API токены.
- Создайте токен с правами на чтение серверов.
- Установите его в переменную окружения:
export TIMEWEB_TOKEN="ваш_api_токен"| Параметр | Обязателен | Значение по умолчанию | Описание |
|---|---|---|---|
plugin |
Да | — | Должен быть mitmx.timeweb.timeweb |
api_token |
Да | — | API-токен Timeweb Cloud |
api_endpoint |
Нет | https://api.timeweb.cloud |
Базовый URL API |
validate_certs |
Нет | true |
Проверять SSL-сертификаты |
compose |
Нет | {} |
Определение переменных через Jinja2 |
keyed_groups |
Нет | [] |
Автосоздание групп по значениям переменных |
groups |
Нет | {} |
Создание групп по условиям |
Результат ansible-inventory --list:
{
"_meta": {
"hostvars": {
"some-server-name-here": {
"ansible_host": "1.2.3.4",
"id": 1234567,
"status": "off",
"flavor": null,
"region": "ru-1",
"tags": [],
"project": 123
},
"another-server-name-here": {
"ansible_host": "1.2.3.5",
"id": 1234568,
"status": "on",
"flavor": null,
"region": "ru-3",
"tags": [],
"project": 123
}
}
},
"all": {
"children": ["ungrouped"]
}
}