Работа с виртуальными машинами через API

Пароль для доступа к API сейчас идентичен паролю от личного кабинета на портале https://mcs.mail.ru/.

Что такое API?

API (программный интерфейс приложения, интерфейс прикладного программирования) (англ. application programming interface, API [эй-пи-ай]) — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой. Обычно входит в описание какого-либо интернет-протокола (например, RFC), программного каркаса (фреймворка) или стандарта вызовов функций операционной системы. Часто реализуется отдельной программной библиотекой или сервисом операционной системы. Используется программистами при написании всевозможных приложений.

Для чего можно использовать API?

Чтобы написанная вами (или любая сторонняя) программа, приложение, любая сущность - могла взаимодействовать с облачной инфраструктурой так, как вам необходимо, дёргая задокументированные "ручки" и получая обратно статусы/ответы на запрос и т.п. 

OpenStack — комплекс проектов свободного программного обеспечения, который может быть использован для создания инфраструктурных облачных сервисов и облачных хранилищ, при том как публичных, так и частных. Все проекты комплекса распространяются под лицензией Apache License.

Почему OpenStack API?

Так как многие сервисы MCS написаны с использованием технологий OpenStack, то с ними можно взаимодействовать через OpenStack API, если отдельно не указано обратное.

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

Актуально на: 2018-10-03 16:14

Используйте API-интерфейсы OpenStack для запуска экземпляров сервера, назначения метаданных экземплярам, создания контейнеров и объектов хранения, и выполнения других действий в облаке OpenStack.

Для получения дополнительной информации о значениях состояния API и информации о версии см. Обнаружение версии .

Обозначение «(микроверсии)» рядом со ссылкой на ссылку API указывает, что API следует шаблону, установленному службой Compute, чтобы обеспечить небольшие, документированные изменения API для каждого ресурса в отдельности.

Текущие версии API

API каталога приложений v1

API службы контейнера приложений (микроверсии)

API резервного копирования v1

Bare Metal API v1 (микроверсии)

Block Storage API v3 (микроверсии)

API хранилища блоков v3 функционально идентичен API хранилища блоков v2. Последующие микроверсии API v3, такие как v3.1, отличаются от API v2.

API кластеризации v1

Compute API (микроверсии)

API управления контейнерной инфраструктурой (микроверсии)

Обработка данных v1.1

Оркестровка защиты данных v1

API службы баз данных v1.0

API сервера доменных имен (DNS) v2

EC2 API Сервис

Identity API v3

Расширения Identity API v3

API сервиса образов v2

Load Balancer API v2

Messaging API v2

Сетевой API v2.0

NFV Orchestration API v1.0

API хранилища объектов v1

API оркестровки v1

API размещения (микроверсии)

Resource Optimization API v1

API поиска v1

Shared File Systems API v2 (микроверсии)

API Shared File Systems v1 функционально идентичен API Shared File Systems v2. Последующие микроверсии API v2, такие как v2.1, отличаются от API v1.

 

Устаревшие версии API

API блочного хранилища v2

API хранилища блоков v3 функционально идентичен API хранилища блоков v2. Последующие микроверсии API v3, такие как v3.1, отличаются от API v2.

Расширения Identity API v2.0

Примеры быстрого запуска API

При установке TryStack/OpenStack эти службы работают вместе в фоновом режиме установки, и многие из этих примеров работают на TryStack.

После аутентификации с помощью Identity вы можете использовать другие API-интерфейсы OpenStack для создания ресурсов и управления ими в облаке MCS. Вы можете запускать экземпляры из образов и назначать метаданные экземплярам через API Compute или клиент командной строки openstack .

Чтобы начать отправлять запросы API, используйте один из следующих методов:

cURL

Инструмент командной строки, который позволяет отправлять HTTP-запросы и получать ответы. Смотрите раздел под названием OpenStack APIs .

Клиент командной строки OpenStack

Проект OpenStack предоставляет клиент командной строки, который позволяет вам получать доступ к API через простые в использовании команды. См. Раздел « Клиенты командной строки OpenStack» .

REST клиенты

