#!/usr/bin/perl # IBM_PROLOG_BEGIN_TAG # This is an automatically generated prolog. # # # # Licensed Materials - Property of IBM # # (C) COPYRIGHT International Business Machines Corp. 2000,2019 # All Rights Reserved # # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with IBM Corp. # # IBM_PROLOG_END_TAG # sccsid = "@(#)29 1.32 src/rsct/rm/SensorRM/cli/bin/mksensor.perl, sensorcli, rsct_rady, rady2035a 11/12/15 16:37:24" # Creates an RMC sensor use strict; use locale; BEGIN { # this enables us to redirect where it looks for other RSCT files during development $::rsctroot = $ENV{'RSCT_ROOT'} || '/opt/rsct'; $::rsctpm = "$::rsctroot/pm"; $::rsctmsgmaps = "$::rsctroot/msgmaps"; } use lib $::rsctpm; use Getopt::Long; use CT_cli_utils qw(printIMsg printEMsg); use Socket; use CT_cli_input_utils qw( check_input_file ); use MC_cli_utils qw( read_from_Stdin ); $main::PROGNAME = 'mksensor'; $main::MSGCAT = 'sensorcli.cat'; $main::LSMSG = '/opt/rsct/bin/ctdspmsg'; # For the usage, see sensorcli.msg #sub usage { printIMsg('IMsgMksensorUsage_new3'); exit (scalar(@_) ? $_[0] : 1); } #sub usage { printIMsg('IMsgMksensorUsage_new4'); exit (scalar(@_) ? $_[0] : 1); } sub usage { printIMsg('IMsgMksensorUsage_new5'); exit (scalar(@_) ? $_[0] : 1); } Getopt::Long::Configure ("bundling", "no_auto_abbrev", "no_ignore_case", "require_order", "prefix_pattern=(--|-)"); # Parse the cmd line args and check them if(!GetOptions( 'h|help|version' , 'm' , 'v' , 'V', 'c=s' , 'u=s', 'i=s', 'n=s', 'N=s', 'e=s', )) { &usage; } if ($::opt_h) { &usage(0); } if (scalar(@ARGV) < 2) { &usage; } if(defined($::opt_n) && defined($::opt_N)) { &usage; } if ( ($::opt_m) && ( defined($::opt_c) || defined($::opt_e) || defined($::opt_u) ) ) { &usage; } if ($::opt_V) { $::opt_v = 1; } # determine the class to use my $CLASSNAME = "IBM.Sensor"; my $CMDMOD = "Command"; if ($::opt_m) { $CLASSNAME = "IBM.MicroSensor"; $CMDMOD = "ModuleName"; } my $name = shift @ARGV; if (length($name) <= 0) { printEMsg('EMsgMksensorInvName'); exit(1); } my $sscmdmod = ""; my $ssparms = ""; if ( ! $::opt_m ) { $sscmdmod = join(' ', @ARGV); if (length($sscmdmod) <= 0) { printEMsg('EMsgMksensorInvCommand'); exit(1); } } else { $sscmdmod = shift @ARGV; if (length($sscmdmod) <= 0) { printEMsg('EMsgMksensorInvModule'); exit(1); } $ssparms = join(' ', @ARGV); } my $username; my $node_file_flag = 0; # node_file_flag =1 if -N was specified. my $node_file_name = ""; # node_file_name my $node_file_from_stdin = 0; # node_file_from_stdin = 1 if -N '-' # set -api command delimiters my $DELIMITERI = "tvitvitvi"; my $DELIMITERO = "tvotvotvo"; if (defined($::opt_c)) { $::opt_c= "${DELIMITERI}ControlFlags${DELIMITERI}$::opt_c"; } if (defined($::opt_u)) { $username = $::opt_u; $::opt_u = "${DELIMITERI}UserName${DELIMITERI}\"$username\""; } if ( (!defined($::opt_u)) && (!$::opt_m) ) { # we use whoami instead of $USER or $LOGNAME so it will work with su #$username = `whoami`; # changed whoami to id by defect 149988 $username = `PATH=/usr/xpg4/bin:/usr/bin id -un`; chop $username; $::opt_u = "${DELIMITERI}UserName${DELIMITERI}\"$username\""; } if (defined($::opt_m)) # Micro Sensor: def= 0, min= 1 { if (!defined($::opt_i)) { $::opt_i= 0; } elsif ($::opt_i < 0) { printEMsg('EMsgMksensorInvInterval', $::opt_i); exit(1); } } else # Sensor: def= 60, min= 10 { if (!defined($::opt_i)) { $::opt_i= 60; } elsif ($::opt_i < 10 && $::opt_i != 0) { printEMsg('EMsgMksensorInvInterval', $::opt_i); exit(1); } } if (defined($::opt_n)||defined($::opt_N)) { if ($ENV{CT_MANAGEMENT_SCOPE}!=2 && $ENV{CT_MANAGEMENT_SCOPE}!=3) { $ENV{CT_MANAGEMENT_SCOPE}=4; } } if (defined($::opt_n)) { my @nodes = split(/[, ]+/,$::opt_n); $::opt_n = qq/${DELIMITERI}NodeNameList${DELIMITERI}'/ . join("','", @nodes) . q/'/; } if (defined($::opt_N)) { $node_file_name = $::opt_N; $node_file_flag = 1; if ( $node_file_name eq "-" ) { $node_file_from_stdin = 1; } else { if ( check_input_file($node_file_name) ) { exit(1); } } } if (defined($::opt_e)) { $::opt_e = "${DELIMITERI}ErrorExitValue${DELIMITERI}$::opt_e"; } # escape double quotes $sscmdmod =~ s/"/\\"/sg; # escape $ characters $sscmdmod =~ s/\$/\\\$/sg; # escape double quotes $ssparms =~ s/"/\\"/sg; # escape $ characters $ssparms =~ s/\$/\\\$/sg; if ( $ssparms ne "" ) { $ssparms = "${DELIMITERI}Arguments${DELIMITERI}\"$ssparms\""; } my $cmd=""; if($node_file_flag == 0) { $cmd = qq(/usr/bin/mkrsrc-api -I $DELIMITERI -D $DELIMITERO ${CLASSNAME}${DELIMITERI}Name${DELIMITERI}"${name}"${DELIMITERI}${CMDMOD}${DELIMITERI}"${sscmdmod}"${DELIMITERI}RefreshInterval${DELIMITERI}$::opt_i$ssparms$::opt_u$::opt_c$::opt_n$::opt_e 2>&1); } else { if($node_file_from_stdin != 0) { $node_file_name = read_from_Stdin(); } $cmd = qq(/usr/bin/mkrsrc-api -I $DELIMITERI -D $DELIMITERO -N $node_file_name ${CLASSNAME}${DELIMITERI}Name${DELIMITERI}"${name}"${DELIMITERI}${CMDMOD}${DELIMITERI}"${sscmdmod}"${DELIMITERI}RefreshInterval${DELIMITERI}$::opt_i$ssparms$::opt_u$::opt_c$::opt_n$::opt_e 2>&1); } if ($::opt_v) { $main::PROGNAME = 'lssensor'; printIMsg('IMsgRmcCmd', $cmd); $main::PROGNAME = 'mksensor'; } my @output = `$cmd`; my $rc= $?; # remove temp node file if from STDIN if ($node_file_from_stdin != 0) { unlink($node_file_name); } if ($rc) { if ($rc & 255) { printEMsg('EMsgMksensorSignalError', "mkrsrc-api", $rc); } else { $rc = $rc >> 8; if ($output[0] =~ /^ERROR.*/) { if (!$::opt_v) { $output[0] =~ s/^ERROR.*${DELIMITERO}//; } } else { printEMsg('EMsgMksensorNonAPIError', "mkrsrc-api", $rc); } print @output; } } exit $rc;