Керування проєктом через API за допомогою cURL у Linux
Робота з API складається з таких етапів:
Автентифікація за допомогою RC-файла
Для отримання токена та подальшої роботи з API потрібно автентифікуватися в 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
на:
export OS_PASSWORD={Your password to access the service}
Попередження
Отримання ідентифікатора токена
Відкрийте 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`` форматує відповідь для зручного читання.
Наприклад, для подальшої роботи потрібно дізнатися ID проєкту. Виконайте запит:
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 проєкту ``id`` — ``b1a56f59f6f013a061074fdcc56daec0``.
Обробка відповіді
Якщо запит завершився помилкою, сервіс поверне код, повідомлення та короткий опис причини:
{
"error": {
"code": 401,
"message": "The request you have made requires authentication.",
"title": "Unauthorized"
}
}
Повний перелік можливих кодів відповіді та рекомендованих дій наведено в полі Коди стану документації відповідного запиту.