Перейти к основному содержимому

Оплата ВМ и периоды подписки

Период подписки определяет, за какой срок оплачивается ВМ. Смена только периода сохраняет машину, диски, IP-адреса и данные и не требует перезапуска.

Доступные периоды​

ПериодКод подпискиПоле при создании через API
Час1hОба поля периода отсутствуют
Сутки1dperiod_days: 1
Календарный месяц1mperiod_months: 1
3 календарных месяца3mperiod_months: 3
6 календарных месяцев6mperiod_months: 6
12 календарных месяцев12mperiod_months: 12

period_days и period_months взаимоисключающие. Значения period_days: 30 и другие количества суток, кроме 1, отклоняются с HTTP 422 до списания и создания ВМ. Для месяца используйте period_months: 1.

Месяц считается по календарю, а не как 30 суток. Часовая и суточная цены могут включать надбавку относительно месячного тарифа. Для нескольких месяцев могут действовать скидки. Точную цену, включая дополнительные ресурсы и услуги, показывает расчёт перед применением.

Сумма подписки — цена всего указанного периода: например, amount_per_period рядом с period_type: "1d" означает цену за сутки. Она не делится на 30 при отображении. Месячная цена тарифа и текущая цена суточной подписки могут отличаться.

Смена периода в панели​

Откройте ВМ → «Изменить параметры» → «Новый период». Оставьте CPU, RAM, диск и план без изменений, если требуется сменить только период оплаты. Проверьте стоимость нового периода, возврат за остаток текущего и сумму списания, затем примените изменения.

Новый период начинается при применении. Неиспользованная часть текущего оплаченного периода возвращается на бонусный баланс со сроком 365 дней. Затем оплачивается новый период: сначала бонусами, затем основным балансом. Если средств с учётом возврата недостаточно, финансовая операция не применяется. Просроченную подписку сначала нужно продлить.

Автопродление настраивается отдельно. Изменение только автопродления не списывает деньги и не запускает остановленную ВМ.

Чтение и изменение через API​

Фактическое состояние подписки возвращает:

GET /v1/projects/{project_id}/vms/{vm_id}/subscription
Authorization: Bearer <API_KEY>

В ответе доступны period_type, amount_per_period, currency, status, auto_renew, paid_through_at и next_charge_at.

Для смены только периода:

PATCH /v1/projects/{project_id}/vms/{vm_id}/subscription
Authorization: Bearer <API_KEY>
Content-Type: application/json

{"period_type": "1m"}

В том же запросе можно передать auto_renew. Передайте хотя бы одно из двух полей. Цену рассчитывает сервер; задавать её вручную не нужно. Повтор запроса с уже установленными настройками не вызывает повторного списания. После ошибки при одновременной смене периода и автопродления прочитайте подписку перед повтором: смена периода могла уже завершиться.

Ключу нужны права vm:read для чтения или vm:update для изменения. Создатель ключа также должен иметь соответственно account:view_billing или account:manage_billing в аккаунте.

Terraform​

Используйте провайдер 0.11.0 или новее. Он поддерживает изменение периода и автопродления существующей ВМ без замены ресурса.

terraform {
required_providers {
tatnet = {
source = "tatnet-ru/tatnet"
version = ">= 0.11.0, < 1.0.0"
}
}
}

В существующем ресурсе tatnet_vm замените period_days = 30 одним из вариантов:

billing_period = "1m"

или:

period_months = 1

Задавайте только одно из полей billing_period, period_months, period_days. billing_period принимает коды из таблицы выше; period_days поддерживает только 1. Если поля отсутствуют, используется почасовая оплата.

Выполните terraform init -upgrade и terraform plan. Для смены только периода ожидается обновление на месте (~), без уничтожения и создания ВМ. Проверьте план перед terraform apply, особенно для машин с постоянными данными. Провайдер 0.10.2 не подходит для такой миграции: изменение периода в нём требует замены ресурса.

После обновления фактические условия доступны в вычисляемых полях subscription_period, amount_per_period, currency. Полная схема — в справочнике ресурса tatnet_vm.

Ранее созданные подписки​

В старой реализации period_days: N могло создать суточную подписку с ценой N суток за каждое суточное продление. Если ВМ создавалась с period_days: 30, проверьте фактические период и сумму подписки. Обновление провайдера или API само по себе не исправляет существующие подписки и прошлые списания. Для проверки прошлых списаний обратитесь в поддержку, указав ID ВМ.