mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-05-21 11:12:04 +00:00
modify depending on discussion and comments
This commit is contained in:
parent
fae4c21d8f
commit
a8eab805fd
@ -32,6 +32,10 @@ POWER_RESET_TYPE = {
|
||||
'on' : 'ForceOn',
|
||||
}
|
||||
|
||||
manager_reset_string = '#Manager.Reset'
|
||||
system_reset_string = '#ComputerSystem.Reset'
|
||||
reset_type_string = 'ResetType@Redfish.AllowableValues'
|
||||
|
||||
class RedfishRest(object):
|
||||
|
||||
headers = {'Content-Type': 'application/json'}
|
||||
@ -185,8 +189,8 @@ class RedfishRest(object):
|
||||
target_url = members[0]['@odata.id']
|
||||
data = self.request('GET', target_url, cmd='get_bmc_actions')
|
||||
try:
|
||||
actions = data['Actions']['#Manager.Reset']['ResetType@Redfish.AllowableValues']
|
||||
target_url = data['Actions']['#Manager.Reset']['target']
|
||||
actions = data['Actions'][manager_reset_string][reset_type_string]
|
||||
target_url = data['Actions'][manager_reset_string]['target']
|
||||
except KeyError as e:
|
||||
raise SelfServerException('Get KeyError %s' % e.message)
|
||||
|
||||
@ -196,7 +200,7 @@ class RedfishRest(object):
|
||||
|
||||
target_url, actions = self._get_bmc_actions()
|
||||
if BMC_RESET_TYPE not in actions:
|
||||
raise SelfClientException('Unsupport option: %s' % BMC_RESET_TYPE)
|
||||
raise SelfClientException('Unsupported option: %s' % BMC_RESET_TYPE)
|
||||
|
||||
data = { "ResetType": BMC_RESET_TYPE }
|
||||
return self.request('POST', target_url, payload=data, cmd='set_bmc_state')
|
||||
@ -207,8 +211,8 @@ class RedfishRest(object):
|
||||
target_url = members[0]['@odata.id']
|
||||
data = self.request('GET', target_url, cmd='get_power_actions')
|
||||
try:
|
||||
actions = data['Actions']['#ComputerSystem.Reset']['ResetType@Redfish.AllowableValues']
|
||||
target_url = data['Actions']['#ComputerSystem.Reset']['target']
|
||||
actions = data['Actions'][system_reset_string][reset_type_string]
|
||||
target_url = data['Actions'][system_reset_string]['target']
|
||||
except KeyError as e:
|
||||
raise SelfServerException('Get KeyError %s' % e.message)
|
||||
|
||||
@ -218,7 +222,7 @@ class RedfishRest(object):
|
||||
|
||||
target_url, actions = self._get_power_actions()
|
||||
if POWER_RESET_TYPE[state] not in actions:
|
||||
raise SelfClientException('Unsupport option: %s' % state)
|
||||
raise SelfClientException('Unsupported option: %s' % state)
|
||||
|
||||
data = { "ResetType": POWER_RESET_TYPE[state] }
|
||||
return self.request('POST', target_url, payload=data, cmd='set_power_state')
|
||||
|
@ -14,13 +14,13 @@ from docopt import docopt,DocoptExit
|
||||
|
||||
from common import utils
|
||||
from common import exceptions as xcat_exception
|
||||
from hwctl.executor.openbmc_beacon import OpenBMCBeaconTask
|
||||
from hwctl.executor.openbmc_setboot import OpenBMCBootTask
|
||||
from hwctl.executor.openbmc_flash import OpenBMCFlashTask
|
||||
from hwctl.executor.openbmc_inventory import OpenBMCInventoryTask
|
||||
from hwctl.executor.openbmc_power import OpenBMCPowerTask
|
||||
from hwctl.executor.openbmc_sensor import OpenBMCSensorTask
|
||||
from hwctl.executor.openbmc_eventlog import OpenBMCEventlogTask
|
||||
from hwctl.openbmc.openbmc_beacon import OpenBMCBeaconTask
|
||||
from hwctl.openbmc.openbmc_setboot import OpenBMCBootTask
|
||||
from hwctl.openbmc.openbmc_flash import OpenBMCFlashTask
|
||||
from hwctl.openbmc.openbmc_inventory import OpenBMCInventoryTask
|
||||
from hwctl.openbmc.openbmc_power import OpenBMCPowerTask
|
||||
from hwctl.openbmc.openbmc_sensor import OpenBMCSensorTask
|
||||
from hwctl.openbmc.openbmc_eventlog import OpenBMCEventlogTask
|
||||
from hwctl.beacon import DefaultBeaconManager
|
||||
from hwctl.setboot import DefaultBootManager
|
||||
from hwctl.flash import DefaultFlashManager
|
||||
|
@ -13,9 +13,8 @@ from docopt import docopt,DocoptExit
|
||||
|
||||
from common import utils
|
||||
from common import exceptions as xcat_exception
|
||||
from hwctl.executor.redfish_power import RedfishPowerTask
|
||||
from hwctl.redfish.redfish_power import RedfishPowerTask
|
||||
from hwctl.power import DefaultPowerManager
|
||||
from hwctl.setboot import DefaultBootManager
|
||||
|
||||
from xcatagent import base
|
||||
import logging
|
||||
|
@ -33,6 +33,77 @@ my %module_type = (
|
||||
"redfish" => "Redfish",
|
||||
);
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
=head3 parse_node_info
|
||||
|
||||
Parse the node information: bmc, bmcip, username, password
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------
|
||||
sub parse_node_info {
|
||||
my $noderange = shift;
|
||||
my $module = shift;
|
||||
my $node_info_ref = shift;
|
||||
my $callback = shift;
|
||||
my $rst = 0;
|
||||
|
||||
my $passwd_table = xCAT::Table->new('passwd');
|
||||
my $passwd_hash = $passwd_table->getAttribs({ 'key' => $module }, qw(username password));
|
||||
|
||||
my $openbmc_table = xCAT::Table->new('openbmc');
|
||||
my $openbmc_hash = $openbmc_table->getNodesAttribs(\@$noderange, ['bmc', 'username', 'password']);
|
||||
|
||||
foreach my $node (@$noderange) {
|
||||
if (defined($openbmc_hash->{$node}->[0])) {
|
||||
if ($openbmc_hash->{$node}->[0]->{'bmc'}) {
|
||||
$node_info_ref->{$node}->{bmc} = $openbmc_hash->{$node}->[0]->{'bmc'};
|
||||
$node_info_ref->{$node}->{bmcip} = xCAT::NetworkUtils::getNodeIPaddress($openbmc_hash->{$node}->[0]->{'bmc'});
|
||||
}
|
||||
unless($node_info_ref->{$node}->{bmc}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute bmc", $callback, $node);
|
||||
delete $node_info_ref->{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
unless($node_info_ref->{$node}->{bmcip}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to resolve ip address for bmc: $node_info_ref->{$node}->{bmc}", $callback, $node);
|
||||
delete $node_info_ref->{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
if ($openbmc_hash->{$node}->[0]->{'username'}) {
|
||||
$node_info_ref->{$node}->{username} = $openbmc_hash->{$node}->[0]->{'username'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{username}) {
|
||||
$node_info_ref->{$node}->{username} = $passwd_hash->{username};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute username", $callback, $node);
|
||||
delete $node_info_ref->{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($openbmc_hash->{$node}->[0]->{'password'}) {
|
||||
$node_info_ref->{$node}->{password} = $openbmc_hash->{$node}->[0]->{'password'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{password}) {
|
||||
$node_info_ref->{$node}->{password} = $passwd_hash->{password};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute password", $callback, $node);
|
||||
delete $node_info_ref->{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get information from openbmc table", $callback, $node);
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
return $rst;
|
||||
}
|
||||
|
||||
sub acquire_lock {
|
||||
my $ppid = shift;
|
||||
$ppid = shift if (($ppid) && ($ppid =~ /AGENT/));
|
||||
|
@ -141,7 +141,7 @@ sub process_request {
|
||||
}
|
||||
|
||||
my $noderange = $request->{node};
|
||||
my $check = parse_node_info($noderange);
|
||||
my $check = xCAT::AGENT::parse_node_info($noderange, "openbmc", \%node_info, $callback);
|
||||
if (&refactor_args($request)) {
|
||||
xCAT::MsgUtils->message("E", { data => ["Failed to refactor arguments"] }, $callback);
|
||||
return;
|
||||
@ -418,74 +418,6 @@ sub parse_args {
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
=head3 parse_node_info
|
||||
|
||||
Parse the node information: bmc, bmcip, username, password
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------
|
||||
sub parse_node_info {
|
||||
my $noderange = shift;
|
||||
my $rst = 0;
|
||||
|
||||
my $passwd_table = xCAT::Table->new('passwd');
|
||||
my $passwd_hash = $passwd_table->getAttribs({ 'key' => 'openbmc' }, qw(username password));
|
||||
|
||||
my $openbmc_table = xCAT::Table->new('openbmc');
|
||||
my $openbmc_hash = $openbmc_table->getNodesAttribs(\@$noderange, ['bmc', 'username', 'password']);
|
||||
|
||||
foreach my $node (@$noderange) {
|
||||
if (defined($openbmc_hash->{$node}->[0])) {
|
||||
if ($openbmc_hash->{$node}->[0]->{'bmc'}) {
|
||||
$node_info{$node}{bmc} = $openbmc_hash->{$node}->[0]->{'bmc'};
|
||||
$node_info{$node}{bmcip} = xCAT::NetworkUtils::getNodeIPaddress($openbmc_hash->{$node}->[0]->{'bmc'});
|
||||
}
|
||||
unless($node_info{$node}{bmc}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute bmc", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
unless($node_info{$node}{bmcip}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to resolve ip address for bmc: $node_info{$node}{bmc}", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
if ($openbmc_hash->{$node}->[0]->{'username'}) {
|
||||
$node_info{$node}{username} = $openbmc_hash->{$node}->[0]->{'username'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{username}) {
|
||||
$node_info{$node}{username} = $passwd_hash->{username};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute username", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($openbmc_hash->{$node}->[0]->{'password'}) {
|
||||
$node_info{$node}{password} = $openbmc_hash->{$node}->[0]->{'password'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{password}) {
|
||||
$node_info{$node}{password} = $passwd_hash->{password};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute password", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get information from openbmc table", $callback, $node);
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
return $rst;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
=head3 refactor_args
|
||||
|
||||
refractor args to be easily dealt by python client
|
||||
|
@ -117,7 +117,7 @@ sub process_request {
|
||||
}
|
||||
|
||||
my $noderange = $request->{node};
|
||||
my $check = parse_node_info($noderange);
|
||||
my $check = xCAT::AGENT::parse_node_info($noderange, "redfish", \%node_info, $callback);
|
||||
$callback->({ errorcode => [$check] }) if ($check);
|
||||
return unless(%node_info);
|
||||
|
||||
@ -170,73 +170,4 @@ sub parse_args {
|
||||
}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
=head3 parse_node_info
|
||||
|
||||
Parse the node information: bmc, bmcip, username, password
|
||||
|
||||
=cut
|
||||
|
||||
#-------------------------------------------------------
|
||||
|
||||
sub parse_node_info {
|
||||
my $noderange = shift;
|
||||
my $rst = 0;
|
||||
|
||||
my $passwd_table = xCAT::Table->new('passwd');
|
||||
my $passwd_hash = $passwd_table->getAttribs({ 'key' => 'redfish' }, qw(username password));
|
||||
|
||||
my $my_table = xCAT::Table->new('openbmc');
|
||||
my $my_hash = $my_table->getNodesAttribs(\@$noderange, ['bmc', 'username', 'password']);
|
||||
|
||||
foreach my $node (@$noderange) {
|
||||
if (defined($my_hash->{$node}->[0])) {
|
||||
if ($my_hash->{$node}->[0]->{'bmc'}) {
|
||||
$node_info{$node}{bmc} = $my_hash->{$node}->[0]->{'bmc'};
|
||||
$node_info{$node}{bmcip} = xCAT::NetworkUtils::getNodeIPaddress($my_hash->{$node}->[0]->{'bmc'});
|
||||
}
|
||||
unless($node_info{$node}{bmc}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute bmc", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
unless($node_info{$node}{bmcip}) {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to resolve ip address for bmc: $node_info{$node}{bmc}", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
if ($my_hash->{$node}->[0]->{'username'}) {
|
||||
$node_info{$node}{username} = $my_hash->{$node}->[0]->{'username'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{username}) {
|
||||
$node_info{$node}{username} = $passwd_hash->{username};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute username", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($my_hash->{$node}->[0]->{'password'}) {
|
||||
$node_info{$node}{password} = $my_hash->{$node}->[0]->{'password'};
|
||||
} elsif ($passwd_hash and $passwd_hash->{password}) {
|
||||
$node_info{$node}{password} = $passwd_hash->{password};
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute password", $callback, $node);
|
||||
delete $node_info{$node};
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
} else {
|
||||
xCAT::SvrUtils::sendmsg("Error: Unable to get information from openbmc table", $callback, $node);
|
||||
$rst = 1;
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
return $rst;
|
||||
}
|
||||
|
||||
1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user