APIを介したクラウドインフラストラクチャ向けParallels Automationの管理

前回 、Parallels Automation for Cloud Infrastructure(PACI)ベースのクラウドサーバー-見積価格と機能についてお話しました。 含めて、サーバー管理用のAPIの可用性について簡単に説明しました。 今日は、APIアクションと基本的なコマンドの例を詳しく見ていきます。



残念ながら、以前の投稿はあまり高く評価されていませんでしたが、 テストに参加したhabrayuzersから興味深い質問、多くのフィードバック、いくつかのバグレポートを受け取りました。 この記事と以下の記事で取り上げたトピックをカバーしようとします。



既に述べたように、クラウドの基盤であるParallels Automation for Cloud Infrastructureは、Parallels Automationの請求およびサービスプロビジョニングシステムのモジュールです。 この製品には、優れたRESTful APIが付属しています。 APIコマンドを使用してリスト全体を提供するわけではありません。 公式ドキュメントで確認できます 。 仮想マシンとコンテナを管理するこの方法の例をいくつか紹介します。











構文と句読点



クラウドリソースの操作は、API要求をPACI管理サーバーに送信することにより行われます。 回答はXML形式で提供され、コードはできるだけ読みやすくユーザー指向であり、ソウルレスパーサーによって処理されないため、すべてのフィールドに意味のある名前が付けられます。 さらに、管理を簡単に自動化でき、XML自体が突然必要になった場合に問題なく解析されます。



PACI管理サーバーのアドレスでAPIにアクセスする必要があります(将来的にはbaseURLに変更します)。



https://{ip_address | hostname}:port/paci/version
      
      





ip_addressホスト名とポートですべてが多かれ少なかれ明確な場合、残りの2つのフィールドに注目する価値があります。 / paci /は常に/ paci /のように見えますが、それ以外は何もありません。 また、バージョンはv1.0形式で示されます(それぞれ、数字はPACIの将来のバージョンで変更される可能性があります)。



したがって、完成したbaseURLは次のようになります。



 https://109.120.*.*:4465/paci/v1.0
      
      





仮想サーバーとのさらなる通信は、「右側」のbaseURL拡張機能を使用して実行されます-baseURLに追加のパラメーターを設定および追加するだけです。 / ve-仮想サーバーへのアクセス。サーバーは通常独自の識別子を持っているため、サーバー名/ my-server-01は/ veの後に追加されます。



2つの追加パラメーターを持つbaseURL文字列は次の形式を取ります。



 https://109.120.*.*:4465/paci/v1.0/ve/my-server-01
      
      





次の行と同等です:



 baseURL/ve/my-server-01
      
      





一部のクエリでは、追加のパラメーターを定義できます。 多くの場合、オプションはオプションですが、非常に便利です。 追加のパラメーターはすべて、疑問符の後にリストされています。



このようなクエリの例は次の行です。



 GET baseURL/ve?subscription=1000001
      
      





構文を使用して、多かれ少なかれ理解しました。次に、可能性に移りましょう。




APIを介して利用可能なアクションは何ですか?



可能性は非常に広いです。 「イノセント」機能が利用可能です。



そしてもっと深刻なこと:





サーバー管理



既に知っているように、次のコマンドでサーバーのリストを表示できます



 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}の代わりに、サーバー名(上記の回答の名前フィールド)を挿入し、その後、サーバーを起動または停止するコマンドを追加します。 繰り返しますが、梨の殻をむくのと同じくらい簡単で、ここでは、原則として、止めることは何もありません。



コンソールから新しいサーバーを作成するのはもう少し複雑です。 このコマンドには多数の追加パラメーターがあり、スライダー付きのGUIではないため、頭の特定のリソースの使用を制限したり、チートシートをのぞき見したりする必要があります。 パラメーターを超えた場合、エラー406:「VE番号のサブスクリプション制限を超えました」が表示されます。



コマンド自体は次のようになります。



 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には、作成されたロードバランサーに関する情報が含まれています。



 <?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のこの部分に含まれるのは関数のみです。 それらの1つは、利用可能な「プリインストールされた」サーバーOSのリストです。



 GET baseURL/template/{name}
      
      





自動バックアップ用の既製プリセットのリスト:



 GET baseURL/schedule
      
      







PHPコード例





サーバーのリストを取得するための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
      
      







クラウドサーバーの非商用テストは2013年2月1日まで継続されます。サービスの開発は、フィードバックに大きく依存します。 今すぐ参加しよう



サービスの最高のレビューの著者のために、 賞品用意しました





以前の関連記事



Infoboxのクラウドサーバー



参照資料へのリンク



Parallels Automation for Cloud Infrastructure APIドキュメント(PDF)



インフォボックスブログ



All Articles