xcat-core/xCAT-server/xCAT-wsapi/xcatws-test.pl

110 lines
2.7 KiB
Perl
Raw Normal View History

2014-01-31 13:26:55 +00:00
#!/usr/bin/env perl
# IBM(c) 2014 EPL license http://www.eclipse.org/legal/epl-v10.html
2014-01-31 13:26:55 +00:00
# This is a command which can be used to access the rest api of xCAT
use strict;
use Getopt::Long;
use LWP;
use JSON;
require HTTP::Request;
# set the usage message
my $usage_string = "Usage:
restapi -u url -m GET|PUT|POST|DELETE [-f html|json|xml] [-V]
-u The url of the action. .e.g to get the power status of node \'nodename\' https://httpserver/xcatws/nodes/nodename/power
-m The method of the request
-h The hostname of the xCAT web server
-o Target object
-f The output format of the requested action
-V Display the verbose message\n";
#todo: make the code below into functions so that this file can be used for 2 purposes:
# 1. contain all the test cases that can all be run at once
# 2. if arguments are passed in, run the one api call passed in
2014-01-31 13:26:55 +00:00
# Parse the argument
$Getopt::Long::ignorecase = 0;
Getopt::Long::Configure( "bundling" );
if (!GetOptions( 'u=s' => \$::URL,
'f=s' => \$::FORMAT,
'h=s' => \$::HOST,
'o=s' => \$::OBJ,
'm=s' => \$::METHOD,
'V' => \$::VERBOSE )) {
print $usage_string;
exit 1;
}
if (defined($::FORMAT)) {
if ($::FORMAT eq "") {
$::FORMAT = "html";
} elsif ($::FORMAT !~ /^(html|json|xml)$/) {
print $usage_string;
exit 1;
}
}
else{
$::FORMAT = "html";
}
if (defined($::METHOD)){
if ($::METHOD !~/^(GET|PUT|POST|DELETE)$/){
print $usage_string;
exit 1;
}
}
else{
print $usage_string;
exit 1;
}
if (!$::URL) {
if ($::HOST && $::OBJ) {
$::URL = "https://$::HOST/xcatws/$::OBJ?format=$::FORMAT";
} else {
print $usage_string;
exit 1;
}
} else {
if ($::URL =~ /\?/){
$::URL .= "&format=$::FORMAT";
}
else{
$::URL .= "?format=$::FORMAT";
}
}
my @updatearray;
my $fieldname;
my $fieldvalue;
my %entryhash;
2014-01-31 13:26:55 +00:00
if (scalar(@ARGV) > 0){
foreach my $tempstr (@ARGV){
push @updatearray, split(/=/,$tempstr);
2014-01-31 13:26:55 +00:00
}
}
%entryhash=@updatearray;
2014-01-31 13:26:55 +00:00
my $request;
my $ua = LWP::UserAgent->new();
my $response;
if (($::METHOD eq 'PUT') || ($::METHOD eq 'POST')){
my $tempstr = encode_json \%entryhash;
2014-01-31 13:26:55 +00:00
$request = HTTP::Request->new($::METHOD => $::URL);
$request->header('content-type' => 'text/plain');
$request->header('content-length' => length($tempstr));
$request->content($tempstr);
}
elsif(($::METHOD eq 'GET'|| ($::METHOD eq 'DELETE'))){
$request = HTTP::Request->new($::METHOD=>$::URL);
}
my $response = $ua->request($request);
print $response->content . "\n";
print $response->code . "\n";
print $response->message . "\n";