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, добавьте несколько флагов c новой строки:
--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.
Полная документация по всем эндпоинтам
Ссылки
Еще несколько полезных источников:
