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

Создание и доступ к машине

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

Создайте проект

Проект — контейнер для машин, сетей, публичных адресов и SSH-ключей. Один и тот же projectId будет участвовать во всех дальнейших вызовах.

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"name": "automation-project"
}'

Выберите образ и конфигурацию

Перед созданием машины получите актуальные imageId и tariffId из каталогов — не берите значения из примеров. Если машине нужен новый публичный адрес, отдельно выберите и тариф для него.

В списке конфигураций есть два поля, которые стоит учитывать до отправки запроса.

  • availability — можно ли сейчас создать хотя бы одну машину этой конфигурации.

  • maxCount — приблизительно сколько машин этой конфигурации можно создать сейчас. Значение равно 0, если конфигурация недоступна или сведений о мощностях нет.

Доступность — подсказка, а не гарантия

Оба поля справочные и могут отставать от реальной ёмкости кластера на короткий интервал. Используйте их, чтобы не предлагать пользователю заведомо недоступную конфигурацию, но всё равно обрабатывайте ответ 409 Conflict с кодом insufficientCapacity: между проверкой и созданием место могло закончиться.

Подготовьте доступ

  • sshPublicKeys — если у клиента уже есть публичные ключи в формате OpenSSH и вы передаёте их прямо в запросе.

  • sshKeyIds — если хотите переиспользовать ключи, зарегистрированные в проекте.

  • publicIpMode — нужен ли машине публичный адрес при создании и брать ли новый.

  • plugins — подключать ли дополнительные плагины на этапе создания.

Создайте машину

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

curl --request POST \
  --url 'https://api.zennohosting.com/v1/projects/{projectId}/vms' \
  --header 'Authorization: Bearer <token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"tariffId": "00000000-0000-0000-0000-000000000000",
"imageId": "00000000-0000-0000-0000-000000000000",
"vmName": "worker-01",
"plugins": [
  "00000000-0000-0000-0000-000000000000"
],
"sshKeyIds": [
  "00000000-0000-0000-0000-000000000000"
],
"publicIpMode": "New",
"publicIpTariffId": "00000000-0000-0000-0000-000000000000",
"privateNetworkIds": [
  "00000000-0000-0000-0000-000000000000"
]
}'
  1. 1

    Проверьте квоты

    Запрос GET /limits покажет, сколько машин и сколько ядер, памяти и диска вам ещё доступно. Если остаток нулевой, запрос на создание отклонят.

  2. 2

    Получите образ и тариф

    Заберите каталоги образов и тарифов, а заодно посмотрите availability и maxCount у выбранной конфигурации.

  3. 3

    Создайте проект и сохраните его идентификатор

    Тот же projectId понадобится для машин, SSH-ключей, сетей и резервных копий.

  4. 4

    Определите способ доступа

    Либо заранее зарегистрируйте SSH-ключи в проекте, либо передайте публичные ключи прямо в запросе на создание.

  5. 5

    Отправьте запрос и сразу сохраните пароль

    Если в ответе есть пароль, сохраните его немедленно: он показывается один раз и получить его позже нельзя.

  6. 6

    Дождитесь готовности машины

    Опрашивайте машину и смотрите на status: пока она создаётся, значение равно creating, готовая машина — active. Поле bootStatus покажет питание. Заодно проверьте идентификаторы, размеры ресурсов и сетевые интерфейсы.

Что должно получиться

В конце у вас есть машина в состоянии active, её идентификатор, понятный способ доступа и зафиксированное решение о публичном адресе и плагинах. Если status оказался failed, машина сама не восстановится — причину даст запись операции и её failureCode.

Пароль показывается один раз

Ответ на создание машины может содержать пароль, который больше не будет доступен ни через один эндпоинт. Если он нужен вашему сценарию, сохраните его до того, как ответ покинет границу клиента.

Связанные эндпоинты