Как Mozilla, так и Google предоставляют браузерные графические интерфейсы для REST. Для Firefox см. RESTClient .Для Chrome см. Rest-client .

OpenStack Python Software Development Kit (SDK)

Используйте этот SDK для написания скриптов автоматизации Python, которые создают и управляют ресурсами в вашем облаке MCS. В SDK реализованы привязки Python к API-интерфейсу OpenStack, который позволяет выполнять задачи автоматизации в Python, выполняя вызовы объектов Python вместо непосредственных вызовов REST. Все инструменты командной строки OpenStack реализованы с использованием Python SDK. См. OpenStack Python SDK в Руководстве пользователя OpenStack .

API OpenStack

Аутентификация и рабочий процесс запроса API

Проверка подлинности

Отправка запросов API

Клиенты командной строки OpenStack

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

Чтобы аутентифицировать доступ к сервисам OpenStack, вы должны сначала отправить запрос аутентификации с учётными данными в OpenStack Identity, чтобы получить токен аутентификации.

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

Когда вы отправляете запросы API, вы должны включать токен в заголовок X-Auth-Token . Если вы получаете доступ к нескольким службам OpenStack, вы должны получить токен для каждой службы. Токен действителен в течение ограниченного времени до истечения срока его действия. Токен также может стать недействительным по другим причинам. Например, если роли для пользователя изменяются, существующие токены для этого пользователя больше не действительны.

Аутентификация и рабочий процесс запроса API

Запросите маркер аутентификации у конечной точки Identity, которую вам дал ваш облачный администратор.Отправьте в запрос учетные данные, как показано в разделе Аутентификация . Если запрос выполнен успешно, сервер возвращает токен аутентификации.

Отправьте запросы API и включите токен в заголовок X-Auth-Token . Продолжайте отправлять запросы API с этим токеном до тех пор, пока служба не выполнит запрос или не произойдет ошибка Unauthorized (401).

Если возникает ошибка Несанкционированный (401), запросите другой токен.

Примеры в этом разделе используют команды cURL. Для получения информации о cURL см. Http://curl.haxx.se/ . Для получения информации об API-интерфейсах OpenStack см. Текущие версии API .

Аутентификация

Полезные данные для аутентификации содержат следующие параметры:

параметр
Тип
Описание
Пользовательский домен(обязательно)
string
Домен пользователя.
имя пользователя (обязательно)
string
Имя пользователя. Если вы не предоставите имя пользователя и пароль, вы должны предоставить токен.
Требуется пароль)
string
Пароль для пользователя.
Домен проекта (необязательно)
string
Домен проекта. Это обязательная часть объекта области видимости.
Название проекта (необязательно)
string
Название проекта. И идентификаторпроекта, и имя проекта не являются обязательными.
Идентификатор проекта(необязательно)
string
Идентификатор проекта. И идентификатор проекта, и имя проекта не являются обязательными. Но один из них требуется вместе с доменом проекта . Они заключены в объект области видимости. Если вы не знаете имя или идентификатор проекта, отправьте запрос без какого-либо объекта области.

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

Сначала экспортируйте имя проекта в переменную среды OS_PROJECT_NAME , имя домена проекта в переменную среды OS_PROJECT_DOMAIN_NAME , имя пользователя в переменную среды OS_USERNAME , пароль в переменную среды OS_PASSWORD и имя домена пользователя в переменную среды OS_USER_DOMAIN_NAME .

В приведенном ниже примере используется конечная точка из установки Ocata, следуя руководству по установке. Однако вы также можете использовать $OS_AUTH_URL в качестве переменной среды, если это необходимо для изменения URL-адреса.

Затем выполните команду cURL, чтобы запросить токен:


 $ curl -v -s -X POST $OS_AUTH_URL /auth/tokens?nocatalog   -H "Content-Type: application/json"   -d '{ "auth": { "identity": 
{ "methods": ["password"],"password": {"user": {"domain": {"name": "' " $OS_USER_DOMAIN_NAME " '"},"name": "' " 
$OS_USERNAME " '", "password": "' " $OS_PASSWORD " '"} } }, "scope": { "project": { "domain": { "name": "' " 
$OS_PROJECT_DOMAIN_NAME " '" }, "name":  "' " $OS_PROJECT_NAME " '" } } }}' \
| python -m json.tool

