Files
tf_provider/docs/INSTANCE_STATES.md
T

12 KiB

Матрица состояний ресурсов в облаке ngcloud

Основные параметры состояния

1. В структуре инстанса (instance object)

Каждый ресурс имеет следующие флаги:

Параметр Тип Возможные значения Описание
explainedStatus string running, (другие?) Основной объяснительный статус
isCreated boolean true, false Был ли инстанс создан
isDeleted boolean true, false Отмечен ли как удаленный
isSuspended boolean true, false Приостановлен ли
operationIsInProgress boolean true, false Идет ли корректная операция
operationIsPending boolean true, false Есть ли ожидающие операции
uptime number >= 0 Время работы в секундах (0, если не создан)

2. Структура state (instanceState object)

{
  "state": {
    "instanceStateUid": "uuid",
    "version": 1,          // версия состояния
    "dtState": "timestamp", // дата состояния
    "isTest": boolean
  }
}

3. Операции (operations array)

{
  "operation": "create|modify|delete|suspend|resume",
  "dtSubmit": "timestamp",
  "dtStart": null,        // null если еще не началась
  "dtFinish": null,       // null если еще не закончилась
  "isSuccessful": null|true|false,  // null если не выполнялась
  "isInProgress": boolean,
  "isPending": boolean,
  "submitResult": "201|..."  // HTTP статус результата отправки
}

МАТРИЦА СОСТОЯНИЙ

СОСТОЯНИЕ: АКТИВНЫЙ РАБОЧИЙ ИНСТАНС (RUNNING)

isCreated=true
isDeleted=false
isSuspended=false
explainedStatus="running"
operationIsInProgress=false
operationIsPending=false
uptime > 0
state.version >= 1

Значение: Ресурс создан, работает, нет выполняющихся операций


🔄 СОСТОЯНИЕ: СОЗДАНИЕ В ПРОЦЕССЕ (CREATING)

isCreated=true (или может быть false на ранних стадиях)
isDeleted=false
isSuspended=false
operationIsInProgress=true
operationIsPending=false
state.version = 1
operations[0].operation = "create"
operations[0].isSuccessful = null (еще не завершено)
operations[0].dtStart != null
operations[0].dtFinish = null

Значение: Операция создания выполняется


⏸️ СОСТОЯНИЕ: ПРИОСТАНОВЛЕН (SUSPENDED)

isCreated=true
isDeleted=false
isSuspended=true
explainedStatus="suspended" (или может быть другое)
operationIsInProgress=false

Значение: Ресурс создан, но приостановлен (власт нет - suspend)


⏸️ СОСТОЯНИЕ: ПРИОСТАНОВКА В ПРОЦЕССЕ (SUSPENDING)

isCreated=true
isSuspended=false (еще не приостановлен)
operationIsInProgress=true
operations[last].operation = "suspend"
operations[last].isSuccessful = null

Значение: Операция приостановки выполняется


▶️ СОСТОЯНИЕ: ВОЗОБНОВЛЕНИЕ В ПРОЦЕССЕ (RESUMING)

isCreated=true
isSuspended=true (еще приостановлен)
operationIsInProgress=true
operations[last].operation = "resume"
operations[last].isSuccessful = null

Значение: Операция возобновления выполняется


СОСТОЯНИЕ: НЕ СОЗДАН (NOT CREATED)

isCreated=false
isDeleted=false
isSuspended=false
state = null или пуст
uptime = 0
version = null или отсутствует

Значение: Ресурс был определен в коде, но никогда не создавался в облаке


🗑️ СОСТОЯНИЕ: УДАЛЕН (DELETED)

isDeleted=true
isCreated=true (был когда-то создан)
state.version может быть или не быть

Значение: Ресурс был удален, может оставаться в истории


🔄 СОСТОЯНИЕ: УДАЛЕНИЕ В ПРОЦЕССЕ (DELETING)

isCreated=true
isDeleted=false (еще не отмечен как удаленный)
operationIsInProgress=true
operations[last].operation = "delete"
operations[last].isSuccessful = null

Значение: Операция удаления выполняется


🔧 СОСТОЯНИЕ: ИЗМЕНЕНИЕ В ПРОЦЕССЕ (MODIFYING)

isCreated=true
isDeleted=false
operationIsInProgress=true
operations[last].operation = "modify"
operations[last].isSuccessful = null

Значение: Конфигурация ресурса изменяется


СОСТОЯНИЕ: ОПЕРАЦИЯ ОЖИДАЕТ (PENDING)

operationIsPending=true
operationIsInProgress=false
operations[last].dtStart = null (еще не началась, но создана)
operations[last].isSuccessful = null

Значение: Операция создана, но еще не началась (в очереди)


⚠️ СОСТОЯНИЕ: ОШИБКА ОПЕРАЦИИ (OPERATION_FAILED)

operations[last].isSuccessful=false
operations[last].dtFinish != null
operations[last].errorLog != null
operationIsInProgress=false

Значение: Последняя операция завершилась с ошибкой


🔀 СОСТОЯНИЕ: ГИБРИДНОЕ/ПЕРЕХОДНОЕ (HYBRID)

Противоречивые комбинации указывают на переходное состояние:

  • operationIsInProgress=true + operations[last].dtStart=null → операция только создана, еще не началась
  • isCreated=true + operationIsPending=true → есть ожидающая операция
  • state.version=null + isCreated=true → некорректное состояние

