Клиент дописан до всех двадцати семи эндпоинтов платформы. Добавлено: - регионы, образы с разбивкой на системы и готовые сборки, вторая версия API образов - все действия над сервером: старт, стоп, перезагрузка, переустановка, смена тарифа, клонирование, откат, консоль, бэкапы - снимки целиком, включая ожидание готовности и поиск поднятых из них серверов - ключи доступа, IP-адреса с обратными записями, приватные сети, kubeconfig - история операций, биллинг, расход в час и в сутки - сборка и проверка slug тарифа по правилам платформы - ошибки разложены по смыслу, чтобы ловить прицельно Claude-Session: https://claude.ai/code/session_01Loz5stgQZH6ofBdMqTxiJu
32 строки
1.3 KiB
Python
32 строки
1.3 KiB
Python
"""Развернуть сервер под клиента: выбрать регион и систему, поднять, отдать доступы.
|
|
|
|
Пример под перепродажу хостинга. Тариф собирается из требований, а не берётся
|
|
из готового списка, так что можно продавать любую конфигурацию.
|
|
"""
|
|
import sys
|
|
from regcloud_api import RegCloud, ValidationError
|
|
|
|
api = RegCloud()
|
|
|
|
CPU, RAM, DISK, LINE = 2, 4, 60, "hp"
|
|
REGION = "openstack-msk1"
|
|
OS = "ubuntu-24-04-amd64"
|
|
|
|
size = RegCloud.make_size(CPU, RAM, DISK, LINE) # проверит сочетание сам
|
|
print("тариф:", size, api.size_info(size))
|
|
|
|
available = {i.get("slug") for i in api.distributions()}
|
|
if OS not in available:
|
|
print(f"системы {OS} нет, доступны:", ", ".join(sorted(available)[:8]))
|
|
sys.exit(1)
|
|
|
|
try:
|
|
srv = api.create_server(size=size, image=OS, name=api.random_name(), region=REGION)
|
|
except ValidationError as exc:
|
|
print("платформа не приняла заказ:", exc)
|
|
sys.exit(1)
|
|
|
|
info = api.wait_active(srv["id"])
|
|
print(f"готово. сервер {info['id']}, адрес {RegCloud.ip_of(info)}")
|
|
print("пароль root приходит на почту, либо задайте ssh-ключ при создании")
|