Если запрос выполняется успешно, он возвращает код ответа Created (201) вместе с токеном в качестве значения в заголовке ответа X-Subject-Token . За заголовком следует тело ответа с объектом типа token который имеет дату и время истечения срока действия токена в форме "expires_at":"datetime" вместе с другими атрибутами.

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

 *   Trying 192.168.56.101...
* Connected to controller (192.168.56.101) port 5000 (#0)
> POST /v3/auth/tokens?nocatalog HTTP/1.1
> Host: controller:5000
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 226
>
} [226 bytes data]
* upload completely sent off: 226 out of 226 bytes
< HTTP/1.1 201 Created
< Date: Fri, 26 May 2017 06:48:58 GMT
< Server: Apache/2.4.18 (Ubuntu)
< X-Subject-Token: gAAAAABZJ8_a7aiq1SnOhbNw8vFb5WZChcvWdzzUAFzhiB99BHrjdSGai--_-JstU3WazsFXmRHNbD07q
OQKTp5Sen2R_b9csaDkU49VXqSaJ0jh2nAlwJkys8aazz2oa3xSeUVe3Ndv_HRiW23-iWTr6jquK_AXdhRX7nvM4lmVTrxXFpelnJQ
< Vary: X-Auth-Token
< X-Distribution: Ubuntu
< x-openstack-request-id: req-0e9239ec-104b-40e0-a337-dca91fb24387
< Content-Length: 521
< Content-Type: application/json
<
{ [521 bytes data]
* Connection #0 to host controller left intact
{
    "token": {
        "audit_ids": [
            "HOGlhnMFT52xY7PjbuJZlA"
        ],
        "expires_at": "2017-05-26T07:48:58.000000Z",
        "is_domain": false,
        "issued_at": "2017-05-26T06:48:58.000000Z",
        "methods": [
            "password"
        ],
        "project": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "05ef0bf2a79c42b2b8155873b6404061",
            "name": "demo"
        },
        "roles": [
            {
                "id": "b18239b7026042ef8695c3c4cf10607b",
                "name": "user"
            }
        ],
        "user": {
            "domain": {
                "id": "default",
                "name": "Default"
            },
            "id": "12846256e60c42f88d0e1ba9711a57f5",
            "name": "demo",
            "password_expires_at": null
        }
    }
}

Важно

В приведенном выше запросе строка запроса nocatalog используется, поскольку вы просто хотите получить токен и не хотите, чтобы каталог служб (если он доступен для пользователя) загромождал возвращаемые данные. Если пользователь хочет получить каталог услуг, эту строку запроса не нужно добавлять к URL-адресу.

Отправка запросов API

В этом разделе показано, как выполнить некоторые базовые вызовы Compute API. Полный список вызовов Compute API см. В разделе Compute API .

Экспортируйте идентификатор токена в переменную окружения OS_TOKEN . Например:

 export OS_TOKEN=gAAAAABZJ8_a7aiq1SnOhbNw8vFb5WZChcvWdzzUAFzhiB99BHrjdSGai--_-JstU3WazsFXmRHNbD07q
OQKTp5Sen2R_b9csaDkU49VXqSaJ0jh2nAlwJkys8aazz2oa3xSeUVe3Ndv_HRiW23-iWTr6jquK_AXdhRX7nvM4lmVTrxXFpelnJQ

По умолчанию время жизни токена истекает каждый час, хотя его можно настроить по-разному - см. Параметр истечения срока действия в Руководстве по настройке Identity Service .

Экспортируйте имя проекта в переменную среды OS_PROJECT_NAME . Например:

 export OS_PROJECT_NAME=demo

Затем используйте API Compute для вывода списка вариантов, заменив конечную точку API Compute на ту, которая содержит идентификатор вашего проекта ниже:

 $ curl -s -H "X-Auth-Token:  $OS_TOKEN " \
  $OS_COMPUTE_API /flavors \
  | python -m json.tool
 {
    "flavors" : [
        {
            "id" : "1" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/1" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/1" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "m1.tiny"
        },
        {
            "id" : "2" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/2" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/2" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "m1.small"
        },
        {
            "id" : "3" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/3" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/3" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "m1.medium"
        },
        {
            "id" : "4" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/4" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/4" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "m1.large"
        },
        {
            "id" : "5" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/flavors/5" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/flavors/5" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "m1.xlarge"
        }
    ]
}

