Terremark インタフェース・メソッド
このページでは Terremark の vCloud Express サービスへインタフェースするためのメソッドを説明します。下記のリンクは、vCloud API の情報です:https://community.vcloudexpress.terremark.com/en-us/product_docs/w/wiki/6-using-the-vcloud-express-api.aspx
http://communities.vmware.com/community/developer/forums/vcloudapi
Tap In Systems は、Terremark の vCloud Express サービスへ問い合わせたりコントロールするため、これらの仕様に基づき REST 呼び出しを行うテンプレートのセットを作成しました。通常、ほとんどの呼び出しに認証のトークンとペアレント情報が必要なため、これらの呼び出しには順序だった呼び出しが必要です。外部パッケージは必要ありません - テンプレートのスクリプトの中でHTTP情報がセットされます。
下記は、vCloud の organization 情報を読み出す、サンプル Ruby テンプレートです。トークンと orgId が、コントロールプランの前のプレースタスクで読み出されます。私たちは、vCloud の仕様に従って、ヘッダと Get リクエストをセットします。応答はパースされます。XMLをパースするため Ruby REXML gem を使用します。このサンプルでは、VDC id と参照リンクをパースしています。
# $:<< '.\jrubylib' $:<< '.\jrubylib\jruby-openssl-0.5.2\lib' require 'rubygems' require 'net/https' require 'rexml/document' require 'uri' require 'digest/md5' require 'time' puts "--------------------------------------------------------------------------------" token = $myself.get "token" orgId = $myself.get "orgId" urlstring = "https://services.vcloudexpress.terremark.com/api/v0.8/org/#{orgId}" puts "url=#{urlstring}" begin url = URI.parse(urlstring) req = Net::HTTP::Get.new(url.path) req.add_field('Cookie',"vcloud-token=#{token}") req.add_field('Content-Length','0') tmp = Net::HTTP.new(url.host, url.port) tmp.use_ssl = true tmp.verify_mode = OpenSSL::SSL::VERIFY_NONE res = tmp.start {|http| http.request(req) } hrefs = Array.new vdc = 0; case res when Net::HTTPSuccess, Net::HTTPRedirection # OK #puts "body:\n"+res.body doc = REXML::Document.new(res.body) doc.elements.each('Org/Link') do |ele| ele.attributes.each { |x,y| if x.to_s.eql?('href') then puts "\t#{x}=#{y}" hrefs << y end } end res.body.each { |line| if line=~/\/api\/v0.8\/vdc\/(\d+)/ then vdc = $1; puts "Found vdc id #{vdc}" end } else puts "error="+res.error! end puts "Number of hrefs found=#{hrefs.size}" hrefs.each { |x| puts "href=#{x}" } puts "Finished. vdc=#{vdc}" $myself.add "vdc",vdc rescue Exception => e puts "Exception error #{e.message}" end
このスクリプトの出力を下記に示します:
-------------------------------------------------------------------------------- url=https://services.vcloudexpress.terremark.com/api/v0.8/org/123 body: <Org href="https://services.vcloudexpress.terremark.com/api/v0.8/org/123" name="xxxxxxxxxxx" xmlns="http://www.vmware.com/vcloud/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Link rel="down" href="https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456" type="application/vnd.vmware.vcloud.vdc+xml" name="Miami Environment 1"/> <Link rel="down" href="https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456/catalog" type="application/vnd.vmware.vcloud.catalog+xml" name="Miami Environment 1 Catalog"/> <Link rel="down" href="https://services.vcloudexpress.terremark.com/api/v0.8/tasksList/456" type="application/vnd.vmware.vcloud.tasksList+xml" name="Miami Environment 1 Tasks List"/> </Org> href=https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456 href=https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456/catalog href=https://services.vcloudexpress.terremark.com/api/v0.8/tasksList/456 Found vdc id 456 Found vdc id 456 Number of hrefs found=3 href=https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456 href=https://services.vcloudexpress.terremark.com/api/v0.8/vdc/456/catalog href=https://services.vcloudexpress.terremark.com/api/v0.8/tasksList/456 Finished. vdc=456
特定の vCloud コマンドを実行したい場合、サンプルを参考にして下さい。それらは、 get_token の呼び出しからの完全なシーケンスを含んでいます。