RackSpace Cloud API - получение токена и точки входа
RackSpace
- американский хостинг с несколькими дата центрами, который предоставляет большое количество хостинговых решений. Одним из продуктов является cloud hosting, со своим набором дополнительных сервисов, таких как резервное копирование, автоматическое скалирование, CDN и т.д.
Управлять всем этим добром можно через API, авторизация в котором происходит на основе имени пользователя и токена. Токен является валидным только 1 день, поэтому каждый скрипт работы с API должен начинаться с получения валидного токена.
Общий запрос выглядит следующим образом:
curl -s -X POST https://identity.api.rackspacecloud.com/v2.0/tokens \
-H "Content-Type: application/json" \
-d '{
"auth": {
"RAX-KSKEY:apiKeyCredentials": {
"username": "<strong>лоин</strong>",
"apiKey": "<strong>api-ключь</strong>"
}
}
}' | python -m json.tool
лоин - Ваш логин в RackSPace cloud
api-ключь монжо найти на странице настроек учетной записи, как показано на скриншоте:
Ответ приходит в формате json
. К сожалению средствами bash
очень неудобно парсить json
, то ли дело php.
Следующая функция принимает имя пользователя и api-ключь в виде аргументов и возвращает token:
<?php
function get_cloud_token($username,$apiKey) {
$url="https://identity.api.rackspacecloud.com/v2.0/tokens";
$post_string = '{"auth": { "RAX-KSKEY:apiKeyCredentials": { "username": "'.$username.'", "apiKey": "'.$apiKey.'" } } }';
$curl_connection = curl_init($url);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json'));
$result = curl_exec($curl_connection);
$data = json_decode($result);
$token = $data->access->token->id;
return $token;
}
?>
Полученый в результате первого запроса json так же содержит точки входа для разных сервисов:
- cloudFilesCDN
- cloudFiles
- cloudBlockStorage
- cloudImages
- cloudQueues
- cloudBigData
- cloudOrchestration
- cloudServersOpenStack
- autoscale
- cloudDatabases
- cloudBackup
- cloudNetworks
- cloudMetrics
- cloudLoadBalancers
- cloudFeeds
- cloudSites
- cloudMonitoring
- cloudDNS
- cloudServers
- rackCDN
Точка входа (endpoint) - это адрес сервера в зависимости от датацентра и сервиса, к которому нужно обратиться.
Следующая функция принимает в виде аргументов имя пользователя, api-ключь, датацентр и имя сервиса. Возвращает точку входа (endpoint) для других запросов:
<?php
function get_endpoint($username,$apiKey,$datacenter,$service) {
$url="https://identity.api.rackspacecloud.com/v2.0/tokens";
$post_string = '{"auth": { "RAX-KSKEY:apiKeyCredentials": { "username": "'.$username.'", "apiKey": "'.$apiKey.'" } } }';
$curl_connection = curl_init($url);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($curl_connection, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Accept: application/json'));
$result = curl_exec($curl_connection);
$data = json_decode($result);
foreach ($data->access->serviceCatalog as $service) {
if ($service->name == $service) {
foreach ($service->endpoints as $endpoint) {
if ($endpoint->region == $datacenter) {
$endpointURL = $endpoint->publicURL;
}
}
}
}
return $endpointURL;
}
?>
Всего есть 6 датацентров:
- ORD - Chicago
- DFW - Dallas/Ft. Worth
- HKG - Hong Kong
- LON - London
- IAD - Northern Virginia
- SYD - Sydney
Оригинальная документация: