Документация API
v1

Документация Public API v1

Общее

API используется для автоматизации рутинных задач в облаке и позволяет управлять элементами инфраструктуры с помощью HTTP-запросов.

Формат запросов

При выполнении запроса, ID сущности передается в URL.
Остальные параметры передаются в теле запроса.
Токен передается в заголовке запроса (см. “Авторизация”).
Параметры ответа возвращаются в теле ответа.

Авторизация

Доступ к API осуществляется с помощью JWT-токена, сгенерированного сервисом.

Токенами можно управлять в личном кабинете в разделе Аккаунт → Токены API. Его необходимо передавать в заголовке каждого запроса в формате:

Authorization: Bearer <JWT>

где <JWT> — сгенерированный токен.

Ошибки и коды ответа

В данном разделе представлено описание структуры ответа, ошибок и кодов. Сервис возвращает тело ответа в формате JSON.

Структура

Успешный ответ может не содержать тела, но содержит код ответа.

Ошибочный ответ содержит объект error, который содержит в себе поля: code — числовой идентификатор и message — строковое пояснение к ошибке.

{
  "code": 400,
  "title": "Bad request",
  "error": {
    "message": "Volume must be in ('in-use',) statuses"
  }
}

Успешный ответ имеет следующую структуру:

{
  "code": 200,
  "title": "Ok",
  "result": {
    ...
  }
}

Или такую:

{
  "code": 200,
  "title": "Ok",
  "results": [
    ...
  ]
}

Где result — объект, содержащий информацию о единичном ресурсе, а results — массив таких объектов.

Успешный ответ

  • 200 (OK) — запрос выполнен успешно, подробности в теле ответа.
  • 201 (Created) — объект успешно создан.
  • 202 (Accepted) — запрос на создание объекта принят.
  • 204 (No Content) — запрос на удаление объекта принят.

Ошибки

Клиентские ошибки

  • 400 (Bad request) — неверные данные запроса. Также возникает, если в параметре передан неверный тип, например, str вместо int.
  • 401 (Unauthorized) — авторизация не пройдена или адрес источника заблокирован сервисом.
  • 403 (Forbidden) — доступ к объекту с текущими правами запрещен.
  • 404 (Not Found) — объект не найден.
  • 405 (Method Not Allowed) — для данного объекта не применяется указанный метод.
  • 409 (Conflict) — запрос не применим из-за текущего статуса ресурса, например, нельзя перезагрузить сервер, если изменяется количество ресурсов.
  • 429 (Too Many Requests) — слишком много запросов в единицу времени. Применяется при лимитировании ресурса.

Ошибки сервиса

  • 500 (Internal Server Error) — общая ошибка, сигнализирующая о проблеме.

Текстовый код ошибки

В теле ответа присутствует текстовый код ошибки. Коды могут добавляться, но не могут быть изменены или удалены в рамках одной мажорной версии API. Примеры кодов:

  • Bad request — в запросе передан неверный аргумент
  • InternalError — проблема в работе сервиса
  • Too many Requests — сработало ограничение на количество операций с данным ресурсом в единицу времени
  • Not found — ресурс не найден
  • Forbidden — доступ к ресурсу запрещен
  • Unauthorized — авторизация не пройдена

Методы

Методы делятся на идемпотентные и неидемпотентные.

Метод HTTP является идемпотентным, если повторный идентичный запрос, сделанный один или несколько раз подряд, имеет один и тот же эффект, не изменяющий состояние ресурса инфраструктуры.

GET

Идемпотентный.

Запрос возвращает объект или список объектов. На GET запрос к любому ресурсу сервис генерирует ответ, содержащий следующие поля:

  • именованный объект — объект верхнего уровня или список объектов (например server или servers)
    • id — уникальный идентификатор в рамках сервиса.
    • status — текущий статус объекта (см ниже).
    • links — список состоящий из объектов, которые содержат ссылку на подробную информацию о ресурсе (сервер, плавающий IP, диск или снапшот). В будущем в этом списке появятся ссылки на другие версии API. rel указывает версию API.

При успешном запросе возвращает 200 (ОК) с телом ответа или 404 (Not Found) без тела, если ресурс не найден.

POST

Неидемпотентный.

Возвращает 201 (Created), если объект успешно создан.

Если объект создается, ресурс возвращает 202 (Accepted). В этом случае изменение статуса объекта отображается в поле объекта status, при GET-запросе.

При запросе с конкретным ID, например, POST /servers/1 — сервис возвращает 404 (Not Found) с текстовым кодом Not Found.

DELETE

Неидемпотентный.

Возвращает 204 (No Content), если объект удалось удалить или соответствующую ошибку.

Может быть использован в длительных операциях. В этом случае изменение статуса объекта отображается в поле объекта status при GET-запросе.

Фильтрация и сортировка

Сервис поддерживает сортировку и фильтрацию с помощью параметров запроса.
Сортировка поддерживается для разных страниц в режиме пагинации.

Ключевые слова для фильтрации: {field_name}__{условие}={значение}

Условия:

  • gt: > (Больше чем)
  • gte: >= (Больше или равно)
  • lt: < (Меньше чем)
  • lte: <= (Меньше или равно)
  • range: field_name >= value1 and field_name <= value2 value1 или value2 могу быть пустыми: {field_name}__range={value1}:{value2}
  • in: {field_name}__in={value1},{value2},{value3},{value4}

Ключевое слово для сортировки:

  • order={field_name} для сортировки по возрастанию (ASC)
  • order=-{field_name} для сортировки по убыванию (DESC)

Инфраструктура

В этом разделе описаны методы работы с инфраструктурными сущностями проекта.

Проект

Логическая структура, содержащая в себе другие элементы, такие как: серверы, диски, IP-адреса и т.д.

Проекты (список)

Запрос возвращает список проектов.
GET
/v1/projects

Параметры запроса

Отсутствуют

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в результирующем ответе

  • results
    array

    Массив проектов

  • results.item
    object

    Объект, содержащий параметры проекта

  • results.item.created_in
    string

    Дата создания проекта

  • results.item.has_abuse
    boolean

    Наличие неразрешенного тикета за нарушение правил. Если это значение true, то проект может быть остановлен в течение 24 часов

  • results.item.id
    string

    Уникальный идентификатор проекта

  • results.item.name
    string

    Название проекта

  • results.item.status
    string

    Статус проекта

  • results.item.stopping_reason
    string

    Причина остановки

  • results.item.summary
    object

    Общая информация о проекте

  • results.item.summary.floating_ips
    integer

    Количество используемых плавающих IP адресов

  • results.item.summary.networks
    integer

    Количество используемых сетей

  • results.item.summary.servers
    integer

    Количество используемых серверов

  • results.item.summary.volumes
    integer

    Количество используемых дисков

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "results": [
    {
      "status": "ACTIVE",
      "summary": {
        "servers": 3,
        "volumes": 2,
        "floating_ips": 1,
        "networks": 1
      },
      "name": "visionary-fractal-tench",
      "id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
      "stopping_reason": null
    }
  ],
  "count": 1
}

