【Hinemos 5.0】特定のジョブの実行結果をコマンドで取得する(その1の補足の補足)
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
せっかく、WebサービスAPIを使って実装できたので、こちらの記事で紹介した方法についても、同様にWebサービスAPIを使って実装してみましょう。
いきなりですが、サンプルコードは以下のとおりです。なお、WebサービスAPIはgetNodeDetailList
を使います。
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/usr/bin/env perl # usage: get_commandresults.pl args # args : -s|--sessionid SESSION_ID -u|--unitid JOBUNIT_ID # -j|--jobid JOB_ID -f|--facilityid FACILITY_ID use strict; use warnings; use YAML::XS; use SOAP::Lite; use Getopt::Long; my ($sid, $uid, $jid, $fid) = ("not_specified") x 4; GetOptions( "sessionid=s" => \$sid, "unitid=s" => \$uid, "jobid=s" => \$jid, "facilityid=s" => \$fid, ); my $conf = Load(do{ local $/; }); my $client = setup_client($conf); my $som = $client->call($conf->{method} => create_args($sid, $uid, $jid)); die $som->fault->{faultstring}."\n" if $som->fault; my $val = get_results($fid, [$som->paramsall]); if (defined $val) { print "$val"; } else { die "endValue not found.\n"; } sub get_results { my ($fid, $target) = @_; my $val; for my $subtarget (@$target) { next unless ref($subtarget) eq 'HASH'; if ($subtarget->{facilityId} eq $fid) { $val = $subtarget->{endValue}; last; } } return $val; } 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 ($sid, $uid, $jid) = @_; return SOAP::Data->name("arg0" => $sid), SOAP::Data->name("arg1" => $uid), SOAP::Data->name("arg2" => $jid), ; } __END__ --- host: 127.0.0.1:8080 realm: Hinemos Web Service userid: hinemos passwd: hinemos target: http://jobmanagement.ws.clustercontrol.com prefix: tns uri: http://%s:%s@%s/HinemosWS/JobEndpoint method: getNodeDetailList |
ポイントとしては、getNodeDetailList
で取得されるオブジェクトの構造が、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ endDate = ... endValue = ... facilityId = ... message = ... : }, { endDate = ... endValue = ... facilityId = ... message = ... : }, |
のように、単純なHashRefのリストになっているということです。そのため、再帰の実装も不要で、リストを先頭から順に総なめするだけで、目的のノードの情報を簡単に取得することができます。
サンプルコードの実行結果(の例)は以下のとおりです。なお、セッションIDやその他のジョブ実行履歴には、こちらの記事で紹介したものを使用しています。
1 2 3 4 5 6 7 8 |
[root@nodexxx ~]# ./get_commandresults.pl -s 20161129161443-000 -u JU_TEST -j JB_TEST -f nodexxx 12(改行なし) [root@nodexxx ~]# ./get_commandresults.pl -s 20161129161443-000 -u JU_TEST -j JB_TEST -f nodexxxalt 12(改行なし) [root@nodexxx ~]# ./get_commandresults.pl -s 20161129161443-000 -u JU_TEST -j JB_TEST2 -f nodexxx 0(改行なし) [root@nodexxx ~]# ./get_commandresults.pl -s 20161129161443-000 -u JU_TEST -j J_TEST2 -f nodexxxalt 0(改行なし) |
問題なく、ジョブの起動コマンドの戻り値を取得することができました。なお、今回は起動コマンドの戻り値でしたが、コードをほんの少し改造するだけで、そのノードの実行状態やメッセージ等を出力することももちろん可能です。
以上、簡単ですがその1の補足の補足でした。WebサービスAPIの他のメソッドについても、機会があればご紹介したいと思います。