Управление проектом через API с помощью cURL в Linux
Работа с API включает:
Аутентификация с помощью RC-файла
Для получения токена авторизуйтесь в SIM-Cloud. Параметры подключения передаются через переменные окружения из RC-файла.
Создайте файл
api-rcсо следующим содержимым:
unset OS_TOKEN
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_USERNAME={your_username}
# Get the password.
echo "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT
export OS_PROJECT_NAME={your_project_name}
export OS_IDENTITY_API_VERSION=3
export PS1='[\u@\h (SIM-CLOUD API)]\$ '
export OS_API="https://api.sim-cloud.net"
export OS_AUTH_URL=$OS_API":5000/v3"
Примечание
# Get the password.
echo "Please enter your OpenStack Password for project $OS_PROJECT_NAME as user $OS_USERNAME: "
read -sr OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT
to
export OS_PASSWORD={пароль для доступа к сервису}
Предупреждение
Получение токена
Откройте Bash, перейдите в каталог с RC-файлом и загрузите переменные командой
sourceили.:
source api-rc
При запросе введите пароль проекта SIM-Cloud.
Получите токен командой:
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"'"
}
}
}
}' | echo
В ответе строка < X-Subject-Token: содержит токен для API-запросов, например:
< X-Subject-Token: gAAAAABbcWL17tiGivJp4oc8OGiZS0Sfgn_-ZrlNzocZwTo0nfwe3Y2EbUrI-k3JfSLrIksLAKt-iFGwIhn9-JoiEL4EpTgI4WxZZPzGubDSMgoO-3wRzAm64cVr91efQU_W4JYYjxwGCqL-T4XVLncngUg7pzqJ0AHzmZB4OMXeB5dlFqDpPlE
Присвойте это значение переменной OS_TOKEN и экспортируйте её.
Получить и экспортировать токен можно одной командой:
export OS_TOKEN=`curl -s -i -H "Content-Type: application/json" -X POST $OS_AUTH_URL/auth/tokens -d '{"auth": {"identity": {"methods": ["password"], "password": {"user": {"name": "'"$OS_USERNAME"'", "domain": {"name": "default"}, "password": "'"$OS_PASSWORD"'" }}}}}' | awk '/X-Subject-Token/ {print $2}'`
Отправка API-запроса
Обычно API-запрос имеет вид:
curl -s -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" -X <METHOD> <URL> -d '{key: value}' | python -mjson.tool
- где:
- ``$OS_TOKEN`` — токен из переменной окружения;``<METHOD>`` — HTTP-метод GET, HEAD, POST или PUT; по умолчанию GET;``<URL>`` — конечная точка и путь из документации OpenStack;после ``-d`` передаётся структура параметров в виде пар ``key:value``;``| python -mjson.tool`` форматирует JSON-ответ для чтения.
Например, для дальнейшей работы нужен идентификатор проекта.
Выполните запрос:
curl -s -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" https://api.sim-cloud.net:5000/v3/auth/projects | python -mjson.tool
- где:
- ``$OS_TOKEN`` — токен из переменной окружения;используется GET по умолчанию;URL состоит из конечной точки и пути из документации Identity API.
Ответ имеет вид:
{
"links": {
"next": null,
"previous": null,
"self": "https://api.sim-cloud.net:5000/v3/auth/projects"
},
"projects": [
{
"description": "",
"domain_id": "b9091e0ccd2febc3464e4d83c04be17a",
"enabled": true,
"id": "b1a56f59f6f013a061074fdcc56daec0",
"is_domain": false,
"links": {
"self": "https://api.sim-cloud.net:5000/v3/projects/b1a56f59f6f013a061074fdcc56daec0"
},
"name": "demo",
"parent_id": "b9c04be1e0cc464e4091d83d2febc37a"
}
]
}
- из него видно:
- имя проекта в поле ``name`` — ``demo``;идентификатор в поле ``id`` — ``b1a56f59f6f013a061074fdcc56daec0``.
Обработка ответа
При неудачном запросе возвращаются код, сообщение и краткое описание ошибки:
{
"error": {
"code": 401,
"message": "The request you have made requires authentication.",
"title": "Unauthorized"
}
}
Коды ответов и рекомендуемые действия приведены в поле Коды состояния документации каждого запроса.