Образы операционных систем (список)

Запрос возвращает список образов ОС, доступных для установки. В случае успешного выполнения возвращает код 200
GET
/v1/projects/{project_id}/images

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в результирующем ответе

  • results
    array

    Массив образов ОС

  • results.item
    object

    Объект, содержащий параметры образов ОС

  • results.item.id
    string

    Уникальный идентификатор образа

  • results.item.name
    string

    Наименование образа

  • results.item.operation_system
    object

    Объект операционной системы с параметрами ниже

  • results.item.operation_system.distribution
    string

    Название дистрибутива

  • results.item.operation_system.os_family
    string

    Семейство операционных систем

  • results.item.operation_system.version
    string

    Версия операционной системы

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/images"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "results": [
    {
      "operation_system": {
        "version": "10",
        "distribution": "debian",
        "os_family": "linux"
      },
      "name": "Debian 10",
      "id": "29efc774-eeba-45ac-86e1-3a806eeaee45"
    },
    {
      "operation_system": {
        "version": "20",
        "distribution": "ubuntu",
        "os_family": "linux"
      },
      "name": "Ubuntu 20",
      "id": "a9a954ea-40ee-463a-814e-49070317556c"
    },
    {
      "operation_system": {
        "version": "8",
        "distribution": "centos",
        "os_family": "linux"
      },
      "name": "CentOS 8",
      "id": "d09ea90e-0a54-4342-b637-e31a022a47ab"
    },
  ],
  "count": 3
}

Лимиты проекта (список)

Запрос возвращает информацию по лимитам ресурсов, доступным на проекте.
GET
/v1/projects/{project_id}/limits

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта, для которого получаем список образов ОС. Можно получить из запроса GET /v1/projects.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в результирующем ответе

  • results
    array

    Массив лимитов

  • results.item
    object

    Объект, содержащий параметры лимита

  • results.item.max
    integer

    Верхнее ограничение по использованию ресурса

  • results.item.measure
    string

    Единица измерения

  • results.item.name
    string

    Наименование ресурса

  • results.item.used
    integer

    Количество использованного ресурса

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/limits"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "results": [
    {
      "max": 0,
      "name": "bandwidth"
    },
    {
      "max": 300,
      "name": "disk-space",
      "used": 60
    },
    {
      "max": 5,
      "name": "floating-ips",
      "used": 1
    },
    {
      "max": 5,
      "name": "servers",
      "used": 3
    },
    {
      "max": 100,
      "name": "ssh-keypair",
      "used": 1
    },
    {
      "max": 10,
      "name": "volumes",
      "used": 3
    }
  ],
  "count": 6
}

Серверы

Блок вычислительных ресурсов, к которому подключаются диски и IP-адреса.

Серверы (список)

Запрос возвращает список серверов, доступных на проекте
GET
/v1/projects/{project_id}/servers

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в результирующем ответе

  • results
    array

    Массив серверов

  • results.item
    object

    Объект, содержащий параметры сервера

  • results.item.created_in
    string

    Дата создания сервера

  • results.item.disk_data
    array

    Список дисков, которые подключены к серверу

  • results.item.disk_data.item
    object

    Объект, содержащий информацию о диске

  • results.item.disk_data.item.id
    string

    Уникальный идентификатор диска

  • results.item.disk_data.item.links
    array

    Список ссылок на детальную информацию о диске

  • results.item.disk_data.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.disk_data.item.links.item.href
    string

    Ссылка

  • results.item.disk_data.item.links.item.rel
    string

    Версия API

  • results.item.disk_data.item.storage_type
    string

    Тип диска. volume - для сетевых дисков, local - для локальных

  • results.item.flavor
    object

    Объект, содержащий параметры о вычислительных ресурсах сервера

  • results.item.flavor.ram
    integer

    Количество RAM

  • results.item.flavor.vcpus
    integer

    Количество vCPU

  • results.item.id
    string

    Уникальный идентификатор сервера

  • results.item.image
    string

    Образ операционной системы, используемый для создания сервера

  • results.item.in_rescue
    string

    Находится ли сервер в режиме восстановления

  • results.item.links
    array

    Список ссылок на детальную информацию о сервере

  • results.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.links.item.href
    string

    Ссылка

  • results.item.links.item.rel
    string

    Версия API

  • results.item.name
    string

    Имя сервера

  • results.item.project_id
    string

    Уникальный идентификатор проекта

  • results.item.status
    string

    Статус проекта

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/servers"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "results": [
    {
      "created_in": "2021-05-11T10:55:14Z",
      "name": "ubuntu20_1cpu_2048ram",
      "disk_data": [
        {
          "id": "6597de43-fa80-406b-8317-0f09976f6ea0",
          "storage_type": "local",
          "links": [
            {
              "href": "https://api.clo.ru/v1/local-disks/6597de43-fa80-406b-8317-0f09976f6ea0/detail",
              "rel": "self"
            }
          ]
        }
      ],
      "project_id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
      "status": "STOPPED",
      "id": "b7cd3947-84af-415a-ab26-59237db94221",
      "image": "a9a954ea-40ee-463a-814e-49070317556c",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/b7cd3947-84af-415a-ab26-59237db94221/detail",
          "rel": "self"
        }
      ],
      "flavor": {
        "cpu": 1,
        "ram": 2048
      }
    },
    {
      "created_in": "2021-05-12T07:11:23Z",
      "name": "ubuntu20_2cpu_4096ram",
      "disk_data": [
        {
          "id": "59fc2585-d6ca-4f47-add5-3c89bcf0164f",
          "storage_type": "local",
          "links": [
            {
              "href": "https://api.clo.ru/v1/local-disks/59fc2585-d6ca-4f47-add5-3c89bcf0164f/detail",
              "rel": "self"
            }
          ]
        }
      ],
      "project_id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
      "status": "BUILDING",
      "id": "548983bb-81bc-4baa-a91b-5ef86ceb2cea",
      "image": "a9a954ea-40ee-463a-814e-49070317556c",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/548983bb-81bc-4baa-a91b-5ef86ceb2cea/detail",
          "rel": "self"
        }
      ],
      "flavor": {
        "cpu": 2,
        "ram": 4096
      }
    }
  ],
  "count": 2
}

Создать сервер

