Cloud VPS на базі OpenStack надає повноцінний REST API, щоби можна було взаємодіяти з хмарою без графічного інтерфейса: створювати сервери, керувати дисками, мережею та безпекою. Це зручно для автоматизації, скриптів та CI/CD.
У цій статті розглянемо роботу через openstack CLI — найпростіший і найзручніший спосіб для більшості завдань.
Що всередині
- Налаштування CLI
- Керування серверами
- Керування дисками
- Floating IP
- Security Groups
- SSH-ключі
- Прямі запити через curl
- Посилання
Налаштування CLI
Для роботи з хмарою у командному рядку знадобиться встановити та налаштувати утиліту OpenStack CLI одним з двох способів:
- Файл clouds.yaml (рекомендується) — постійна конфігурація, налаштовується один раз і використовується у всіх сесіях. Підтримує декілька профілів. Пароль можна зберігати в окремому файлі, щоби не вводити його кожен раз. Підходить, якщо треба часто працювати з хмарою в CLI. Цей спосіб детально описаний нижче.
- RC файл (openrc) — тимчасова конфігурація, налаштовується для поточної сесії терміналу. Підтримує тільки один профіль. Пароль треба вводити при виконанні будь-якої команди. Підходить, якщо потреба працювати з хмарою в CLI виникає рідко.
Крок 1. Встановити OpenStack CLI
pip install python-openstackclient
Крок 2. Налаштувати clouds.yaml
Завантажте файл у панелі керування хмарою. Розділ «Project → API Access → Download OpenStack RC File → OpenStack clouds.yaml File».

