From 5dd725e2fcd7b2f82d00237bb025290d6ed6957c Mon Sep 17 00:00:00 2001 From: bybai Date: Thu, 26 Oct 2017 06:12:26 -0400 Subject: [PATCH] enhance chdef pre-check attribute --- perl-xCAT/xCAT/DBobjUtils.pm | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/perl-xCAT/xCAT/DBobjUtils.pm b/perl-xCAT/xCAT/DBobjUtils.pm index 880160f42..0d6697955 100755 --- a/perl-xCAT/xCAT/DBobjUtils.pm +++ b/perl-xCAT/xCAT/DBobjUtils.pm @@ -902,6 +902,19 @@ sub setobjdefs } my @attrprovided = (); + #get group objects data + my %DBgroupsattr; + my %tmpghash; + my @tmplgrplist; + my %grpvalidattr; + if (defined($objhash{$objname}{'groups'})){ + + @tmplgrplist = split(",", $objhash{$objname}{'groups'}); + foreach my $tmpgrp (@tmplgrplist) { + $tmpghash{$tmpgrp} = "group"; + } + %DBgroupsattr=xCAT::DBobjUtils->getobjdefs(\%tmpghash); + } # check FINALATTRS to see if all the attrs are valid foreach my $attr (keys %{ $objhash{$objname} }) { @@ -992,7 +1005,6 @@ sub setobjdefs } } } - xCAT::MsgUtils->message("I", $rsp, $::callback); $checkedattrs{$attr_name} = 1; if ($invalidattr->{$attr_name}->{valid} != 1) { $invalidattr->{$attr_name}->{valid} = 0; @@ -1147,10 +1159,26 @@ sub setobjdefs my $rsp; foreach my $att (keys %$invalidattr) { + my $pickvalidattr=0; if ($invalidattr->{$att}->{valid} != 1) { my $tt = $invalidattr->{$att}->{valid}; - push @{ $rsp->{data} }, "Cannot set the attr=\'$att\' attribute unless $invalidattr->{$att}->{condition}."; - xCAT::MsgUtils->message("E", $rsp, $::callback); + #if attribute is set invalid, check if its pre-check attribute exists in group objects, pick the attribute into valid. + # ex. if I want to set hdwctrlpoint I will have + # to match the right value for mgtmethod, but mgtmethod does exist in node object in chdef command + # if mgtmethod exists in group objects, set hdwctrlpoint valid + my $conditionkv=$invalidattr->{$att}->{condition}; + $conditionkv=~s/(^'|'$)//g; + my ($attk, $attv)=split("=", $conditionkv); + foreach my $tmpgrp (@tmplgrplist) { + if ($DBgroupsattr{$tmpgrp}{$attk} eq $attv) { + $pickvalidattr=1; + last; + } + } + if ($pickvalidattr != 1) { + push @{ $rsp->{data} }, "Cannot set the attr=\'$att\' attribute unless $invalidattr->{$att}->{condition}."; + xCAT::MsgUtils->message("E", $rsp, $::callback); + } } }