Запрос создает сервер с заданными параметрами
POST
/v1/projects/{project_id}/servers

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects.

  • addresses
    array

    Массив IP-адресов сервера

  • addresses.item
    object

    Элемент, представляющий IP-адрес сервера. Если передать пустой массив, то создастся сервер без IP адреса

  • addresses.item.ddos_protection
    boolean

    При установке флага вы получите защищенный от DDoS-атак IP

  • addresses.item.external
    boolean

    При значении true создаст сервер со статическим IP-адресом

  • addresses.item.floatingip_id
    string

    Если в проекте уже есть плавающий IP, то, передав ID этого IP, его можно подключить на этапе создания

  • addresses.item.version
    integer

    Версия IP. Либо 4, Либо 6

  • addresses.item.with_floating
    boolean

    При значении true создаст плавающий IP и подключит его к серверу

  • flavor
    object

    Объект, указывающий количество ресурсов сервера

  • flavor.ram
    integer

    Количество RAM создаваемого сервера

  • flavor.vcpus
    integer

    Количество vCPU создаваемого сервера

  • image
    string

    Образ операционной системы, используемый для создания сервера

  • keypairs
    array

    Массив SSH-ключей сервера

  • keypairs.item
    string

    Значение SSH-ключа, передаваемого на сервер

  • name
    string

    Имя сервера

  • storages
    array

    Массив дисков сервера

  • storages.item
    object

    Элемент, представляющий диск

  • storages.item.bootable
    boolean

    Является ли диск загрузочным. Только один диск, подключенный к серверу может быть загрузочным, на остальные диски ограничений нет.

  • storages.item.size
    integer

    Размер диска сервера в гигабайтах

  • storages.item.storage_type
    string

    Тип диска. volume - для сетевых дисков, local - для локальных

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.created_in
    string

    Дата создания сервера

  • result.disk_data
    array

    Список, содержащий объекты дисков сервера

  • result.disk_data.item
    object

    Объект, содержащий информацию о диске

  • result.disk_data.item.id
    string

    Уникальный идентификатор диска

  • result.disk_data.item.links
    array

    Список ссылок на детальную информацию о диске

  • result.disk_data.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.disk_data.item.links.item.href
    string

    Ссылка

  • result.disk_data.item.links.item.rel
    string

    Версия API

  • result.disk_data.item.storage_type
    string

    Тип диска. volume - для сетевых дисков, local - для локальных

  • result.flavor
    object

    Шаблон, используемый для создания сервера.

  • result.flavor.ram
    integer

    Количество RAM

  • result.flavor.vcpus
    integer

    Количество vCPU

  • result.id
    string

    Уникальный идентификатор сервера

  • result.image
    string

    Образ операционной системы, используемый для создания сервера

  • result.links
    array

    Список ссылок на детальную информацию о сервере

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.name
    string

    Имя сервера

  • result.status
    string

    Статус сервера

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/servers"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(
    url = URL,
    headers = HEADERS,
    json = {
        "name": "test",
        "flavor": {
            "ram": 4,
            "vcpus": 2
        },
        "image": "{{image_id}}",
        "addresses": [
            {"version": 4, "external": True},
            {"version": 4, "external": False, "with_floating": True},
        ],
        "storages": [
            {
                "size": 10,
                "bootable": True,
                "storage_type": "local"
            },
            {
                "size": 10
            }
        ]
    }
)
Пример ответа:
{
  "code": 201,
  "title": "Created",
  "result": {
    "name": "test",
    "created_in": "2021-05-21T06:36:07+00:00",
    "id": "30ad28ac-5d2d-446f-8b39-ee6df6d05834",
    "flavor": {
      "vcpus": 1,
      "ram": 2048
    },
    "status": "BUILDING",
    "disk_data": [
      {
        "storage_type": "local",
        "links": [
          {
            "rel": "self",
            "href": "https://api.clo.ru/v1/local-disks/7c1be79b-d196-4ee4-a1c0-24f7a97ddd30/detail"
          }
        ],
        "id": "7c1be79b-d196-4ee4-a1c0-24f7a97ddd30"
      }
    ],
    "image": "a9a954ea-40ee-463a-814e-49070317556c",
    "links": [
      {
        "rel": "self",
        "href": "https://api.clo.ru/v1/servers/30ad28ac-5d2d-446f-8b39-ee6df6d05834/detail"
      }
    ]
  }
}

Удаление сервера

Запрос удаляет сервер из проекта
DELETE
/v1/servers/{server_id}

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.delete(url = URL, headers = HEADERS)

Сервер (подробности)

Возвращает детальную информацию по серверу с указанным ID
GET
/v1/servers/{server_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса.

  • result.addresses
    array

    Массив IP-адресов сервера

  • result.addresses.item
    object

    Элемент, представляющий IP-адрес сервера

  • result.addresses.item.ddos_protection
    boolean

    Защита от DDoS-атак

  • result.addresses.item.external
    boolean

    Является ли IP-адрес внешним

  • result.addresses.item.mac_addr
    string

    MAC-адрес интерфейса

  • result.addresses.item.name
    string

    Имя IP-адреса

  • result.addresses.item.type
    string

    Тип IP-адреса

  • result.addresses.item.version
    integer

    Версия IP-адреса

  • result.created_in
    string

    Дата создания сервера

  • result.disk_data
    array

    Список, содержащий объекты дисков сервера

  • result.disk_data.item
    object

    Объект, содержащий информацию о диске

  • result.disk_data.item.id
    string

    Уникальный идентификатор диска

  • result.disk_data.item.links
    array

    Список ссылок на детальную информацию о диске

  • result.disk_data.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.disk_data.item.links.item.href
    string

    Ссылка

  • result.disk_data.item.links.item.rel
    string

    Версия API

  • result.disk_data.item.storage_type
    string

    Тип диска. volume - для сетевых дисков, local - для локальных

  • result.flavor
    object

    Шаблон, используемый для создания сервера

  • result.flavor.ram
    integer

    Количество RAM

  • result.flavor.vcpus
    integer

    Количество vCPU

  • result.guest_agent
    boolean

    Установлен ли guest-agent в систему

  • result.id
    string

    Уникальный идентификатор сервера

  • result.image
    string

    Образ операционной системы, используемый для создания сервера

  • result.name
    string

    Имя сервера

  • result.project_id
    string

    Уникальный идентификатор проекта

  • result.rescue_mode
    string

    Находится ли сервер в режиме восстановления

  • result.status
    string

    Статус сервера

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "created_in": "2021-05-11T10:55:14+00:00",
    "name": "ubuntu20_1cpu_2048ram",
    "disk_data": [
      {
        "id": "6597de43-fa80-406b-8317-0f09976f6ea0",
        "storage_type": "local",
        "links": [
          {
            "href": "https://api.clo.ru/v1/local-disks/6597de43-fa80-406b-8317-0f09976f6ea0/detail",
            "rel": "self"
          }
        ]
      }
    ],
    "project_id": "81de94b0-5749-4dea-aa2d-f8a0d328dfcc",
    "guest_agent": true,
    "status": "STOPPED",
    "id": "b7cd3947-84af-415a-ab26-59237db94221",
    "addresses": [
      {
        "external": false,
        "name": "192.168.0.5"
      },
      {
        "external": true,
        "name": "195.140.146.35"
      }
    ],
    "image": "a9a954ea-40ee-463a-814e-49070317556c",
    "flavor": {
      "cpu": 1,
      "ram": 2048
    },
    "rescue_mode": "NO"
  }
}

