2
0
mirror of https://github.com/xcat2/xcat-core.git synced 2025-05-30 17:46:38 +00:00

modified depending on comments

This commit is contained in:
XuWei 2018-01-16 04:10:30 -05:00
parent 26ccc9fabd
commit 7e286494c0
3 changed files with 31 additions and 25 deletions

View File

@ -27,6 +27,7 @@ my $LOCK_DIR = "/var/lock/xcat/";
my $LOCK_PATH = "/var/lock/xcat/agent.lock";
my $AGENT_SOCK_PATH = "/var/run/xcat/agent.sock";
my $PYTHON_LOG_PATH = "/var/log/xcat/agent.log";
my $PYTHON_AGENT_FILE = "/opt/xcat/lib/python/agent/agent.py";
my $MSG_TYPE = "message";
my $DB_TYPE = "db";
my $lock_fd;
@ -68,9 +69,8 @@ sub acquire_lock {
return $lock_fd;
}
sub start_python_agent {
my $agent_file = "/opt/xcat/lib/python/agent/agent.py";
if (! -e $agent_file) {
xCAT::MsgUtils->message("S", "Error: '/opt/xcat/lib/python/agent/agent.py' does not exist");
if (! -e $PYTHON_AGENT_FILE) {
xCAT::MsgUtils->message("S", "'$PYTHON_AGENT_FILE' does not exist");
return undef;
}
@ -91,9 +91,10 @@ sub start_python_agent {
open($fd, ">>", $PYTHON_LOG_PATH) && close($fd);
open(STDOUT, '>>', $PYTHON_LOG_PATH) or die("open: $!");
open(STDERR, '>>&', \*STDOUT) or die("open: $!");
my $ret = exec ("/opt/xcat/lib/python/agent/agent.py");
my $ret = exec ($PYTHON_AGENT_FILE);
if (!defined($ret)) {
xCAT::MsgUtils->message("S", "Error: Failed to start python agent");
exit(1);
}
}
return $pid;
@ -153,6 +154,7 @@ sub submit_agent_request {
$data->{envs} = \%env_hash;
$buf = encode_json($data);
$sz = pack('i', length($buf));
# send length of data first
$ret = $sock->send($sz);
if (!$ret) {
xCAT::MsgUtils->message("E", { data => ["Failed to send message to the agent"] }, $callback);
@ -160,6 +162,7 @@ sub submit_agent_request {
kill('TERM', $pid);
return;
}
# send data
$ret = $sock->send($buf);
if (!$ret) {
xCAT::MsgUtils->message("E", { data => ["Failed to send message to the agent"] }, $callback);
@ -172,7 +175,9 @@ sub submit_agent_request {
if (!$ret) {
last;
}
# receive the length of data
$sz = unpack('i', $buf);
# read data with length is $sz
$ret = $sock->recv($buf, $sz);
if (!$ret) {
xCAT::MsgUtils->message("E", { data => ["receive data from python agent unexpectedly"] }, $callback);
@ -193,4 +198,22 @@ sub wait_agent {
}
}
sub is_openbmc_python {
my $environment = shift;
$environment = shift if (($environment) && ($environment =~ /OPENBMC/));
# If XCAT_OPENBMC_PYTHON is YES, will run openbmc2.pm. If not, run openbmc.pm
if (ref($environment) eq 'ARRAY' and ref($environment->[0]->{XCAT_OPENBMC_PYTHON}) eq 'ARRAY') {
$::OPENBMC_PYTHON = $environment->[0]->{XCAT_OPENBMC_PYTHON}->[0];
} elsif (ref($environment) eq 'ARRAY') {
$::OPENBMC_PYTHON = $environment->[0]->{XCAT_OPENBMC_PYTHON};
} else {
$::OPENBMC_PYTHON = $environment->{XCAT_OPENBMC_PYTHON};
}
if (defined($::OPENBMC_PYTHON) and $::OPENBMC_PYTHON eq "YES") {
return 1;
}
return 0;
}
1;

View File

@ -679,17 +679,7 @@ sub preprocess_request {
}
##############################################
# Provide a way to change to python code before formal release
if (ref($request->{environment}) eq 'ARRAY' and ref($request->{environment}->[0]->{XCAT_OPENBMC_PYTHON}) eq 'ARRAY') {
$::OPENBMC_PYTHON = $request->{environment}->[0]->{XCAT_OPENBMC_PYTHON}->[0];
} elsif (ref($request->{environment}) eq 'ARRAY') {
$::OPENBMC_PYTHON = $request->{environment}->[0]->{XCAT_OPENBMC_PYTHON};
} else {
$::OPENBMC_PYTHON = $request->{environment}->{XCAT_OPENBMC_PYTHON};
}
##############################################
if (defined($::OPENBMC_PYTHON) and $::OPENBMC_PYTHON eq "YES") {
if (xCAT::OPENBMC->is_openbmc_python($request->{environment})) {
$request = {};
return;
}

View File

@ -50,16 +50,7 @@ sub preprocess_request {
my $request = shift;
$callback = shift;
# if $::OPENBMC_PYTHON is 'YES', will run this script
if (ref($request->{environment}) eq 'ARRAY' and ref($request->{environment}->[0]->{XCAT_OPENBMC_PYTHON}) eq 'ARRAY') {
$::OPENBMC_PYTHON = $request->{environment}->[0]->{XCAT_OPENBMC_PYTHON}->[0];
} elsif (ref($request->{environment}) eq 'ARRAY') {
$::OPENBMC_PYTHON = $request->{environment}->[0]->{XCAT_OPENBMC_PYTHON};
} else {
$::OPENBMC_PYTHON = $request->{environment}->{XCAT_OPENBMC_PYTHON};
}
if (! (defined($::OPENBMC_PYTHON) and $::OPENBMC_PYTHON eq "YES")) {
if (!xCAT::OPENBMC->is_openbmc_python($request->{environment})) {
$request = {};
return;
}
@ -119,6 +110,7 @@ sub process_request {
my $noderange = $request->{node};
my $check = parse_node_info($noderange);
$callback->({ errorcode => [$check] }) if ($check);
return unless(%node_info);
my $pid = xCAT::OPENBMC::start_python_agent();
if (!defined($pid)) {
xCAT::MsgUtils->message("E", { data => ["Failed to start python agent"] }, $callback);
@ -186,6 +178,7 @@ sub parse_node_info {
}
unless($node_info{$node}{bmc}) {
xCAT::SvrUtils::sendmsg("Error: Unable to get attribute bmc", $callback, $node);
delete $node_info{$node};
$rst = 1;
next;
}