За замовчуванням вміст файлу виглядатиме ось так:
clouds:
openstack:
auth:
auth_url: https://cloudpanel.vps.ua:5000
username: "alex.shevchenko@gmail.com"
project_id: c2283c7578884ea9bbf691c2002d586d
project_name: "alex.shevchenko@gmail.com"
user_domain_name: "VPS.ua"
regions:
- Роттердам, Нидерланды
- Львов, Украина
interface: "public"
identity_api_version: 3
Файл не працює з коробки. Вам треба змінити параметр regions. В завантаженому файлі Openstack показує регіони українською, але вони мають відповідати значенням самої хмари та записані у вигляді Netherlands та/або Ukraine.
Окрім цього в одній сутності openstack може бути вказаний тільки один регіон. Якщо у вас є сервери в двох регіонах, треба створити дві сутності openstack.
Робочій файл для двох регіонів буде виглядати таким чином (якщо використовуєте тільки один регіон, можете видалити другий):
clouds:
openstack-nl:
auth:
auth_url: https://eucloudpanel.vps.ua:5000
username: "YOUR_USERNAME"
project_id: YOUR_NL_PROJECT_ID
project_name: "YOUR_PROJECT_NAME"
user_domain_name: "VPS.ua"
region_name: "Netherlands"
interface: "public"
identity_api_version: 3
openstack-ua:
auth:
auth_url: https://cloudpanel.vps.ua:5000
username: "YOUR_USERNAME"
project_id: YOUR_UA_PROJECT_ID
project_name: "YOUR_PROJECT_NAME"
user_domain_name: "VPS.ua"
region_name: "Ukraine"
interface: "public"
identity_api_version: 3
Крок 3. Налаштувати зберігання пароля окремо
Це потрібно для того, щоби не вводити пароль при виконанні кожної команди.
Створіть файл ~/.config/openstack/secure.yaml — CLI автоматично підхопить файл з цією назвою (якщо використовуєте тільки один регіон, можете видалити другий):
clouds:
openstack-nl:
auth:
password: "YOUR_PASSWORD"
openstack-ua:
auth:
password: "YOUR_PASSWORD"
Крок 4. Перевірити що все працює
Для перевірки виконайте таку команду, яка покаже список серверів у вказаному за допомогою флагу –os-cloud регіоні.
openstack --os-cloud=openstack-nl server list
Вказання регіону
Флаг –os-cloud треба вказувати в кожній команді. Навіть у випадку, якщо у вашому конфігураційному файлі лише один регіон. Без цього флагу OpenStack CLI не зможе виконати команду, бо не зрозуміє до якої хмари ви звертаєтеся. Допустимі значення:
- –os-cloud=openstack-nl — Нідерланди
- –os-cloud=openstack-ua — Україна
Також можна задати регіон на сесію. Зручно при тривалій роботі в одному регіоні.
# Встановити регіон «Нідерланди»
export OS_CLOUD=openstack-nl
openstack server list
# Переключитись на регіон «Україна»
export OS_CLOUD=openstack-ua
openstack server list
Керування серверами
Список серверів
openstack --os-cloud=openstack-nl server list
Статус конкретного сервера
openstack --os-cloud=openstack-nl server show SERVER_ID
Створити сервер
Зверніть увагу, що всі параметри, крім останнього, мають бути в лапках.
openstack --os-cloud=openstack-nl server create \
--image "IMAGE_ID" \
--flavor "FLAVOR_ID" \
--key-name "KEY_NAME" \
--network "NETWORK_ID" \
--security-group "SG_ID" \
--boot-from-volume VOLUME_SIZE_GB \
server-name
ID ресурсів можна отримати за допомогою таких команд:
# образи ОС
openstack --os-cloud=openstack-nl image list
# конфігурації (CPU/RAM)
openstack --os-cloud=openstack-nl flavor list
# мережі
openstack --os-cloud=openstack-nl network list
# security groups
openstack --os-cloud=openstack-nl security group list
# SSH-ключі
openstack --os-cloud=openstack-nl keypair list
Прапор –boot-from-volume 50 обов’язковий — у нашій хмарі всі конфігурації йдуть без вбудованого диска. Число — розмір завантажувального диска в ГБ.
Якщо треба використати декілька security groups, додайте декілька прапорів з нового рядка:
--security-group "SG_ID_1" \
--security-group "SG_ID_2" \
Запустити / зупинити / перезавантажити сервер
openstack --os-cloud=openstack-nl server start SERVER_ID
openstack --os-cloud=openstack-nl server stop SERVER_ID
openstack --os-cloud=openstack-nl server reboot SERVER_ID
openstack --os-cloud=openstack-nl server reboot --hard SERVER_ID
Видалити сервер
openstack --os-cloud=openstack-nl server delete SERVER_ID
Керування дисками
Список дисків
openstack --os-cloud=openstack-nl volume list
Створити диск
openstack --os-cloud=openstack-nl volume create --size 50 my-volume
Під’єднати диск до сервера
openstack --os-cloud=openstack-nl server add volume SERVER_ID VOLUME_ID
Від’єднати диск від сервера
openstack --os-cloud=openstack-nl server remove volume SERVER_ID VOLUME_ID
Видалити диск
Спочатку диск треба від’єднати від сервера.
openstack --os-cloud=openstack-nl volume delete VOLUME_ID
Floating IP
Floating IP — публічна IP-адреса, яку можна виділити з пулу і прив’язати до сервера.
Список виділених Floating IP
openstack --os-cloud=openstack-nl floating ip list
Виділити новий Floating IP
Спочатку дізнайтеся ім’я зовнішньої мережі:
openstack --os-cloud=openstack-nl network list --external
Потім виділіть IP:
openstack --os-cloud=openstack-nl floating ip create EXTERNAL_NETWORK_ID
Прив’язати Floating IP до сервера
openstack --os-cloud=openstack-nl server add floating ip SERVER_ID FLOATING_IP_ADDRESS
Відв’язати Floating IP
openstack --os-cloud=openstack-nl server remove floating ip SERVER_ID FLOATING_IP_ADDRESS
Видалити Floating IP
openstack --os-cloud=openstack-nl floating ip delete FLOATING_IP_ADDRESS
Security Groups
Security groups — це правила фільтрації вхідного та вихідного трафіку. Вбудований фаєрвол для вашої хмари. Докладніше: «Як працювати з групами безпеки в OpenStack».
Список security groups
openstack --os-cloud=openstack-nl security group list
Створити security group
openstack --os-cloud=openstack-nl security group create \
--description "Web servers" web-servers
Додати правила
# Дозволити вхідний SSH openstack --os-cloud=openstack-nl security group rule create \ --protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0 \ --ingress SG_ID # Дозволити вхідний HTTP openstack --os-cloud=openstack-nl security group rule create \ --protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0 \ --ingress SG_ID # Дозволити вхідний HTTPS openstack --os-cloud=openstack-nl security group rule create \ --protocol tcp --dst-port 443 --remote-ip 0.0.0.0/0 \ --ingress SG_ID
Застосувати security group до сервера
openstack --os-cloud=openstack-nl server add security group SERVER_ID SG_ID
Видалити security group
openstack --os-cloud=openstack-nl security group delete SG_ID
SSH-ключі
Список ключів
openstack --os-cloud=openstack-nl keypair list
Створити новий ключ
openstack --os-cloud=openstack-nl keypair create my-key > my-key.pem chmod 600 my-key.pem
Завантажити публічний ключ
openstack --os-cloud=openstack-nl keypair create \
--public-key ~/.ssh/id_rsa.pub my-key
Видалити ключ
openstack --os-cloud=openstack-nl keypair delete my-key
Прямі запити через curl
Якщо потрібна автоматизація без встановлення CLI — наприклад у bash-скриптах або середовищах де не можна встановити Python — можна звертатися до API напряму через HTTP. Це стандартний OpenStack REST API.
Корисно для: інтеграцій, скриптів, дебагу на рівні HTTP.
Повна документація по всіх ендпоінтах
Посилання
Ще декілька корисних джерел:
