Оплата ВМ и периоды подписки
Период подписки определяет, за какой срок оплачивается ВМ. Смена только периода сохраняет машину, диски, IP-адреса и данные и не требует перезапуска.
Доступные периоды
| Период | Код подписки | Поле при создании через API |
|---|---|---|
| Час | 1h | Оба поля периода отсутствуют |
| Сутки | 1d | period_days: 1 |
| Календарный месяц | 1m | period_months: 1 |
| 3 календарных месяца | 3m | period_months: 3 |
| 6 календарных месяцев | 6m | period_months: 6 |
| 12 календарных месяцев | 12m | period_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 ВМ.