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( 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'} ) {