Клиент к API облака REG.RU

Обёртка над api.cloudvps.reg.ru. Само API несложное, но у него есть неочевидные
места, на которые мы наступили на живых машинах, и которые тут обойдены.

- адрес машины лежит в поле ip, networks всегда пустое
- снимок нельзя снять с остановленной машины, API останавливает её сам
- после снимка машина сидит в locked и не удаляется, удаление настойчивое
- тарифы с картами метод sizes не показывает, их список в docs_slugs.md
- тарификация идёт от часа, короткие запуски невыгодны

Claude-Session: https://claude.ai/code/session_01Loz5stgQZH6ofBdMqTxiJu
Этот коммит содержится в:
2026-08-23 18:13:57 +09:00
Коммит bb66bc1681
8 изменённых файлов: 433 добавлений и 0 удалений
+28
Просмотреть файл
@@ -0,0 +1,28 @@
"""Полный цикл работы с машиной под видеокарту.
Поднимаем из готового снимка, работаем, снимаем новый образ, удаляем.
Именно так экономятся деньги: платим за часы счёта, а не за месяц простоя.
"""
import os
from regcloud_api import RegCloud
SIZE = "c8-m32-d128-g1-a4000-gpu" # A4000 16 ГБ, 37.80 р/час
REGION = "openstack-spb1" # карты стоят только в Питере
KEY_FINGERPRINT = os.environ.get("SSH_FINGERPRINT", "")
api = RegCloud()
print("баланс:", api.balance().get("balance_data", {}).get("balance"), "р")
srv = api.create(size=SIZE, image="ubuntu-24-04-amd64-gpu", name="worker",
ssh_keys=[KEY_FINGERPRINT] if KEY_FINGERPRINT else None, region=REGION)
info = api.wait_active(srv["id"])
print("машина готова:", RegCloud.ip_of(info))
# ... тут работа на машине по ssh ...
api.snapshot(srv["id"], "worker-ready", offline=True)
print("снимок поставлен в очередь")
api.destroy(srv["id"])
print("машина удалена, снимок остался")