Img_9_lg

OpSource インタフェース・メソッド


このページでは、OpSource Cloud へのインタフェースのためのメソッドを説明します。この API の情報は下記のリンクから集めました:

http://opsourcecloud.net/
http://community,opsourcecloud.net/ Documentation、API セクションへ移動します。 サンプルは OpSource REST API v09 をベースにしています。

Tap In Systems は OpSource Cloud サービスに問い合わせたりコントロールするために、これらの仕様に則って REST 呼び出しを行う Ruby テンプレートのセットを作成しました。通常、これらの呼び出しには、認証のためのユーザ ID とパスワードが必要です。

下記のコードは、組織(organization)ID を保存し、アカウント情報を取得します。 OpSource のアカウントの user と password は、入力仕様の一部として渡されます。その後、それらは API への http REST 呼び出しの中で基本認証アトリビュートとしてセットされます。
$:<< '.\jrubylib'

$:<< '.\jrubylib\jruby-openssl-0.5.2\lib'
require 'rubygems'
require 'net/https'

require 'rexml/document'
require 'uri'
require 'digest/md5'
require 'time'
vcloud_user = $user

vcloud_password = $password
begin    # begin exception processing
puts "--------------------------------------------------------------------------------"
url = URI.parse('https://api.opsourcecloud.net/oec/0.9/myaccount')

req = Net::HTTP::Get.new(url.path)
req.basic_auth vcloud_user, vcloud_password
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) }

token = "none"
orgId = 0
case res
when Net::HTTPSuccess, Net::HTTPRedirection
    # OK

    # puts "body:\n"+res.body
    doc = REXML::Document.new(res.body)
    doc.elements.each('ns3:Account/ns3:orgId') do |ele|

        puts "orgId=#{ele.text}"
        orgId = ele.text
    end
else
    puts "error="+res.error!

end
$myself.add "user",$user
$myself.add "password",$password
$myself.add "orgId",orgId

 
rescue Exception => e
    puts "Exception error #{e.message}"
end

この呼び出しからの応答例を下記に示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ns3:Account xmlns:ns2="http://oec.api.opsource.net/schemas/organization" .. >
<ns3:userName>rdyer</ns3:userName>
<ns3:fullName>Joe Public</ns3:fullName>
<ns3:firstName>Joe</ns3:firstName>

<ns3:lastName>Public</ns3:lastName>
<ns3:emailAddress>jpublic24583@pop.net</ns3:emailAddress>
<ns3:orgId>1831c1a9-9c03-44df-a5a4-f2a4662d6bde</ns3:orgId>
<ns3:roles>
<ns3:role>
<ns3:name>primary administrator</ns3:name>

</ns3:role>
</ns3:roles>
</ns3:Account>
そして、アカウントのアトリビュート付きの応答が Ruby REXML gem を使って XML からパースされます。組織 ID は保存され、このアカウントのために配備されたサーバを読み出すために、次の Ruby 呼び出しに渡されます。下記にリストサーバを呼び出すコードを示します。 最初の呼び出しからの組織 ID が、この API 呼び出しを行うのに必要であることに注意ください。
$:<< '.\jrubylib'

$:<< '.\jrubylib\jruby-openssl-0.5.2\lib'
 
require 'rubygems'
require 'net/https'

require 'rexml/document'
require 'uri'
require 'digest/md5'
require 'time'
 

vcloud_user = $myself.get "user"
vcloud_password = $myself.get "password"
orgId = $myself.get "orgId"

begin    # begin exception processing
puts "--------------------------------------------------------------------------------"
url = URI.parse("https://api.opsourcecloud.net/oec/0.9/#{orgId}/server")
req = Net::HTTP::Get.new(url.path)

req.basic_auth vcloud_user, vcloud_password
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) }

serverHash = Hash.new
case res
when Net::HTTPSuccess, Net::HTTPRedirection
    # OK

    #    puts "body:\n"+res.body
    doc = REXML::Document.new(res.body)
    doc.elements.each('Servers/Server') do |ele|

        puts "id=#{ele.elements['id'].text}, name=#{ele.elements['name'].text}"
        serverHash[ele.elements['id'].text] = Hash.new if serverHash[ele.elements['id'].text].nil?
        ele.elements.each { |ele2|

            if ele2.name.eql?('operatingSystem') then
                ele2.elements.each { |ele3|

                    serverHash[ele.elements['id'].text][ele2.name+":"+ele3.name] = ele3.text

                }
            else
                serverHash[ele.elements['id'].text][ele2.name] = ele2.text

            end
        }
    end
else
    puts "error="+res.error!

end
 
rescue Exception => e
    puts "Exception error #{e.message}"
end
 

$process_servers = false
serverHash.keys.each { |ele|
    puts ele
    serverHash[ele].each { |key,value|

        puts "\t#{key}=#{value}"
    }
    $process_servers = true
}
$outHash = serverHash

サーバをリストするための API 呼び出しからの応答を下記に示します。 XML をパースし、その結果をハッシュ構造体に入れます。それは、将来のコントロールプランのタスクで使用されるかも知れません。開始(start)、停止(stop)、リスタート(restart)、配備(deploy)やストレージ追加(add storage)などのサーバ操作を実施するために、サーバ ID のフィールドを使用することができます。 これらの呼び出しの使い方については、自動化のサンプルセクション を参照してください。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Servers xmlns:ns2="http://oec.api.opsource.net/schemas/organization" ..>
<Server>
<id>37605271-d650-4d8e-a0b0-ad46b25d0952</id>
<name>10-147-16-11</name>

<description>ApiDocTest</description>
<vlanResourcePath>/oec/1831-a33d/network/9dd23-afd3</vlanResourcePath>
<imageResourcePath></imageResourcePath>
<operatingSystem>
<type>UNIX</type>

<displayName>REDHAT5</displayName>
</operatingSystem>
<cpuCount>1</cpuCount>
<memory>2048</memory>
<osStorage>30</osStorage>

<additionalLocalStorage>0</additionalLocalStorage>
<machineName>10-147-17-33</machineName>
<privateIPAddress>10.147.16.11</privateIPAddress>
<isDeployed>true</isDeployed>
<isStarted>false</isStarted>

<created>2009-09-25T10:43:22.105Z</created>
</Server>
</Servers>
 
Tap In クラウド管理サービス 特徴とメリット 活用事例 Tap In クラウドコントロールサービス
イベント管理アーキテクチャ 管理対象テクノロジー ビューア Amazon CloudWatch との統合 3tera Applogic との統合 GoGrid との統合 プロセス自動化
Tap In Systems について 経営 コンタクト
ドキュメント ダウンロード 技術論文 技術ウィッキサイト フォーラム