АЛГОРИТМ ОПРЕДЕЛЕНИЯ СОСТОЯНИЯ

На уровне API (GET /api/v1/index.cfm/instances/{uid})

def get_instance_state(instance_data):
    """
    instance_data = {
        'isCreated': bool,
        'isDeleted': bool,
        'isSuspended': bool,
        'explainedStatus': str,
        'operationIsInProgress': bool,
        'operationIsPending': bool,
        'uptime': float,
        'state': {...} or null,
        'operations': [...]
    }
    """
    
    # Шаг 1: Проверка удаления
    if instance_data['isDeleted']:
        return 'DELETED'
    
    # Шаг 2: Проверка создания
    if not instance_data['isCreated']:
        return 'NOT_CREATED'
    
    # Шаг 3: Проверка операции в процессе
    if instance_data['operationIsInProgress']:
        last_op = instance_data['operations'][-1] if instance_data['operations'] else None
        if last_op:
            operation_type = last_op.get('operation', 'unknown')
            return f'{operation_type.upper()}_IN_PROGRESS'
    
    # Шаг 4: Проверка ожидающей операции
    if instance_data['operationIsPending']:
        last_op = instance_data['operations'][-1] if instance_data['operations'] else None
        if last_op and not last_op.get('dtStart'):
            return 'OPERATION_PENDING'
    
    # Шаг 5: Проверка приостановки
    if instance_data['isSuspended']:
        return 'SUSPENDED'
    
    # Шаг 6: Проверка основного статуса
    if instance_data['explainedStatus'] == 'running':
        return 'RUNNING'
    
    # Шаг 7: Проверка ошибок в операциях
    if instance_data['operations']:
        last_op = instance_data['operations'][-1]
        if last_op.get('isSuccessful') == False:
            return 'OPERATION_FAILED'
    
    return 'UNKNOWN'

РЕКОМЕНДУЕМЫЕ ЗАПРОСЫ К API

Получить список ресурсов определенного типа

GET /api/v1/index.cfm/instances?fields=instanceConfigDtCreated,instanceUid,displayName,svc,uptime,explainedStatus,svcExtendedName,updaterLogin,updaterShortname,operationIsInProgress,operationIsPending,monitoringUrl&search={resource_name}&isAuxiliary=false&isDeleted=false

Получить полную информацию о ресурсе

GET /api/v1/index.cfm/instances/{instance_uid}?fields=instanceConfigDtCreated,instanceUid,displayName,descr,svc,state,operations,availableOperations,uptime,isDeleted,updaterLogin,updaterShortname,explainedStatus,man,dependencies,dependentInstances,svcExtendedName

Выполнить операцию

POST /api/v1/index.cfm/instanceOperations
Content-Type: application/json

{
  "instanceUid": "uuid",
  "operation": "create|modify|delete|suspend|resume"
}

Получить статус операции

GET /api/v1/index.cfm/instanceOperations/{operation_uid}?fields=instanceOperationUid,instanceUid,state,stages,cfsParams,isSuccessful,dtCreated,dtUpdated,dtStart,dtFinish,operation,svcOperationId,svc,displayName,submitResult,duration,errorLog,updaterShortname,man,nestedRefData,isInProgress,isPending,dtSubmit

ПРИМЕРЫ ИЗ HAR

Пример 1: RUNNING инстанс

{
  "displayName": "Newly Added",
  "isCreated": true,
  "isDeleted": false,
  "isSuspended": false,
  "explainedStatus": "running",
  "operationIsInProgress": false,
  "operationIsPending": false,
  "uptime": 1102.739073,
  "state": {
    "instanceStateUid": "48bfdbc5-e8fc-4286-8098-d6ab7f6de50e",
    "version": 2
  }
}

Пример 2: CREATE_IN_PROGRESS инстанс

{
  "displayName": "ttst00",
  "isCreated": true,
  "isDeleted": false,
  "isSuspended": false,
  "explainedStatus": "running",
  "operationIsInProgress": false,
  "operationIsPending": true,
  "uptime": 0,
  "operations": [
    {
      "operation": "modify",
      "dtSubmit": "2026-01-22T19:30:21.790+0300",
      "dtStart": null,
      "dtFinish": null,
      "isSuccessful": null,
      "isInProgress": false,
      "isPending": true
    }
  ]
}

Пример 3: DELETE_IN_PROGRESS инстанс

{
  "displayName": "ttt0-terraform",
  "isCreated": true,
  "isDeleted": false,
  "isSuspended": false,
  "operations": [
    {
      "operation": "delete",
      "dtSubmit": "2026-01-22T19:28:24.720+0300",
      "dtStart": null,
      "dtFinish": null,
      "isSuccessful": null
    }
  ]
}

СВОДНАЯ ТАБЛИЦА ВОЗМОЖНЫХ СОСТОЯНИЙ

Состояние isCreated isDeleted isSuspended operationIsInProgress Описание
NOT_CREATED false false false false Еще не создан
CREATING true false false true Создание выполняется
RUNNING true false false false Работает нормально
MODIFYING true false false true Конфигурация изменяется
SUSPENDING true false false true Приостановка выполняется
SUSPENDED true false true false Приостановлен
RESUMING true false true true Возобновление выполняется
DELETING true false false true Удаление выполняется
DELETED true true - - Удален
OPERATION_PENDING true false - false Есть ожидающая операция
OPERATION_FAILED true false - false Операция завершилась ошибкой