- PVSM.RU - https://www.pvsm.ru -
В прошлый раз [1] мы рассказывали про Облачные серверы на базе Parallels Automation for Cloud Infrastructure (PACI) – предполагаемые цены, функционал, в том числе, мельком упомянули наличие API для управления серверами. Сегодня мы подробнее рассмотрим доступные через API действия и примеры основных команд.
К сожалению, предыдущий пост оценили не очень высоко, но мы получили интересные вопросы, много отзывов и несколько баг-репортов от читательов, присоединившихся к тестированию [2]. Постараемся охватить затронутые вами темы в этом и следующих постах.
Как мы уже рассказывали, основа нашего облака – Parallels Automation for Cloud Infrastructure – модуль системы биллинга и провиженинга услуг Parallels Automation. Продукт поставляется с отличным RESTful API. Приводить весь листинг с командами API мы не будем – его можно посмотреть в официальной документации [3]. Лучше покажем несколько примеров этого способа управления виртуальными машинами и контейнерами.
Работа с ресурсами облака осуществляется через отправку API-запросов управляющему серверу PACI. Ответы приходят в XML-формате, код максимально читабелен и ориентирован на пользователя, а не на обработку бездушным парсером, так что все поля имеют вразумительные имена. Вдобавок, можно легко автоматизировать управление, а сам XML без проблем парсится, если вам вдруг это понадобится.
Обращаться к API нужно по адресу управляющего сервера PACI (в дальнейшем будем сокращать до baseURL):
https://{ip_address | hostname}:port/paci/version
Если с ip_address hostname и port всё более-менее понятно, то на оставшихся двух полях стоит заострить внимание. /paci/ всегда должно выглядеть как /paci/, и никак иначе. А версия указывается в формате v1.0 (цифры, соответственно, могут и меняться в будущих версиях PACI).
Таким образом, готовый baseURL будет выглядеть вот так:
https://109.120.*.*:4465/paci/v1.0
Дальнейшее общение с виртуальным сервером осуществляется при помощи расширения baseURL “вправо” — мы просто ставим / и дописываем дополнительные параметры к baseURL. /ve — обращение к виртуальному серверу, а так как сервер, обычно, имеет свой идентификатор, то после /ve дописывается имя сервера /my-server-01.
Строка baseURL с двумя дополнительными параметрами принимает вид:
https://109.120.*.*:4465/paci/v1.0/ve/my-server-01
Что равноценно строке:
baseURL/ve/my-server-01
Некоторые запросы позволяют определение дополнительных параметров. Зачастую параметры не обязательные, но очень полезные. Все дополнительные параметры перечисляются после знака вопроса.
Примером такого запроса может служить следующая строка:
GET baseURL/ve?subscription=1000001
С синтаксисом мы более-менее разобрались, теперь перейдём к возможностям.
Возможности достаточно широкие. Доступны “невинные” функции:
И более серьёзные вещи:
Как вы уже знаете, просмотреть список серверов можно командой
GET baseURL/ve/
В ответ придёт несложная XML-ка:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ve-list>
<ve-info subscription-id="1000001" name="Habr1" state="CREATED" description="Habr Example 1"/>
<ve-info subscription-id="1000002" name="Habr2" state="CREATED" description="Habr Example 2"/>
</ve-list>
Описание полей есть в документации, но и их названия, в принципе, говорят сами за себя.
Остановить или запустить готовый сервер можно простым запросом:
PUT baseURL/ve/{ve-name}/start|stop
Вместо {ve-name} вставляем название сервера (поле name из ответа выше), а после него добавляем команду на запуск или остановку сервера. Опять же, проще простого и останавливаться тут, в принципе, не на чем.
Чуть сложнее выглядит создание нового сервера из консоли. У данной команды куча дополнительных параметров, а ограничения на использование тех или иных ресурсов придётся держать в голове или подсматривать в шпаргалке, так как это не GUI с ползунками. При превышении допустимых параметров вы получите ошибку 406: “Subscription limit for VE number exceeded".
Сама команда выглядит вот так:
POST baseURL/ve/
А вот дальше начинается вся магия. Помимо самого запроса, нужно сформировать ему ещё и XML-тело, в котором будут прописаны все-все параметры требуемого сервера:
<?xml version="1.0" encoding="UTF-8"?>
<ve>
<name>HabrExample1</name>
<description>VE Linux 40</description>
<subscription-id>1000001</subscription-id>
<cpu number="1" power="1500"/>
<ram-size>256</ram-size>
<bandwidth>100</bandwidth>
<no-of-public-ip>1</no-of-public-ip>
<no-of-public-ipv6>0</no-of-public-ipv6>
<ve-disk local="true" size="20"/>
<platform>
<template-info name="centos-6-x86_64"/>
<os-info technology="CT" type="linux-free"/>
</platform>
<backup-schedule name="daily"/>
<admin login="root" password="152eyyBHO"/>
</ve>
Если всё указано правильно, то придёт ответ об успешном создании новой виртуалки:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pwd-response>
<message>VE create initiated</message>
<password>152eyyBHO</password>
</pwd-response>
Функционал, заложенный в эту группу команд, позволяет здорово экономить время и ресурсы при развёртывании и масштабировании новых систем.
Следующие примеры подразумевают, что образы уже подготовлены, а вы ознакомились с их списком командой.
GET baseURL/image
Допустим, сервер ответил нам, что есть вот такой образ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<image-list>
<image-info image-of="HabrExample3" active="true" load-balancer="true" subscriptionid="100001" created="2012-11-11 19:19:19.84091+04" size="3" name="lbimage"/>
</image-list>
Хотите развернуть из него ещё один сервер? Нет ничего проще! Стандартный запрос:
POST baseURL/ve/{subscription-id}/{ve-name}/from/{image-name}
в нашем случае превращается в
POST baseURL/ve/1000003/Habr3/from/HabrExample3
На этом, собственно, работа с созданием сервера из образа заканчивается, но никто не мешает создать новый сервер простым клонированием уже имеющегося:
POST baseURL/ve/{ve-name}/clone-to/{new-server-name}
Список имеющихся балансировщиков «заказывается» так же, как и многие другие списки имеющихся сервисов, услуг и возможностей:
GET baseURL/load-balancer
В ответ приходит коротенький XML с информацией о созданных load balancer’ах:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<lb-list>
<load-balancer state="STARTED" subscription-id="1" name="LB1"/>
<load-balancer state="STARTED" subscription-id="1" name="LB2"/>
</lb-list>
Любой имеющийся сервер легко присоединить к уже работающему балансировщику:
POST baseURL/load-balancer/{lb-name}/{ve-name}
Да и отсоединить не сложнее:
DELETE baseURL/load-balancer/{lb-name}/{ve-name}
В эту часть API попали пока только функции. Одна из них – список доступных для использования “предустановленных” серверных ОС:
GET baseURL/template/{name}
Список готовых пресетов для автоматического бэкапа:
GET baseURL/schedule
GET-запрос на получение списка серверов:
<?php
$mainStr = "http://109.120.166.3:4465/paci/v1.0/";
$queryStr = 've';
$url = $mainStr.$queryStr;
$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, '<login>:<password>');
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($process);
curl_close($process);
?>
XML-ответ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ve-list>
<ve-info subscription-id="1000001" name="web1" state="CREATED" description="Web server 1"/>
<ve-info subscription-id="1000002" name="web2" state="CREATED" description="Web server 2"/>
</ve-list>
PUT-запрос на запуск-остановку сервера:
<?php
$mainStr = "http://109.120.166.3:4465/paci/v1.0/";
$queryStr = 've/<ve-name>/<start | stop>';
$url = $mainStr.$queryStr;
$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($process, CURLOPT_PUT, 1);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, '<login>:<password>');
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($process);
curl_close($process);
?>
XML-ответ:
* VE START initiated
POST-запрос на создание сервера:
<?php
$mainStr = "http://109.120.166.3:4465/paci/v1.0/";
$queryStr = 've';
$serverInfo =
'<?xml version="1.0" encoding="UTF-8"?>
<ve>
<name>Web40</name>
<description>VE Linux 40</description>
<subscription-id>1000001</subscription-id>
<cpu number="2" power="1600"/>
<ram-size>512</ram-size>
<bandwidth>100</bandwidth>
<no-of-public-ip>2</no-of-public-ip>
<no-of-public-ipv6>2</no-of-public-ipv6>
<ve-disk local="true" size="3"/>
<platform>
<template-info name="centos-6-x86_64"/>
<os-info technology="CT" type="linux-free"/>
</platform>
<backup-schedule name="daily"/>
<admin login="root" password="qwwqq45"/>
</ve> ';
$url = $mainStr.$queryStr;
$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, '<login>:<password>');
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_POSTFIELDS, $serverInfo);
$head = curl_exec($process);
curl_close($process);
?>
XML-ответ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<pwd-response>
<message>VE create initiated</message>
<password>152eyyBHO</password>
</pwd-response>
DELETE-запрос на удаление сервера
<?php
$mainStr = "http://109.120.166.3:4465/paci/v1.0/";
$queryStr = 've/<ve-name>';
$url = $mainStr.$queryStr;
$process = curl_init();
curl_setopt($process, CURLOPT_URL, $url);
curl_setopt($process, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_USERPWD, '<login>:<password>');
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($process);
curl_close($process);
?>
XML-ответ:
* VE DELETE initiated
Некоммерческое тестирование Облачных серверов продолжится до 1 февраля 2013. Развитие сервиса во многом зависит от ваших отзывов. Присоединяйтесь [2]!
Для авторов лучших обзоров сервиса мы приготовили призы [4].
Облачные серверы от Infobox [1]
Официальная документация по использованию API в Parallels Automation for Cloud Infrastructure (PDF) [3]
Автор: infobox
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/virtualizatsiya/21386
Ссылки в тексте:
[1] прошлый раз: http://habrahabr.ru/company/infobox/blog/159801/
[2] тестированию: http://infobox.ru/habr-cloud-test
[3] в официальной документации: http://download.pa.parallels.com/poa/5.4/doc/pdf/POA%20RESTful%20API%20Guide/paci-restful-api-guide-5.4.pdf
[4] приготовили призы: http://blog.infobox.ru/2012/11/24/iipphone5-za-obzory-oblaka/
[5] Блог компании Infobox: http://habrahabr.ru/company/infobox/blog/
[6] Источник: http://habrahabr.ru/post/160667/
Нажмите здесь для печати.