【Hinemos 4.1.x/Perl】WebサービスAPIでノードのファシリティIDのリストを取得する
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
WebサービスAPIを使用して、ファシリティIDのリストを取得して出力するスクリプトを、例によってPerlで実装してみました。
以下が実装例です。なお、実行するためには、事前にYAML::XSとSOAP::Liteがインストールされている必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/usr/bin/env perl # usage : get_nodelist.pl [-a|--all] FACILITY_ID_OF_SCOPE # caveat: Results always contain invalid (=unmanaged) nodes due to API spec use strict; use warnings; use YAML::XS; use SOAP::Lite; use Getopt::Long; my $all = 0; GetOptions("all" => \$all); my $conf = Load(do{ local $/; }); my $client = setup_client($conf); my $som = $client->call($conf->{method} => create_args($ARGV[0], $all)); die $som->fault->{faultstring}."\n" if $som->fault; my @nodes = map { $_->{facilityId} } $som->paramsall; if (@nodes) { print join(q{,}, sort @nodes), "\n"; } else { print "No nodes contained within the specified scope.\n"; } sub setup_client { my $conf = shift; my $client = SOAP::Lite->new( proxy => sprintf $conf->{uri}, @{$conf}{qw/userid passwd host/}, ); $client->ns(@{$conf}{qw/target prefix/}); return $client; } sub create_args { my ($facility_id, $all) = @_; $facility_id = "REGISTERED" unless defined $facility_id; return SOAP::Data->name("arg0" => $facility_id ), SOAP::Data->name("arg1" => 1 - $all ), ; } __END__ --- host: 192.168.xxx.xxx:8080 realm: Hinemos Web Service userid: hinemos passwd: hinemos target: http://repository.ws.clustercontrol.com prefix: tns uri: http://%s:%s@%s/HinemosWS/RepositoryEndpoint method: getNodeList |
実装内容に関しては、取り立てて[前回](http://.atomitech.co.jp/study/entry-532/)と大きく変わるところはありません。アクセス先のエンドポイントと、利用するWebサービスAPIは違いますが、APIの呼び出し方はほとんど同じです。
なお今回は、次のようなリポジトリ構成を用意しました。
上記のリポジトリ構成を持つHinemosマネージャに対して、スクリプトを実行してみます。実行例は次のとおりです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ./get_nodelist.pl SC01 bak01 # ./get_nodelist.pl SC02 mon01 # ./get_nodelist.pl SC03 web01 # ./get_nodelist.pl -a SC01 bak01,mon01,web01 # ./get_nodelist.pl -a SC02 mon01,web01 # ./get_nodelist.pl -a SC03 web01 # ./get_nodelist.pl REGISTERED bak01,mon01,web01 # ./get_nodelist.pl INTERNAL No nodes contained within the specified scope. # ./get_nodelist.pl FOOBAR No nodes contained within the specified scope. |
ご覧のとおり、コマンドラインスイッチ”-a”を設定しない場合は、指定したスコープの直下のノードのファシリティIDのみを出力し、設定した場合は、配下の全てのノードのファシリティIDを出力します。
注意事項として、リストには管理対象外のノードのファシリティIDも含まれます。上記のスクリプトは、WebサービスAPIのgetNodeList()
を利用していますが、このメソッドで取得するノード情報の”管理対象”を表すプロパティ(valid
)の値は、そのノードの”管理対象”のチェックの有無にかかわらず、常にtrue
となるようです。したがって、”管理対象”の正しい値を取得するためには、別のメソッドを使用する必要がありそうです(今後の宿題にします…)。
以上、簡単ですがHinemos ver4.1.xのWebサービスAPIに関する話題をご紹介しました。