Смена пароля сервера

Запрос изменяет пароль на указанном сервере
POST
/v1/servers/{server_id}/password

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

  • password
    string

    Новое значение пароля

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/password"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'password': 'my_strong_password'})

Перезагрузить сервер

Запрос перезагружает указанный сервер
POST
/v1/servers/{server_id}/reboot

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

  • reboot
    object

    Объект, содержащий параметры запроса на перезагрузку

  • reboot.type
    string

    Либо HARD, либо SOFT

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/reboot"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'reboot': {'type': 'SOFT'}})

Изменить параметры сервера

Запрос изменяет параметры выбранного сервера
POST
/v1/servers/{server_id}/resize

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

  • ram
    integer

    Новое значение RAM

  • vcpus
    integer

    Новое значение vCPU

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/resize"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'ram': '5', 'vcpus': 4})

Включить сервер

Запрос инициирует процедуру включения остановленного сервера
POST
/v1/servers/{server_id}/start

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/start"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS)

Выключить сервер

Запрос инициирует процедуру остановки запущенного сервера
POST
/v1/servers/{server_id}/stop

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса GET /v1/projects/{project_id}/servers.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/stop"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS)

Диски

Диски в инфраструктуре CLO — аналоги физических дисков для хранения оперативной информации и работы с ней. Диски отличаются по типу и назначению.

Локальный диск (подробности)

Возвращает детальную информацию по локальному диску с указанным ID.
GET
/v1/local-disks/{local_disk_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • local_disk_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса v1/projects/{project_id}/local-disks

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.attached_to_server
    object

    Объект содержащий информацию о сервере, к которому прикреплен диск

  • result.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • result.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • result.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.attached_to_server.links.item.href
    string

    Ссылка

  • result.attached_to_server.links.item.rel
    string

    Версия API

  • result.bootable
    boolean

    Является ли диск загрузочным

  • result.created_in
    string

    Дата создания диска

  • result.id
    string

    Уникальный идентификатор диска

  • result.links
    array

    Массив ссылок на детальную информацию о локальном диске

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.name
    string

    Имя диска

  • result.size
    integer

    Размер диска в гигабайтах

  • result.status
    string

    Статус локального диска

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/local-disks/{local_disk_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "size": 20,
    "status": "IN-USE",
    "bootable": true,
    "created_in": "2021-05-07T03:32:04Z",
    "name": "Local disk for ubuntu20_1cpu_2048ram",
    "id": "c5335cdd-a386-4f7e-9c00-fa361b3ae9c6",
    "attached_to_server": {
      "id": "dd30177a-2c06-46a8-8f1d-19830f44d389",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/dd30177a-2c06-46a8-8f1d-19830f44d389/detail",
          "rel": "self"
        }
      ]
    },
    "links": [
      {
        "href": "https://api.clo.ru/v1/local-disks/c5335cdd-a386-4f7e-9c00-fa361b3ae9c6/detail",
        "rel": "self"
      }
    ]
  }
}

Локальные диски (список)

Запрос возвращает список локальных дисков, доступных на проекте
GET
/v1/projects/{project_id}/local-disks

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в списке

  • results
    array

    Массив локальных дисков

  • results.item
    object

    Объект, содержащий параметры локального диска

  • results.item.attached_to_server
    object

    Объект содержащий информацию о сервере, к которому прикреплен диск

  • results.item.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • results.item.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • results.item.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.attached_to_server.links.item.href
    string

    Ссылка

  • results.item.attached_to_server.links.item.rel
    string

    Версия API

  • results.item.bootable
    boolean

    Является ли диск загрузочным. В случае локальных дисков всегда будет возвращать true

  • results.item.created_in
    string

    Дата создания диска

  • results.item.id
    string

    Уникальный идентификатор диска

  • results.item.links
    array

    Массив ссылок на детальную информацию о локальном диске

  • results.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.links.item.href
    string

    Ссылка

  • results.item.links.item.rel
    string

    Версия API

  • results.item.name
    string

    Имя локального диска

  • results.item.size
    integer

    Размер диска в гигабайтах

  • results.item.status
    string

    Статус локального диска

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/local-disks"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
"code": 200,
"title": "OK",
"results": [
  {
    "size": 20,
    "status": "IN-USE",
    "bootable": true,
    "created_in": "2021-05-07T03:32:04Z",
    "name": "Local disk for ubuntu20_1cpu_2048ram",
    "id": "c5335cdd-a386-4f7e-9c00-fa361b3ae9c6",
    "attached_to_server": {
      "id": "dd30177a-2c06-46a8-8f1d-19830f44d389",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/dd30177a-2c06-46a8-8f1d-19830f44d389/detail",
          "rel": "self"
        }
      ]
    },
    "links": [
      {
        "href": "https://api.clo.ru/v1/local-disks/c5335cdd-a386-4f7e-9c00-fa361b3ae9c6/detail",
        "rel": "self"
      }
    ]
  }
],
"count": 1
}

Сетевые диски (список)

Запрос возвращает список сетевых дисков, доступных на проекте
GET
/v1/projects/{project_id}/volumes

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в списке

  • results
    array

    Массив сетевых дисков

  • results.item
    object

    Объект, содержащий параметры сетевого диска

  • results.item.attached_to_server
    object

    Объект содержащий в себе информацию о сервере, к которому прикреплён сетевой диск

  • results.item.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • results.item.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • results.item.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.attached_to_server.links.item.href
    string

    Ссылка

  • results.item.attached_to_server.links.item.rel
    string

    Версия API

  • results.item.bootable
    boolean

    Является ли сетевой диск загрузочным

  • results.item.created_in
    string

    Дата создания диска

  • results.item.device
    string

    Путь до устройства в операционной системе

  • results.item.id
    string

    Уникальный идентификатор сетевого диска

  • results.item.links
    array

    Массив ссылок на детальную информацию о сетевом диске

  • results.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.links.item.href
    string

    Ссылка

  • results.item.links.item.rel
    string

    Версия API

  • results.item.name
    string

    Имя сетевого диска

  • results.item.size
    integer

    Размер диска в гигабайтах

  • results.item.status
    string

    Статус сетевого диска

  • results.item.undetachable
    boolean

    Является ли диск неотключаемым

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/volumes"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "count": 2,
  "results": [
    {
      "bootable": true,
      "name": "6159d234-ed37-4921-8c5f-90177d3287fb",
      "attached_to_server": {
        "id": "00c3903d-2974-47fb-bffe-86aa4c7b25a1",
        "links": [
          {
            "href": "https://api.clo.ru/v1/servers/00c3903d-2974-47fb-bffe-86aa4c7b25a1/detail",
            "rel": "self"
          }
        ]
      },
      "undetachable": false,
      "status": "IN-USE",
      "created_in": "2021-05-08T06:00:10Z",
      "size": 20,
      "device": "/dev/vda",
      "links": [
        {
          "href": "https://api.clo.ru/v1/volumes/e84a00a1-c4d1-4627-baa4-37a958ddf48e/detail",
          "rel": "self"
        }
      ],
      "id": "e84a00a1-c4d1-4627-baa4-37a958ddf48e"
    },
    {
      "bootable": true,
      "name": "13921f5d-8066-459b-a48e-b255b86d9628",
      "attached_to_server": {
        "id": "692b94d3-f9cb-4609-ad7c-7bc234892a6b",
        "links": [
          {
            "href": "https://api.clo.ru/v1/servers/692b94d3-f9cb-4609-ad7c-7bc234892a6b/detail",
            "rel": "self"
          }
        ]
      },
      "undetachable": false,
      "status": "IN-USE",
      "created_in": "2021-05-08T06:06:59Z",
      "size": 20,
      "device": "/dev/vda",
      "links": [
        {
          "href": "https://api.clo.ru/v1/volumes/32b1bb31-3d67-4ef0-a833-a3ed7bffb6a8/detail",
          "rel": "self"
        }
        ],
        "id": "32b1bb31-3d67-4ef0-a833-a3ed7bffb6a8"
    }
  ]
}

