diff --git a/perl-xCAT/xCAT/zvmMsgs.pm b/perl-xCAT/xCAT/zvmMsgs.pm index a22066b1e..e36c4cfe7 100644 --- a/perl-xCAT/xCAT/zvmMsgs.pm +++ b/perl-xCAT/xCAT/zvmMsgs.pm @@ -798,9 +798,10 @@ my %zxcativpMsgs = ( 'text' => 'The file system related to the %s directory on the %s system has %s percent space '. 'in use which is more than the expected maximum of %s percent.', 'explain' => 'The file system is over the recommended percentage of space in use. This can cause processing errors.', - 'userResp' => 'You can eliminate this warning by freeing up space in the directories related to the file system. '. - 'See the troubleshooting sections on space issues related to the type of system, whether it is running '. - 'xCAT MN or the ZHCP server, in the Enabling z/VM for OpenStack Manual for instructions on addressing space issues.' + 'userResp' => 'You can eliminate this warning by freeing up space in the directories related to the file system or '. + 'adding space to the CMA\'s root disk. '. + 'See Appendix G, "Increasing the Size of the CMA\'s Root Disk using LVM Commands" section '. + 'in the Enabling z/VM for OpenStack Manual for instructions on increasing the size of the root disk.' }, 'VDS02' => { 'severity' => 4, @@ -808,9 +809,10 @@ my %zxcativpMsgs = ( 'text' => 'The file system related to the %s directory on the %s system has %s available space '. 'which is less than the expected minimum of %s.', 'explain' => 'The file system has less than the minimum available space. This can cause processing errors.', - 'userResp' => 'You can eliminate this warning by freeing up space in the directories related to the file system. '. - 'See the troubleshooting sections on space issues related to the type of system, whether it is running '. - 'xCAT MN or the ZHCP server, in the Enabling z/VM for OpenStack Manual for instructions on addressing space issues.' + 'userResp' => 'You can eliminate this warning by freeing up space in the directories related to the file system or '. + 'adding space to the CMA\'s root disk. '. + 'See Appendix G, "Increasing the Size of the CMA\'s Root Disk using LVM Commands" section '. + 'in the Enabling z/VM for OpenStack Manual for instructions on increasing the size of the root disk.' }, 'VDS03' => { 'severity' => 4, @@ -1069,12 +1071,25 @@ my %zxcativpMsgs = ( 'VU01' => { 'severity' => 4, 'recAction' => 0, - 'text' => 'user %s is not in the policy table.', + 'text' => 'user %s is not in the policy table or has no rule defined in the table.', 'explain' => 'The specified xCAT user is not a known xCAT user. This is most likely '. 'caused by a typo in the zvm_xcat_username property in the '. '/etc/nova/nova.conf file. The xCAT management node obtains the value that it '. - 'recognizes for the user name from the XCAT_MN_admin property in DMSSICNF COPY.', - 'userResp' => 'Correct the OpenStack configuration file.', + 'recognizes for the user name from the XCAT_MN_admin property in DMSSICNF COPY. '. + "\n". + 'Another cause is if the user is defined in the policy table but does not '. + 'have a rule defined.', + 'userResp' => 'Correct the OpenStack configuration file, if it is incorrect. '. + 'Correct the xCAT POLICY table, if it is incorrect.', + }, + 'VU02' => + { 'severity' => 4, + 'recAction' => 0, + 'text' => 'user %s is in the xCAT POLICY table but the rule property is not \'accept\' or '. + '\'allow\'. It is \'%s\'.', + 'explain' => 'The specified xCAT user is not defined in the xCAT POLICY table with the '. + 'correct rule. ', + 'userResp' => 'Correct the xCAT POLICY table entry for the user.', }, 'VVO01' => { 'severity' => 4, diff --git a/perl-xCAT/xCAT/zvmUtils.pm b/perl-xCAT/xCAT/zvmUtils.pm index 55d188613..30ef238ce 100644 --- a/perl-xCAT/xCAT/zvmUtils.pm +++ b/perl-xCAT/xCAT/zvmUtils.pm @@ -4736,8 +4736,8 @@ sub execcmdonVM { } $commandwithparm =~ s/"/\\"/g; - # For not xcat deployed or cloning node, use SSH to make communication. - if (!(defined($userid)) || !(defined($hcp)) || ($status =~ /CLONE_ONLY=1/)){ + # For not xcat deployed node, use SSH to make communication. + if (!(defined($userid)) || !(defined($hcp))){ $cmd = "ssh -o ConnectTimeout=5 $user\@$node \"$commandwithparm\""; $result = `ssh -o ConnectTimeout=5 $user\@$node "$commandwithparm"`; ($rc, $outmsg) = xCAT::zvmUtils->checkSSHOutput( $?, "$cmd" ); diff --git a/xCAT-UI/js/configure/configure.js b/xCAT-UI/js/configure/configure.js index 33cac8c41..f33e5321f 100644 --- a/xCAT-UI/js/configure/configure.js +++ b/xCAT-UI/js/configure/configure.js @@ -65,17 +65,11 @@ function loadConfigPage() { // Add tab to configure xCAT tables tab.add('configTablesTab', 'Tables', loader, false); - // Add the update tab -// tab.add('updateTab', 'Update', '', false); - - // Add the Users tab + // Add the self-service tab tab.add('usersTab', 'Users', '', false); - // Add the discover tab -// tab.add('discoverTab', 'Discover', '', false); - // Add the self-service tab -// tab.add('serviceTab', 'Service', '', false); + tab.add('serviceTab', 'Service', '', false); // Add the files tab tab.add('filesTab', 'Files', '', false); @@ -107,9 +101,6 @@ function loadConfigPage() { loadServicePage(); } else if (ui.index == 3) { loadFilesPage(); -// loadDiscoverPage(); -// } else if (ui.index == 4) { -// loadServicePage(); } }); } diff --git a/xCAT-UI/js/help/help.js b/xCAT-UI/js/help/help.js index 694198e51..95d77b677 100644 --- a/xCAT-UI/js/help/help.js +++ b/xCAT-UI/js/help/help.js @@ -5,6 +5,7 @@ var helpTab; // Help tabs var ivpChoices = new Array; var ivpChoiceValues = new Array; var selectInfo = new Object(); +var xcatVerTabId = ''; /** @@ -57,7 +58,7 @@ function createHelpTab(){ * @return Tab object */ function createVerifyXCATTab() { - var comments = 'Description of the IVP run'; + var comments = 'Name of the IVP run'; var ivpEnabled = 'checked'; var ivpDisabled = ''; @@ -67,20 +68,122 @@ function createVerifyXCATTab() { // Generate new tab ID var instance = 0; - var newTabId = 'verifyXCATTab' + instance; - while ($('#' + newTabId).length) { - // If one already exists, generate another one - instance = instance + 1; - newTabId = 'verifyXCATTab' + instance; - } + xcatVerTabId = 'verifyXCATTab' + instance; // Build the list of IVPs in the table - readIvpTable(); + readIvpTable( 'NEW' ); // Create info bar and status bar - var infoBar = createInfoBar( 'Run or schedule Installation Verification Procedures to verify:
' + - '-xCAT MN/ZHCP Environment, or
' + - '-xCAT MN/ZHCP and OpenStack Environment.' ); + var introBarId = 'verifyXCATIntroBar' + instance; + var introBar = createStatusBar(introBarId); + introBar.find('div').append( + '
' + + 'Run, schedule or remove Installation Verification Procedures.
' + + '

' + + 'The IVP consists of a basic IVP and a full IVP. ' + + 'The basic IVP validates the xCAT and SMAPI environments with tests that include ' + + 'checking for access to the ZHCP agents and verifying disk space. ' + + 'The full IVP validates the OpenStack compute node in addition to the xCAT ' + + 'and SMAPI environments. ' + + '

' + + 'The IVP is composed of multiple components which can take additional parameters '+ + 'depending on the type of IVP. ' + + 'The parameters shown on this panel will vary based on the type of IVP that is chosen. ' + + '

' + + '- The orchestrator, xCAT verifynode command, coordinates the functions of the IVP. ' + + 'For a full IVP, the orchestrator transmits an analysis script known as the ' + + 'preparation script for an OpenStack compute node, invokes it and obtains ' + + 'the output of the script. ' + + '

' + + '- The IVP preparation script analyzes an OpenStack compute node and its OpenStack ' + + 'configuration files as they related to z/VM. ' + + 'The preparation script produces a driver script that is used to ' + + 'continue IVP processing with information gathered during the analysis. ' + + 'The preparations scripts are located in the /opt/xcat/share/xcat/tools/zvm/ ' + + 'directory on the CMA system that is running xCAT. ' + + 'The name of the script begins with \'prep_zxcatIVP_\' and ends with \'.pl\'. ' + + 'The middle part of the name is the human readable identifier of the OpenStack release, ' + + 'eg. prep_zxcatIVP_NEWTON.pl for the OpenStack Newton release. ' + + '

' + + '- The main IVP script, zxcatIVP.pl, handles the analysis of the xCAT environment. ' + + 'When invoked as part of a basic IVP, it verifies the xCAT environment as it relates ' + + 'to the xCAT Management Node, the ZHCP agent, z/VM SMAPI and CP. ' + + 'When invoked as part of a full IVP, it is invoked by the driver script and uses the ' + + 'OpenStack configuration options to verify the environment. This is similar to the tests ' + + 'performed by the basic IVP but the tests relate to the OpenStack compute node, ' + + 'the related z/VM and the ZHCP agent for that z/VM hypervisor ' + + 'instead of running tests for all ZHCP agents and disk pools. ' + + 'A full IVP drives a number of additional tests that are not part of the basic IVP. ' + + '

' + + 'Three buttons at the bottom of the panel drive the tasks:
' + + '\'Run...\' button immediately starts an IVP with the parameters specified on the panel.
' + + '\'Save...\' button schedules an IVP to be run or modifies the settings of an existing scheduled IVP.
' + + '\'Remove...\' button removes the indicated scheduled IVP. ' + + 'Note: xCAT creates default IVPs when it detects that no IVPs are defined. ' + + 'For this reason, you do not want to remove all IVPs unless you want xCAT to recreate the ' + + 'default IVPs the next hour that it checks for IVPs to run.' + + '

' + + 'ID of Run:
' + + 'Begin by selecting the either \'New\' or the Id of an existing run. ' + + 'Information about the run will be ' + + 'be filled in from the details in the xCAT zvmivp table, if it exists.' + + '

' + + 'Type of IVP Run:
' + + 'Select the type of run based on whether a basic IVP of the xCAT MN and all of its ' + + 'ZHCP agents or a full IVP related to OpenStack and the xCAT MN, and the ZHCP related to ' + + 'the compute node. ' + + '

' + + 'Orchestrator Parameters:
' + + 'The most often used orchestrator operand is the --ignore operand to inform ' + + 'verifynode that it should ignore a specific warning. ' + + 'This prevents you from being notified by the IVP about a known condition that you ' + + 'do not consider an error. ' + + '

' + + 'Preparation Script Parameters:
' + + 'The preparation script supports the --ignore operand to ' + + 'ignore the specified messages. ' + + 'Sometimes your environment may have a configuration which you consider valid ' + + 'that would produce a warning message. By using this operand, you instruct ' + + 'the preparation script that the warning should not be considered a problem. ' + + 'This avoids false warnings. ' + + 'For more information on possible preparation script operands, invoke the ' + + 'script that is for your level of OpenStack with the --help operand. '+ + '

' + + 'If you are running CMA as an OpenStack controller then no additional parameters ' + + 'required to verify the controller\'s environment. If wish to verify an OpenStack ' + + 'compute node on another system then some additional parameters will be required. ' + + '

' + + 'OpenStack System IP Address:
' + + 'You need to provide the IP address of the compute node that you would like to test. ' + + '

' + + 'OpenStack User:
' + + 'The user name that is allowed to access the OpenStack configuration files. ' + + 'The IVP uses that information to send the preparation script and run it on the ' + + 'compute node. ' + + '

' + + 'Main IVP Script Parameters:
' + + 'As with the orchestrator and preparation script, a field exists to provide ' + + 'tailoring to the main IVP script. ' + + 'The most commonly used operand is the --ignore operand to ' + + 'ignore the listed messages. ' + + 'For more information on possible main IVP script operands, invoke the ' + + 'script as follows:
/opt/xcat/bin/zxcatIVP.pl --help '+ + '

' + + 'Scheduling related parameters:
' + + 'If you are going to schedule an IVP run then some additional operands are of interest ' + + 'to you.' + + '

' + + 'Schedule:
' + + 'The schedule operand indicates when the IVP should be run. ' + + 'You can select it to be run every hour of the day or specify the hours. ' + + '

' + + 'Name:
' + + 'The name operand allows you to associate a descriptive name with the run. ' + + 'This allows you to easily recognize a specific run in the \'ID or Run\' field. ' + + '

' + + 'Disable:
' + + 'The disable checkbox allows you to temporarily disable an IVP from running. ' + ); var statBarId = 'verifyXCATStatusBar' + instance; var statBar = createStatusBar(statBarId).hide(); @@ -89,69 +192,96 @@ function createVerifyXCATTab() { // Create the verify form and put info and status bars on the form. var verifyXCATForm = $( '

' ); - verifyXCATForm.append( infoBar, statBar ); + verifyXCATForm.append( introBar, statBar ); // Create 'Create a Verify xCAT' fieldset fs = $( '
' ); fs.append( $( 'Verify:' )); fs.append( $( '
' - + '' + '' + '
' )); - fs.append( $('
Type of IVP Run:
')); - fs.append( $('
Basic IVP: xCAT MN/ZHCP Verification
' )); - fs.append( $('
Full IVP: xCAT MN/ZHCP and OpenStack Verification
' )); - fs.append( $('
Basic and Full IVP Parameters:
')); - fs.append( $('
' )); - fs.append( $('
' )); - fs.append( $('
Full IVP Parameters:
')); - fs.append( $('
' )); - fs.append( $('
' )); - fs.append( $('
' )); - fs.append( $('
Automated IVP Parameters:
')); - fs.append( $('
' )); - fs.append( '
'+ + fs.append( $('
' + + 'Type of IVP Run:
' + + 'Basic IVP: xCAT MN/ZHCP Verification
' + + 'Full IVP: xCAT MN/ZHCP and OpenStack Verification' + + '
' )); + fs.append( $('
' + + 'Run Parameters:
' + + '
' + + '' + + '
' )); + divFullParms = xcatVerTabId + "_divFullParms"; + fs.append( $('
' + + '
' + + '
' + + '' + + '
' )); + fs.append( $('
' + + 'Automation Parameters:
' + + ''+ ''+ ''+ - ''+ + ''+ ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ + '' + + + ''+ + ''+ + ''+ + ''+ + ''+ ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ + '' + + + ''+ + ''+ + ''+ + ''+ + ''+ ''+ - ''+ - ''+ - ''+ - ''+ - ''+ - ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ ''+ - '
ScheduleEvery hourEvery hour
Midnight1 am2 am3 am4 am5 amMidnight1 am2 am3 am4 am5 am
6 am7 am8 am9 am10 am11 am6 am7 am8 am9 am10 am11 am
Noon1 pm2 pm3 pm4 pm5 pmNoon1 pm2 pm3 pm4 pm5 pm
6 pm7 pm8 pm9 pm10 pm11 pm6 pm7 pm8 pm9 pm10 pm11 pm
'+ - '
'); - fs.append( $('
Disable or Enable the IVP Run:
')); - fs.append( $('
Enabled to be run periodically
' )); - fs.append( $('
Disabled from running periodically
' )); + '' + + '

' + + '
' + + 'Disable this run' + + + '

')); verifyXCATForm.append( fs ); + verifyXCATForm.find('#' + divFullParms).hide(); - var verifyBtn = createButton( 'Run an IVP Now' ); + //************************************************************************ + // Function: Show appropriate division based on the runType. + //************************************************************************ + verifyXCATForm.change(function(){ + var runType = $(this).parent().find('input[name="runType"]:checked').val(); + if ( runType == 'verifyBasic' ) { + verifyXCATForm.find('#' + divFullParms).hide(); + } else if ( runType == 'verifyOpenStack' ) { + verifyXCATForm.find('#' + divFullParms).show(); + } else { + verifyXCATForm.find('#' + divFullParms).hide(); + } + }); + + //************************************************************************ + // Function: Run immediately button. + //************************************************************************ + var verifyBtn = createButton( 'Run this IVP Now' ); verifyBtn.click(function() { var driveFunction = 1; var argList = ''; @@ -219,7 +349,10 @@ function createVerifyXCATTab() { }); verifyXCATForm.append( verifyBtn ); - var scheduleBtn = createButton( 'Schedule an IVP Run' ); + //************************************************************************ + // Function: Save an IVP button. + //************************************************************************ + var scheduleBtn = createButton( 'Save this IVP Run' ); scheduleBtn.click(function() { var driveFunction = 1; var argList = ''; @@ -264,8 +397,12 @@ function createVerifyXCATTab() { warn.prependTo($(this).parents('.ui-tabs-panel')); driveFunction = 0; } - var checkboxes = $(this).parent().find('input[name="ivpSchedule"]:checked'); var ivpSchedule = ""; + var checkboxes = $(this).parent().find('input[name="ivpSchedule"]:checked'); + var everyHourChecked = $(this).parent().find('input[name="ivpSchedule"][value=24]').is(':checked') + if ( everyHourChecked ) { + ivpSchedule = '0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23'; + } else { for ( var i=0, n=checkboxes.length; i \&web_cecsetup, 'deletefile' => \&web_deletefile, 'createfolder' => \&web_createfolder, - 'getrepospace' => \&web_getrepospace + 'getrepospace' => \&web_getrepospace, + 'verifynode' => \&web_verifynode, ); # Check whether the request is authorized or not @@ -1982,8 +1983,8 @@ sub web_summary { while (my ($key, $value) = each(%{$attrs})) { web_attrcount($value->[0]->{'os'}, \%oshash); web_attrcount($value->[0]->{'arch'}, \%archhash); - web_attrcount($value->[0]->{'provmethod'}, \%provhash); - web_attrcount($value->[0]->{'nodetype'}, \%typehash); + web_attrcount($value->[0]->{'provmethod'},, \%provhash); + web_attrcount($value->[0]->{'nodetype'},, \%typehash); } $attrs = $nodelistTab->getNodesAttribs(\@nodes, ['status']); @@ -2716,4 +2717,27 @@ sub web_getrepospace() { $callback->({ info => $space }); } +sub web_verifynode() { + my ( $request, $callback, $sub_req ) = @_; + my $cmdOpts = ''; + my $out; + + # Loop to handle all options passed. We don't know how many they will pass + # so we look for 'end' to signify the end. We set a loop variable to 500 which + # we know is much larger than the expected number of arguments. This prevents + # the loop from going on forever should there be an error on the javascript side + # an the 'end' was not passed. + for ( my $i = 0 ; $i < 500 ; $i++ ) { + if ( $request->{arg}->[$i] ne 'end' ) { + $cmdOpts = "$cmdOpts $request->{arg}->[$i]"; + } else { + last; + } + } + + $out = `/opt/xcat/bin/verifynode $cmdOpts`; + + $callback->( { info => $out }); +} + 1; diff --git a/xCAT-client/bin/verifynode b/xCAT-client/bin/verifynode index 9d878e978..a769edb33 100644 --- a/xCAT-client/bin/verifynode +++ b/xCAT-client/bin/verifynode @@ -70,7 +70,8 @@ my $notify = 0; # Notify a user my $notifyOnErrorOrWarning = 0; # Indicates a log file should be sent if the need to notify # a user was determined. my $openstackIP = ''; # IP address of the OpenStack node -my $openstackUser = 'nova'; # OpenStack for Nova +my $openstackUser = 'root'; # User on the OpenStack system that can access the + # OpenStack configuration files my $orchParms = ''; # Orchestrator parms to be stored in the zvmivp table my $prepParms = ''; # Parameters to pass to the preparation script my $remove = 0; # Remove a scheduled IVP @@ -240,7 +241,7 @@ my $usage_string = "Usage:\n IP address of the OpenStack compute node. --openstackuser User to use to access the compute node. - The user defaults to 'nova'. + The user defaults to 'root'. --orchparms Parameters to be stored in the zvmivp table. These parameters are passed to this routine when a diff --git a/xCAT-server/lib/xcat/plugins/zvm.pm b/xCAT-server/lib/xcat/plugins/zvm.pm index 9c327eb1c..1743f69bd 100644 --- a/xCAT-server/lib/xcat/plugins/zvm.pm +++ b/xCAT-server/lib/xcat/plugins/zvm.pm @@ -3411,14 +3411,6 @@ sub powerVM { $generalArgs{'verbose'} = 0; my $nodes = [$node]; xCAT::zvmUtils->handlePowerUp( $callback, $nodes, \%generalArgs ); - my $oldstatus = $status; - $status =~ s/IUCV=1/SSH=1/g; - if (!($status =~ /SSH=1/)){ - $status = "$status;SSH=1"; - } - if ($status != $oldstatus){ - xCAT::zvmUtils->setNodeProp( 'zvm', $node, 'status', $status ); - } } # Check vm's status xCAT::zvmUtils->printSyslog("check $node isreachable"); diff --git a/xCAT-server/lib/xcat/plugins/zvmdiscovery.pm b/xCAT-server/lib/xcat/plugins/zvmdiscovery.pm index 7f327d3fb..b6bc8debe 100644 --- a/xCAT-server/lib/xcat/plugins/zvmdiscovery.pm +++ b/xCAT-server/lib/xcat/plugins/zvmdiscovery.pm @@ -1943,8 +1943,9 @@ sub startDiscovery{ 'ftpserve', 'gcs', 'gskadmin', 'ibmuser', 'imap', 'imapauth', 'ldapsrv', 'lohcost', - 'maint', 'maint630', 'migmaint', 'monwrite', 'mproute', - 'operator', 'operatns', 'opersymp', 'osadmin1', 'osadmin2', + 'maint', 'maint630', 'maint640', + 'migmaint', 'monwrite', 'mproute', + 'operator', 'operatns', 'opersymp', 'opncloud', 'osadmin1', 'osadmin2', 'osadmin3', 'osamaint', 'osasf', 'ovfdev62', 'perfsvm', 'persmapi', 'pmaint', 'portmap', 'racfsmf', 'racfvm', 'racmaint', 'rexecd', @@ -1956,7 +1957,8 @@ sub startDiscovery{ 'vmnfs', 'vmrmadmn', 'vmrmsvm', 'vmservp', 'vmservr', 'vmservu', 'vmservs', 'vsmevsrv', 'vsmguard', 'vsmproxy', 'vsmreqim', 'vsmreqin', 'vsmreqiu', - 'vsmreqi6', 'vsmwork1', 'vsmwork2', 'vsmwork3', + 'vsmreqi6', 'vsmwork1', 'vsmwork2', 'vsmwork3', 'vsmwork4', + 'vsmwork5', 'vsmwork6', 'vsmwork7', 'vsmwork8', 'vsmwork9', 'xcat', 'xcatserv', 'xchange', 'zhcp', 'zvmlxapp', 'zvmmaplx', '4osasf40', '5684042j', '6vmdir30', '6vmhcd20', '6vmlen20', @@ -2044,7 +2046,7 @@ sub startDiscovery{ } } - my $numSystems = length( %discoverable ); + my $numSystems = scalar( keys %discoverable ); xCAT::MsgUtils->message( "S", "Discovery for $zvmHost found $numSystems virtual machines." ); # Perform a set of potentially long running functions. We do this one diff --git a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_JUNO.pl b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_JUNO.pl index 8bd735be0..f51e1327f 100644 --- a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_JUNO.pl +++ b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_JUNO.pl @@ -159,10 +159,10 @@ sub buildDriverProgram{ } # Open the driver program for output. - $rc = open( my $fileHandle, '>', $driver ) or die; - if ( $rc != 1 ) { + $rc = open( my $fileHandle, '>', $driver ); + if ( ! defined $rc or $rc ne '1' ) { print "Unable to open $driver for output: $!\n"; - return ( 200 + $rc ); + return 200; } # Construct the file in an array. @@ -441,6 +441,17 @@ sub hashFile{ # Read the configuration file and construct the hash of values. if (( $file =~ /.conf$/ ) or ( $file =~ /.ini$/ )) { $out = `egrep -v '(^#|^\\s*\\t*#)' $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 603; + } my @lines = split( "\n", $out ); foreach my $line ( @lines ) { if ( $line =~ /^\[/ ) { @@ -477,12 +488,24 @@ sub hashFile{ } else { # Hash .COPY files # Read the file and remove comment lines and sequence columns (72-80) - $out = `grep -v ^\$ $file| cut -c1-71`; + $out = `grep -v ^\$ $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 604; + } $out =~ s{/\*.*?\*/}{}gs; my @lines = split( "\n", $out ); foreach my $line ( @lines ) { - # Weed out blank lines + # Remove sequence numbers and weed out blank lines + $line = substr( $line, 0, 71 ); $line =~ s/^\s+|\s+$//g; # trim both ends of the string next if ( length( $line ) == 0 ); @@ -1335,8 +1358,10 @@ if ( -e $locVersionFileCMO ) { my %settings; if ( -e $locApplSystemRole ) { $rc = hashFile( $locApplSystemRole, \%settings, 0 ); + if ( exists $settings{'role'} ) { $cmaSystemRole = uc( $settings{'role'} ); } + } if ( $cmaSystemRole eq '' and -e $locDMSSICMOCopy ) { $rc = hashFile( $locDMSSICMOCopy, \%settings, 0 ); if ( exists $settings{'openstack_system_role'} ) { diff --git a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_KILO.pl b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_KILO.pl index 217c504ba..17f16a7d5 100644 --- a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_KILO.pl +++ b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_KILO.pl @@ -159,10 +159,10 @@ sub buildDriverProgram{ } # Open the driver program for output. - $rc = open( my $fileHandle, '>', $driver ) or die; - if ( $rc != 1 ) { + $rc = open( my $fileHandle, '>', $driver ); + if ( ! defined $rc or $rc ne '1' ) { print "Unable to open $driver for output: $!\n"; - return ( 200 + $rc ); + return 200; } # Construct the file in an array. @@ -441,6 +441,17 @@ sub hashFile{ # Read the configuration file and construct the hash of values. if (( $file =~ /.conf$/ ) or ( $file =~ /.ini$/ )) { $out = `egrep -v '(^#|^\\s*\\t*#)' $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 603; + } my @lines = split( "\n", $out ); foreach my $line ( @lines ) { if ( $line =~ /^\[/ ) { @@ -477,12 +488,24 @@ sub hashFile{ } else { # Hash .COPY files # Read the file and remove comment lines and sequence columns (72-80) - $out = `grep -v ^\$ $file| cut -c1-71`; + $out = `grep -v ^\$ $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 604; + } $out =~ s{/\*.*?\*/}{}gs; my @lines = split( "\n", $out ); foreach my $line ( @lines ) { - # Weed out blank lines + # Remove sequence numbers and weed out blank lines + $line = substr( $line, 0, 71 ); $line =~ s/^\s+|\s+$//g; # trim both ends of the string next if ( length( $line ) == 0 ); @@ -1336,8 +1359,10 @@ if ( -e $locVersionFileCMO ) { my %settings; if ( -e $locApplSystemRole ) { $rc = hashFile( $locApplSystemRole, \%settings, 0 ); + if ( exists $settings{'role'} ) { $cmaSystemRole = uc( $settings{'role'} ); } + } if ( $cmaSystemRole eq '' and -e $locDMSSICMOCopy ) { $rc = hashFile( $locDMSSICMOCopy, \%settings, 0 ); if ( exists $settings{'openstack_system_role'} ) { diff --git a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_LIBERTY.pl b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_LIBERTY.pl index fca98d2da..ee269271f 100644 --- a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_LIBERTY.pl +++ b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_LIBERTY.pl @@ -170,10 +170,10 @@ sub buildDriverProgram{ } # Open the driver program for output. - $rc = open( my $fileHandle, '>', $driver ) or die; - if ( $rc != 1 ) { + $rc = open( my $fileHandle, '>', $driver ); + if ( ! defined $rc or $rc ne '1' ) { print "Unable to open $driver for output: $!\n"; - return ( 200 + $rc ); + return 200; } # Construct the file in an array. @@ -462,6 +462,17 @@ sub hashFile{ # Read the configuration file and construct the hash of values. if (( $file =~ /.conf$/ ) or ( $file =~ /.ini$/ ) or ( $file =~ /.service$/ )) { $out = `egrep -v '(^#|^\\s*\\t*#)' $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 603; + } my @lines = split( "\n", $out ); foreach my $line ( @lines ) { if ( $line =~ /^\[/ ) { @@ -497,13 +508,25 @@ sub hashFile{ } } else { # Hash .COPY files - # Read the file and remove comment lines and sequence columns (72-80) - $out = `grep -v ^\$ $file| cut -c1-71`; + # Read the file and remove comment lines + $out = `grep -v ^\$ $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + print "Warning: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } else { + print "Info: $file cannot be read.\n". + " Verification continues but without properties from the indicated file.\n"; + } + return 604; + } $out =~ s{/\*.*?\*/}{}gs; my @lines = split( "\n", $out ); foreach my $line ( @lines ) { - # Weed out blank lines + # Remove sequence numbers and weed out blank lines + $line = substr( $line, 0, 71 ); $line =~ s/^\s+|\s+$//g; # trim both ends of the string next if ( length( $line ) == 0 ); @@ -1496,8 +1519,10 @@ if ( -e $locVersionFileCMO ) { my %settings; if ( -e $locApplSystemRole ) { $rc = hashFile( $locApplSystemRole, \%settings, 0 ); + if ( exists $settings{'role'} ) { $cmaSystemRole = uc( $settings{'role'} ); } + } if ( $cmaSystemRole eq '' and -e $locDMSSICMOCopy ) { $rc = hashFile( $locDMSSICMOCopy, \%settings, 0 ); if ( exists $settings{'openstack_system_role'} ) { diff --git a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_NEWTON.pl b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_NEWTON.pl index 6cc3b3270..46bb8ff98 100644 --- a/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_NEWTON.pl +++ b/xCAT-server/share/xcat/tools/zvm/prep_zxcatIVP_NEWTON.pl @@ -209,6 +209,44 @@ my %respMsgs = ( 'exists under a different name then you may need to modify the invocation '. 'parameters for this script and rerun it.', }, + 'FILE05' => + { 'severity' => 2, + 'recAction' => 0, + 'text' => '%s cannot be read.', + 'explain' => 'The indicated file is an OpenStack configuration file which was '. + 'attempted to be scanned to obtain configuration properties. '. + 'This file cannot be read.', + 'sysAct' => 'Verification continues but without properties from the indicated file.', + 'userResp' => 'Determine why the file cannot be read. If the file is not needed then you can '. + 'ignore this message. Otherwise, you should correct the issue.'. + "\n". + 'If this script is being run remotely by the xCAT IVP rather than '. + 'by your invocation of the script, you may need to specify a '. + 'different OpenStack user to the orchestrator script (verifynode). '. + 'This will require that you have set up the certificates on the '. + 'compute node to allow the xCAT MN to access the system during the IVP. '. + 'You can find information on setting up SSH keys in the Enabling z/VM for OpenStack '. + 'manual in the OpenStack Configuration chapter.', + }, + 'FILE06' => + { 'severity' => 4, + 'recAction' => 0, + 'text' => '%s cannot be read.', + 'explain' => 'The indicated file is an OpenStack configuration file which was '. + 'attempted to be scanned to obtain configuration properties. '. + 'This file cannot be read.', + 'sysAct' => 'Verification continues but without properties from the indicated file.', + 'userResp' => 'Determine why the file cannot be read. If the file is not needed then you can '. + 'ignore this message. Otherwise, you should correct the issue.'. + "\n". + 'If this script is being run remotely by the xCAT IVP rather than '. + 'by your invocation of the script, you may need to specify a '. + 'different OpenStack user to the orchestrator script (verifynode). '. + 'This will require that you have set up the certificates on the '. + 'compute node to allow the xCAT MN to access the system during the IVP. '. + 'You can find information on setting up SSH keys in the Enabling z/VM for OpenStack '. + 'manual in the OpenStack Configuration chapter.', + }, 'MISS01' => { 'severity' => 4, 'recAction' => 0, @@ -600,10 +638,10 @@ sub buildDriverProgram{ } # Open the driver program for output. - $rc = open( my $fileHandle, '>', $driver ) or die; - if ( $rc != 1 ) { + $rc = open( my $fileHandle, '>', $driver ); + if ( ! defined $rc or $rc ne '1' ) { logResponse( 'DRIV02', $driver, $! ); - return ( 200 + $rc ); + return 200; } # Construct the file in an array. @@ -1035,6 +1073,15 @@ sub hashFile{ # Read the configuration file and construct the hash of values. if (( $file =~ /.conf$/ ) or ( $file =~ /.ini$/ ) or ( $file =~ /.service$/ )) { $out = `egrep -v '(^#|^\\s*\\t*#)' $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + logResponse( 'FILE06', $file ); + } else { + logResponse( 'FILE05', $file ); + } + return 603; + } my @lines = split( "\n", $out ); foreach my $line ( @lines ) { if ( $line =~ /^\[/ ) { @@ -1071,12 +1118,22 @@ sub hashFile{ } else { # Hash .COPY files # Read the file and remove comment lines and sequence columns (72-80) - $out = `grep -v ^\$ $file| cut -c1-71`; + $out = `grep -v ^\$ $file`; + my $rc = $?; + if ( $rc != 0 ) { + if ( $required ) { + logResponse( 'FILE06', $file ); + } else { + logResponse( 'FILE05', $file ); + } + return 604; + } $out =~ s{/\*.*?\*/}{}gs; my @lines = split( "\n", $out ); foreach my $line ( @lines ) { - # Weed out blank lines + # Remove sequence numbers and weed out blank lines + $line = substr( $line, 0, 71 ); $line =~ s/^\s+|\s+$//g; # trim both ends of the string next if ( length( $line ) == 0 ); @@ -2131,8 +2188,10 @@ if ( -e $locVersionFileCMO ) { my %settings; if ( -e $locApplSystemRole ) { $rc = hashFile( $locApplSystemRole, \%settings, 0 ); + if ( exists $settings{'role'} ) { $cmaSystemRole = uc( $settings{'role'} ); } + } if ( $cmaSystemRole eq '' and -e $locDMSSICMOCopy ) { $rc = hashFile( $locDMSSICMOCopy, \%settings, 0 ); if ( exists $settings{'openstack_system_role'} ) {