2011年11月27日日曜日

CloudStack API用Perlライブラリを公開しました

以前作成したスクリプトをライブラリ化してCPANに公開しました。
Net::CloudStack

CloudStack APIについてのdocumentは下記をご参照ください。
Developer's Guide:CloudStack


ライブラリinstall手順(cpan install以外の部分) についてまとめます。
  1. 事前準備
    #yum install make cpan gcc expat-devel
    #cpan YAML               #私の環境ではcpanで必要でした。
    #cpan YAML::Tiny            #後述のサンプルスクリプトで使用。
    Cent6.xの場合
    # vi /usr/share/perl5/CPAN/Config.pm
    Cent5.xの場合
    # vi /usr/lib/perl5/5.8.8/CPAN/Config.pm
      'prerequisites_policy' => q[follow],        #[yes]押下を省略するため、ask->followに変更
  2. 事前準備その2(https対応必要の場合)
    #yum install openssl-devel
    #cpan LWP::Protocol::https
  3. ライブラリinstall
    #cpan Net::CloudStack

以下簡易なサンプルスクリプト例と実行例です。(冗長な部分もあるかもしれませんが、ご勘弁)
  • client用サンプルスクリプト(cs-api.pl)
    #!/usr/bin/perl -w
    use strict;
    use warnings;
    use Net::CloudStack;
    use YAML::Tiny;
    use Data::Dumper;
    use JSON;
    use XML::Simple;

    my ($xml_json,$send_request);
    my $yaml = YAML::Tiny->new;
    $yaml = YAML::Tiny->read('cs-api.yml');
    my $obj;

    if(defined($yaml->[0]->{xml_json})){
        $xml_json = $yaml->[0]->{xml_json};
    }
    else{
        $xml_json = 'json';
    }

    if(defined($yaml->[0]->{send_request})){
        $send_request = $yaml->[0]->{send_request};
    }
    else{
        $send_request = 'no';
    }

    my $api = Net::CloudStack->new(
        api_key => $yaml->[0]->{api_key},
        secret_key => $yaml->[0]->{secret_key},
        base_url => $yaml->[0]->{base_url},
        api_path => $yaml->[0]->{api_path},
        xml_json => $xml_json,
        send_request => $send_request,
        );

    my $cmd = $ARGV[0];
    if(defined($ARGV[1])){
        $api->${cmd}("$ARGV[1]");
    }
    else{
        $api->${cmd};
    }
    print Dumper($api->url);
    print Dumper($api->response);
    if($api->xml_json =~ /json/i){
        $obj = from_json($api->response);
    }
    else{
        my $parser = XML::Simple->new;
        $obj = $parser->XMLin($api->response);
    }
    print Dumper($obj);
    if($api->xml_json =~ /json/i){
        foreach (keys %$obj){
            print Dumper($obj->{$_}->{jobid});
        }
    }
    else{
            print Dumper($obj->{jobid});
    }
    exit;
  • 設定ファイル(cs-api-yml)
    cs-api.plと同じディレクトリに保存。(下記伏字にしています)
    ---
    api_key:    ***
    secret_key: ***
    base_url:   http://*.*.*.*
    api_path:   portal/client/api?  #your API PATH
    xml_json:   json
    send_request:   yes
  • 実行例
    # ./cs-api.pl startVirtualMachine id=521
    $VAR1 = 'http://*.*.*.*/portal/client/api?apikey=*****&command=startVirtualMachine&id=521&response=json&signature=***';
    $VAR1 = '{
       "startvirtualmachineresponse" : {
          "jobid" : 2114
       }
    }
    ';
    $VAR1 = {
              'startvirtualmachineresponse' => {
                                                 'jobid' => 2114
                                               }
            };
    $VAR1 = 2114;
また、CPANに公開するまでの手順もまとめました。
CPAN Authorになるまでのまと

備忘録。下記対応予定です
  • APIをresponse処理対応
  • error処理
  • document整備
---
追記 2011/12/02
  • サンプルスクリプトについて追記
追記 2011/12/06
  • ライブラリ更新に伴い、サンプルスクリプト修正
追記 2012/2/17
  • Cent5.xの手順を追加
このエントリーをはてなブックマークに追加