Экспортируйте $ OS_PROJECT_ID из вызова токена, а затем используйте Compute API для вывода списка образов:

 $ curl -s -H "X-Auth-Token:  $OS_TOKEN " \
  http://8.21.28.222:8774/v2/ $OS_PROJECT_ID /images \
  | python -m json.tool
 {
    "images" : [
        {
            "id" : "2dadcc7b-3690-4a1d-97ce-011c55426477" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477" ,
                    "rel" : "bookmark"
                },
                {
                    "href" : "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/2dadcc7b-3690-4a1d-97ce-011c55426477" ,
                    "type" : "application/vnd.openstack.image" ,
                    "rel" : "alternate"
                }
            ],
            "name" : "Fedora 21 x86_64"
        },
        {
            "id" : "cfba3478-8645-4bc8-97e8-707b9f41b14e" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e" ,
                    "rel" : "bookmark"
                },
                {
                    "href" : "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/cfba3478-8645-4bc8-97e8-707b9f41b14e" ,
                    "type" : "application/vnd.openstack.image" ,
                    "rel" : "alternate"
                }
            ],
            "name" : "Ubuntu 14.04 amd64"
        },
        {
            "id" : "2e4c08a9-0ecd-4541-8a45-838479a88552" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552" ,
                    "rel" : "bookmark"
                },
                {
                    "href" : "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/2e4c08a9-0ecd-4541-8a45-838479a88552" ,
                    "type" : "application/vnd.openstack.image" ,
                    "rel" : "alternate"
                }
            ],
            "name" : "CentOS 7 x86_64"
        },
        {
            "id" : "c8dd9096-60c1-4e23-a486-82955481df9f" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f" ,
                    "rel" : "bookmark"
                },
                {
                    "href" : "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/c8dd9096-60c1-4e23-a486-82955481df9f" ,
                    "type" : "application/vnd.openstack.image" ,
                    "rel" : "alternate"
                }
            ],
            "name" : "CentOS 6.5 x86_64"
        },
        {
            "id" : "f97b8d36-935e-4666-9c58-8a0afc6d3796" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796" ,
                    "rel" : "bookmark"
                },
                {
                    "href" : "http://8.21.28.222:9292/f9828a18c6484624b571e85728780ba8/images/f97b8d36-935e-4666-9c58-8a0afc6d3796" ,
                    "type" : "application/vnd.openstack.image" ,
                    "rel" : "alternate"
                }
            ],
            "name" : "Fedora 20 x86_64"
        }
    ]
}

Экспортируйте $ OS_PROJECT_ID из вызова токена, а затем используйте Compute API для вывода списка серверов:

 $ curl -s -H "X-Auth-Token:  $OS_TOKEN " \
  http://8.21.28.222:8774/v2/ $OS_PROJECT_ID /servers \
  | python -m json.tool
 {
    "servers" : [
        {
            "id" : "41551256-abd6-402c-835b-e87e559b2249" ,
            "links" : [
                {
                    "href" : "http://8.21.28.222:8774/v2/f8828a18c6484624b571e85728780ba8/servers/41551256-abd6-402c-835b-e87e559b2249" ,
                    "rel" : "self"
                },
                {
                    "href" : "http://8.21.28.222:8774/f8828a18c6484624b571e85728780ba8/servers/41551256-abd6-402c-835b-e87e559b2249" ,
                    "rel" : "bookmark"
                }
            ],
            "name" : "test-server"
        }
    ]
}


Оригинал статьи находится тут https://developer.openstack.org/api-guide/quick-start/ .

Также смотрите статью https://developer.openstack.org/api-guide/quick-start/api-quick-start.html .

Также смотрите статью с подробным описанием всех возможных действий с инстансами через API https://developer.openstack.org/api-ref/compute/