Создать сетевой диск

Запрос создает сетевой диск с заданными параметрами. В случае успешного выполнения возвращает код 201
POST
/v1/projects/{project_id}/volumes

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects

  • autorename
    boolean

    Автоматическое переименование диска

  • name
    string

    Имя диска

  • size
    integer

    Размер диска в гигабайтах

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.attached_to_server
    object

    Объект содержащий в себе информацию о сервере, к которому прикреплён сетевой диск. Отсутствует, если диск не подключен к серверу

  • result.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • result.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • result.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.attached_to_server.links.item.href
    string

    Ссылка

  • result.attached_to_server.links.item.rel
    string

    Версия API

  • result.bootable
    boolean

    Является ли диск загрузочным

  • result.created_in
    string

    Дата создания диска

  • result.device
    string

    Имя устройства в операционной системе

  • result.id
    string

    Уникальный идентификатор диска

  • result.links
    array

    Массив ссылок на детальную информацию о сетевом диске

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.name
    string

    Имя диска.

  • result.size
    integer

    Размер диска в гигабайтах

  • result.status
    string

    Статус сетевого диска

  • result.undetachable
    boolean

    Является ли диск неотключаемым

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/volumes"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {"name": "test", "size": 10, "autorename": True})
Пример ответа:
{
  "code": 201,
  "title": "Created",
  "result": {
    "size": 10,
    "status": "PROCESSING",
    "bootable": false,
    "created_in": "2021-05-08T08:00:19Z",
    "name": "test",
    "id": "ed735e62-3003-47e1-beaa-caf7f2221319",
    "links": [
      {
        "href": "https://api.clo.ru/v1/volumes/ed735e62-3003-47e1-beaa-caf7f2221319/detail",
        "rel": "self"
      }
    ]
  }
}

Подключить сетевой диск

Подключает указанный диск к серверу
POST
/v1/volumes/{volume_id}/attach

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • volume_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса GET /v1/projects/{project_id}/volumes

  • mount_path
    string

    Путь для подключения диска внутри файловой системы

  • server_id
    string

    Уникальный идентификатор сервера, к которому нужно подключить диск

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.device
    string

    Имя устройства в операционной системе

  • result.mount_cmd
    string

    Команда монтирования устройства

  • result.mountpoint
    string

    Точка монтирования диска в операционной системе

  • result.server
    object

    Объект содержащий в себе информацию о сервере, к которому прикреплён сетевой диск

  • result.server.id
    string

    Уникальный идентификатор сервера

  • result.server.links
    array

    Массив ссылок на детальную информацию о сервере

  • result.server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.server.links.item.href
    string

    Ссылка

  • result.server.links.item.rel
    string

    Версия API

  • result.volume
    object

    Объект содержащий в себе информацию о сетевом диске

  • result.volume.id
    string

    Уникальный идентификатор сетевого диска

  • result.volume.links
    array

    Массив ссылок на детальную информацию о сетевом диске

  • result.volume.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.volume.links.item.href
    string

    Ссылка

  • result.volume.links.item.rel
    string

    Версия API

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/volumes/{volume_id}/attach"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'server_id': '{server_id}'})
Пример ответа:
{
  "code": 202,
  "title": "Accepted",
  "result": {
    "volume": {
      "id": "2ef2747a-b236-4a3f-891c-c0e634fd45ce",
      "links": [
        {
          "href": "https://api.clo.ru/v1/volumes/2ef2747a-b236-4a3f-891c-c0e634fd45ce/detail",
          "rel": "self"
        }
      ]
    },
    "server": {
      "id": "b7cd3947-84af-415a-ab26-59237db94221",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/b7cd3947-84af-415a-ab26-59237db94221/detail",
          "rel": "self"
        }
      ]
    },
    "mountpoint": "/mnt/MyVolume",
    "device": "/dev/vdb",
    "mount_cmd": "mount -o discard, defaults /dev/vdb /mnt/MyVolume"
  }
}

Удалить сетевой диск

Удаляет указанный сетевой диск
DELETE
/v1/volumes/{volume_id}

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • volume_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса GET /v1/projects/{project_id}/volumes.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/volumes/{volume_id}"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.delete(url = URL, headers = HEADERS)

Отключить сетевой диск

Отключает сетевой диск от сервера, к которому подключен
POST
/v1/volumes/{volume_id}/detach

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • volume_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса GET /v1/projects/{project_id}/volumes.

  • force
    boolean

    Игнорировать ошибки

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/volumes/{volume_id}/detach"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'force': False})
Пример ответа:
{
  "code": 202,
  "title": "Accepted"
}

Сетевой диск (подробности)

Возвращает детальную информацию по сетевому диску с указанным ID
GET
/v1/volumes/{volume_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • volume_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса GET /v1/projects/{project_id}/volumes.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.attached_to_server
    object

    Объект содержащий в себе информацию о сервере, к которому прикреплён сетевой диск

  • result.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • result.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • result.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.attached_to_server.links.item.href
    string

    Ссылка

  • result.attached_to_server.links.item.rel
    string

    Версия API

  • result.bootable
    boolean

    Является ли диск загрузочным

  • result.created_in
    string

    Дата создания диска

  • result.device
    string

    Имя устройства в операционной системе

  • result.id
    string

    Уникальный идентификатор диска

  • result.links
    array

    Массив ссылок на детальную информацию о сетевом диске

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.name
    string

    Имя диска

  • result.size
    integer

    Размер диска в гигабайтах

  • result.status
    string

    Статус сетевого диска

  • result.undetachable
    boolean

    Является ли диск неотключаемым

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/volumes/{volume_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "size": 20,
    "status": "AVAILABLE",
    "id": "2ef2747a-b236-4a3f-891c-c0e634fd45ce",
    "links": [
      {
        "href": "https://api.clo.ru/v1/volumes/2ef2747a-b236-4a3f-891c-c0e634fd45ce/detail",
        "rel": "self"
      }
    ],
    "bootable": false,
    "created_in": "2021-05-11T10:52:30Z",
    "name": "MyVolume"
  }
}

Увеличить сетевой диск

Запрос увеличивает размер сетевого диска
POST
/v1/volumes/{volume_id}/extend

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • volume_id
    string
    Передается в path.

    Уникальный идентификатор диска. Можно получить из запроса GET /v1/projects/{project_id}/volumes.

  • new_size
    integer

    Новый размер диска в гигабайтах

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/volumes/{volume_id}/extend"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'new_size': 20})

Плавающие IP

Плавающий IP-адрес существует отдельно от сервера. Его можно отключить от сервера и подключить к другому в любой момент. После подключения адрес настраивается автоматически. Адрес остается закрепленным за клиентом всё время, пока клиент явно не удалит его. Через плавающий адрес сетевые операции проходят медленнее, чем через статический, поскольку адрес работает через NAT.

Подключить плавающий IP

Подключает указанный адрес к серверу
POST
/v1/floatingips/{floating_id}/attach

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • floating_id
    string
    Передается в path.

    Уникальный идентификатор адреса. Можно получить из запроса GET /v1/projects/{project_id}/floatingips.

  • server_id
    string

    Уникальный идентификатор сервера, к которому нужно подключить адрес

Формат ответа

  • Параметр
    Тип данных
    Описание
  • attached_to_server
    object

    Информация о сервере, к которому подключен плавающий IP

  • attached_to_server.id
    string

    Уникальный идентификатор сервера

  • attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • attached_to_server.links.item.href
    string

    Ссылка

  • attached_to_server.links.item.rel
    string

    Версия API

  • created_in
    string

    Дата создания адреса

  • ddos_protection
    boolean

    Защита от DDoS-атак

  • fixed_ip_address
    string

    IP адрес в серой сети, к которому подключен плавающий IP

  • floating_ip_address
    string

    IP адрес

  • id
    string

    Уникальный идентификатор адреса

  • links
    array

    Массив ссылок на детальную информацию о плавающем IP

  • links.item
    object

    Объект, содержащий ссылку и версию API

  • links.item.href
    string

    Ссылка

  • links.item.rel
    string

    Версия API

  • status
    string

    Статус IP адреса

  • updated_in
    string

    Время последнего обновления элемента

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/floatingips/{floating_id}/attach"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'server_id': '0efafbaf-6918-4070-bc9b-e573b14fc7a3'})
Пример ответа:
{
    "code": 200,
    "title": "OK",
    "result": {
        "id": "e4630ff9-6b93-4dac-8c8a-37721f46ed41",
        "status": "ACTIVE",
        "attached_to_server": {
            "id": "0efafbaf-6918-4070-bc9b-e573b14fc7a3",
            "links": [
                {
                    "href": "https://api.clo.ru/v1/servers/0efafbaf-6918-4070-bc9b-e573b14fc7a3/detail",
                    "rel": "self"
                }
            ]
        },
        "created_in": "2021-05-12T09:40:21+00:00",
        "updated_in": "2021-05-12T09:52:07+00:00",
        "fixed_ip_address": "195.140.146.54",
        "links": [
            {
                "href": "https://api.clo.ru/v1/floatingips/e4630ff9-6b93-4dac-8c8a-37721f46ed41/detail",
                "rel": "self"
            }
        ],
        "floating_ip_address": "195.140.146.77"
    }
}```

Удалить плавающий IP

Запрос удаляет плавающий IP из проекта
DELETE
/v1/floatingips/{floating_id}

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • floating_id
    string
    Передается в path.

    Уникальный идентификатор адреса. Можно получить из запроса GET /v1/projects/{project_id}/floatingips.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/floatingips/{floating_id}"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.delete(url = URL, headers = HEADERS)

Отключить плавающий IP

Отключает адрес от сервера, к которому подключен
POST
/v1/floatingips/{floating_id}/detach

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • floating_id
    string
    Передается в path.

    Уникальный идентификатор адреса. Можно получить из запроса GET /v1/projects/{project_id}/floatingips.

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/floatingips/{floating_id}/detach"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS)
Пример ответа:
{
    "code": 200,
    "title": "OK"
}

Плавающий IP (подробности)

Возвращает детальную информацию по плавающему IP с указанным ID
GET
/v1/floatingips/{floating_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • floating_id
    string
    Передается в path.

    Уникальный идентификатор адреса. Можно получить из запроса GET /v1/projects/{project_id}/floatingips.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.attached_to_server
    object

    Информация о сервере, к которому подключен плавающий IP

  • result.attached_to_server.id
    string

    ID сервера

  • result.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • result.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.attached_to_server.links.item.href
    string

    Ссылка

  • result.attached_to_server.links.item.rel
    string

    Версия API

  • result.created_in
    string

    Дата создания адреса

  • result.ddos_protection
    boolean

    Защита от DDoS-атак

  • result.fixed_ip_address
    string

    IP адрес в серой сети, к которому подключен плавающий IP

  • result.floating_ip_address
    string

    IP адрес

  • result.id
    string

    Уникальный идентификатор адреса

  • result.links
    array

    Массив ссылок на детальную информацию о плавающем IP

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.status
    string

    Статус плавающего IP

  • result.updated_in
    string

    Время последнего обновления элемента

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/floatingips/{floating_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "id": "e4630ff9-6b93-4dac-8c8a-37721f46ed41",
    "created_in": "2021-05-12T09:40:21+00:00",
    "status": "DOWN",
    "links": [
      {
        "href": "https://api.clo.ru/v1/floatingips/e4630ff9-6b93-4dac-8c8a-37721f46ed41/detail",
        "rel": "self"
      }
    ],
    "attached_to_server": null,
    "floating_ip_address": "195.140.146.77",
    "updated_in": "2021-05-12T09:41:38+00:00"
  }
}

Список плавающих IP

Запрос возвращает список плавающих IP, доступных на проекте
GET
/v1/projects/{project_id}/floatingips

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects.

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в результирующем ответе

  • results
    array

    Массив плавающих IP

  • results.item
    object

    Объект, содержащий параметры плавающего IP

  • results.item.attached_to_server
    object

    Информация о сервере, к которому подключен плавающий IP

  • results.item.attached_to_server.id
    string

    Уникальный идентификатор сервера

  • results.item.attached_to_server.links
    array

    Массив ссылок на детальную информацию о сервере

  • results.item.attached_to_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.attached_to_server.links.item.href
    string

    Ссылка

  • results.item.attached_to_server.links.item.rel
    string

    Версия API

  • results.item.created_in
    string

    Дата создания

  • results.item.ddos_protection
    boolean

    Защита от DDoS-атак

  • results.item.fixed_ip_address
    string

    IP адрес в серой сети, к которому подключен плавающий IP

  • results.item.floating_ip_address
    string

    IP адрес

  • results.item.id
    string

    Уникальный идентификатор плавающего IP

  • results.item.links
    array

    Массив ссылок на детальную информацию о плавающем IP

  • results.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.links.item.href
    string

    Ссылка

  • results.item.links.item.rel
    string

    Версия API

  • results.item.status
    string

    Состояние плавающего IP адреса

  • results.item.updated_in
    string

    Время последнего обновления элемента

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/floatingips"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "results": [
    {
      "id": "e4630ff9-6b93-4dac-8c8a-37721f46ed41",
      "created_in": "2021-05-12T09:40:21Z",
      "status": "DOWN",
      "links": [
        {
          "href": "https://api.clo.ru/v1/floatingips/e4630ff9-6b93-4dac-8c8a-37721f46ed41/detail",
          "rel": "self"
        }
      ],
      "fixed_ip_address": null,
      "attached_to_server": null,
      "floating_ip_address": "195.140.146.77",
      "updated_in": "2021-05-12T09:41:38Z"
    }
  ],
  "count": 1
}

Создать плавающий IP

Запрос создает плавающий IP с заданными параметрами
POST
/v1/projects/{project_id}/floatingips

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта. Можно получить из запроса GET /v1/projects.

  • ddos_protection
    boolean

    При установке флага вы получите защищенный от DDoS-атак IP-адрес

Формат ответа

  • Параметр
    Тип данных
    Описание
  • fixed_ip_address
    string

    IP адрес в серой сети, к которому подключен плавающий IP

  • floating_ip_address
    string

    IP адрес

  • id
    string

    Уникальный идентификатор плавающего IP

  • links
    array

    Список ссылок на детальную информацию о плавающем IP

  • links.item
    object

    Объект, содержащий ссылку и версию API

  • links.item.href
    string

    Ссылка

  • links.item.rel
    string

    Версия API

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/floatingips"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 201,
  "title": "Created",
  "result": {
    "id": "e4630ff9-6b93-4dac-8c8a-37721f46ed41",
    "floating_ip_address": null,
    "links": [
      {
        "href": "https://api.clo.ru/v1/floatingips/e4630ff9-6b93-4dac-8c8a-37721f46ed41/detail",
        "rel": "self"
      }
    ]
  }
}

Снапшоты

“Снимок” состояния сервера на определенный момент. Создается за пару секунд, не мешает работе сервера и хранится 24 часа. Из снимка можно восстановить сервер — создать новый, который будет копией исходного сервера на момент создания снапшота.

Снапшот (список)

Запрос возвращает список снапшотов, созданных на проекте
GET
/v1/projects/{project_id}/snapshots

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • project_id
    string
    Передается в path.

    Уникальный идентификатор проекта

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в списке

  • results
    array

    Массив снапшотов

  • results.item
    object

    Объект, содержащий параметры снапшота

  • results.item.child_servers
    array

    Список дочерних серверов

  • results.item.child_servers.item
    object

    Объект, содержащий информацию о дочернем сервере

  • results.item.child_servers.item.id
    string

    Уникальный идентификатор сервера

  • results.item.child_servers.item.links
    array

    Список ссылок на детальную информацию о сервере

  • results.item.child_servers.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.child_servers.item.links.item.href
    string

    Ссылка

  • results.item.child_servers.item.links.item.rel
    string

    Версия API

  • results.item.created_in
    string

    Дата создания снапшота

  • results.item.deleted_in
    string

    Время в которое снапшот будет удалён

  • results.item.id
    string

    Уникальный идентификатор снапшота

  • results.item.links
    array

    Список ссылок на детальную информацию о снапшоте

  • results.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.links.item.href
    string

    Ссылка

  • results.item.links.item.rel
    string

    Версия API

  • results.item.name
    string

    Название снапшота

  • results.item.parent_server
    object

    Объект, содержащий информацию о сервере, с которого был сделан снапшот

  • results.item.parent_server.id
    string

    Уникальный идентификатор сервера

  • results.item.parent_server.links
    array

    Список ссылок на детальную информацию о сервере

  • results.item.parent_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • results.item.parent_server.links.item.href
    string

    Ссылка

  • results.item.parent_server.links.item.rel
    string

    Версия API

  • results.item.size
    integer

    Размер снапшота в гигабайтах

  • results.item.status
    string

    Статус снапшота

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/projects/{project_id}/snapshots"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "count": 1,
  "results": [
    {
      "child_servers": [],
      "size": 20971520,
      "deleted_in": "2021-05-12T20:50:56Z",
      "status": "ACTIVE",
      "parent_server": {
        "id": "0efafbaf-6918-4070-bc9b-e573b14fc7a3",
        "links": [
            {
              "href": "https://api.clo.ru/v1/servers/0efafbaf-6918-4070-bc9b-e573b14fc7a3/detail",
              "rel": "self"
            }
        ]
      },
      "id": "8c1f5fea-dd4c-4849-b416-6909f0bdea40",
      "links": [
        {
          "href": "https://api.clo.ru/v1/snapshots/8c1f5fea-dd4c-4849-b416-6909f0bdea40/detail",
          "rel": "self"
        }
      ],
      "created_in": "2021-05-12T08:50:56Z",
      "name": "ubuntu20_1cpu_2048ram_16:50_12-05-2021"
    }
  ]
}

Создать снапшот

Запрос на создание снапшота
POST
/v1/servers/{server_id}/snapshot

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • server_id
    string
    Передается в path.

    Уникальный идентификатор сервера. Можно получить из запроса v1/projects/{project_id}/servers

  • name
    string

    Имя снапшота

Формат ответа

  • Параметр
    Тип данных
    Описание
  • id
    string

    Уникальный идентификатор снапшота

  • links
    array

    Список ссылок на детальную информацию о снапшоте

  • links.item
    object

    Объект, содержащий ссылку и версию API

  • links.item.href
    string

    Ссылка

  • links.item.rel
    string

    Версия API

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/servers/{server_id}/snapshot"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'name': 'my_first_snapshot'})
Пример ответа:
{
  "code": 202,
  "title": "Accepted",
  "result": {
    "id": "fa19daa5-ed77-4a01-817f-3a334c8bed30",
    "links": [
      {
        "href": "https://api.clo.ru/v1/snapshots/fa19daa5-ed77-4a01-817f-3a334c8bed30/detail",
        "rel": "self"
      }
    ]
  }
}

Удалить снапшот

Запрос на удаление снапшота
DELETE
/v1/snapshots/{snapshot_id}/delete

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • snapshot_id
    string
    Передается в path.

    Уникальный идентификатор снапшота

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/snapshots/{snapshot_id}/delete"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.delete(url = URL, headers = HEADERS)

Снапшот (подробности)

Возвращает детальную информацию о снапшоте с указанным ID
GET
/v1/snapshots/{snapshot_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • snapshot_id
    string
    Передается в path.

    Уникальный идентификатор снапшота

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий параметры снапшота

  • result.child_servers
    array

    Список дочерних серверов

  • result.child_servers.item
    object

    Объект, содержащий информацию о дочернем сервере

  • result.child_servers.item.id
    string

    ID сервера

  • result.child_servers.item.links
    array

    Список ссылок на детальную информацию о сервере

  • result.child_servers.item.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.child_servers.item.links.item.href
    string

    Ссылка

  • result.child_servers.item.links.item.rel
    string

    Версия API

  • result.created_in
    string

    Дата создания снапшота

  • result.deleted_in
    string

    Дата удаления снапшота

  • result.id
    string

    Уникальный идентификатор снапшота

  • result.links
    array

    Список ссылок на детальную информацию о снапшоте

  • result.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.links.item.href
    string

    Ссылка

  • result.links.item.rel
    string

    Версия API

  • result.name
    string

    Имя снапшота

  • result.parent_server
    object

    Объект, содержащий информацию о сервере, с которого был сделан снапшот

  • result.parent_server.id
    string

    Уникальный идентификатор сервера

  • result.parent_server.links
    array

    Список ссылок на детальную информацию о сервере

  • result.parent_server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.parent_server.links.item.href
    string

    Ссылка

  • result.parent_server.links.item.rel
    string

    Версия API

  • result.size
    integer

    Размер снапшота в гигабайтах

  • result.status
    string

    Статус снапшота

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/snapshots/{snapshot_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "child_servers": [],
    "size": 20971520,
    "deleted_in": "2021-05-12T20:50:56Z",
    "status": "ACTIVE",
    "parent_server": {
      "id": "0efafbaf-6918-4070-bc9b-e573b14fc7a3",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/0efafbaf-6918-4070-bc9b-e573b14fc7a3/detail",
          "rel": "self"
        }
      ]
    },
    "id": "8c1f5fea-dd4c-4849-b416-6909f0bdea40",
    "links": [
      {
        "href": "https://api.clo.ru/v1/snapshots/8c1f5fea-dd4c-4849-b416-6909f0bdea40/detail",
        "rel": "self"
      }
    ],
    "created_in": "2021-05-12T08:50:56Z",
    "name": "ubuntu20_1cpu_2048ram_16:50_12-05-2021"
  }
}

Восстановление сервера из снапшота

Запрос на восстановление сервера из снапшота
POST
/v1/snapshots/{snapshot_id}/restore

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • snapshot_id
    string
    Передается в path.

    ID снапшота

  • ddos_protection
    boolean

    Восстановить сервер с защищенным от DDoS-атак IP

  • name
    string

    Название сервера

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса.

  • result.name
    string

    Название сервера

  • result.server
    object

    Объект, содержащий информацию о сервере

  • result.server.id
    string

    ID сервера

  • result.server.links
    array

    Список ссылок на детальную информацию о сервере

  • result.server.links.item
    object

    Объект, содержащий ссылку и версию API

  • result.server.links.item.href
    string

    Ссылка

  • result.server.links.item.rel
    string

    Версия API

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/snapshots/{snapshot_id}/restore"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'name': 'restored_server'})
Пример ответа:
{
  "code": 202,
  "title": "Accepted",
  "result": {
    "name": "restored_server",
    "server": {
      "id": "18b24279-ce05-4974-aa9d-ba818d460e4b",
      "links": [
        {
          "href": "https://api.clo.ru/v1/servers/18b24279-ce05-4974-aa9d-ba818d460e4b/detail",
          "rel": "self"
        }
      ]
    }
  }
}

SSH-ключи

Ключи нужны для доступа к серверам проекта по протоколу ssh. Используется как альтернатива аутентификации по логину и паролю.

Удалить SSH-ключ

Запрос на удаление SSH-ключа
DELETE
/v1/keypairs/{keypair_id}/delete

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • keypair_id
    string
    Передается в path.

    Уникальный идентификатор SSH-ключа, который необходимо удалить

Формат ответа

Отсутствует
Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/keypairs/{keypair_id}/delete"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending delete request and saving the response as response object
r = requests.delete(url = URL, headers = HEADERS)

SSH-ключ (подробности)

Возвращает детальную информацию о SSH-ключе c заданным ID
GET
/v1/keypairs/{keypair_id}/detail

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • keypair_id
    string
    Передается в path.

    Уникальный идентификатор SSH-ключа

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.id
    string

    Уникальный идентификатор SSH-ключа

  • result.name
    string

    Имя ключа

  • result.public_key
    string

    Значение публичного ключа

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/keypairs/{keypair_id}/detail"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "result": {
    "id": "d4671e8e-212a-401e-86bf-22d7f0430952",
    "public_key": "123",
    "name": "test2"
  }
}

Список SSH-ключей

Запрос возвращает список SSH-ключей
GET
/v1/keypairs

Параметры запроса

Отсутствуют

Формат ответа

  • Параметр
    Тип данных
    Описание
  • count
    integer

    Количество объектов в списке

  • results
    array

    Массив SSH-ключей

  • results.item
    object

    Объект, содержащий параметры SSH-ключа

  • results.item.id
    string

    Уникальный идентификатор SSH-ключа

  • results.item.name
    string

    Имя SSH-ключа

  • results.item.public_key
    string

    Значение публичного ключа

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/keypairs"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.get(url = URL, headers = HEADERS)
Пример ответа:
{
  "code": 200,
  "title": "OK",
  "count": 1,
  "results": [
    {
      "id": "d4671e8e-212a-401e-86bf-22d7f0430952",
      "public_key": "123",
      "name": "test2"
    }
  ]
}

Создать SSH-ключ

Запрос на создание SSH-ключа
POST
/v1/keypairs

Параметры запроса

  • Параметр
    Тип данных
    Описание
  • name
    string

    Имя SSH-ключа

  • public_key
    string

    Значение публичного SSH-ключа

Формат ответа

  • Параметр
    Тип данных
    Описание
  • result
    object

    Объект, содержащий в себе результаты запроса

  • result.id
    string

    Уникальный идентификатор SSH-ключа

  • result.name
    string

    Имя SSH-ключа

  • result.public_key
    string

    Значение публичного SSH-ключа

Пример запроса:
  • Python
  • Bash
# importing the requests library
import requests

# api-endpoint
URL = "https://api.clo.ru/v1/keypairs"

# defining a dict of headers to be sent to the API
HEADERS = {'Content-Type': 'application/json', 'Authorization': 'Bearer b7d03a6947b217efb6f3ec3bd3504582'}

# sending get request and saving the response as response object
r = requests.post(url = URL, headers = HEADERS, json = {'name': 'test4', 'public_key': '1asd23'})
Пример ответа:
{
  "code": 201,
  "title": "Created",
  "result": {
    "id": "93fe3a6a-1bda-4845-b7e9-f92e0939e801",
    "public_key": "1asd23",
    "name": "test4"
  }
}