net/relayd: revert back from ApiMutableModelControllerBase xxxBase (#550)

This commit is contained in:
Frank Brendel
2018-02-08 14:24:33 +01:00
committed by Franco Fichtner
parent 8d6debcf5d
commit 942c78928b
2 changed files with 91 additions and 68 deletions
+1 -1
View File
@@ -3,6 +3,6 @@ PLUGIN_VERSION= 2.0.d
PLUGIN_DEPENDS= relayd
PLUGIN_COMMENT= Relayd Load Balancer
PLUGIN_MAINTAINER= frank.brendel@eurolog.com
PLUGIN_REVISION= 0
PLUGIN_REVISION= 1
.include "../../Mk/plugins.mk"
@@ -58,16 +58,25 @@ class SettingsController extends ApiMutableModelControllerBase
*/
public function getAction($nodeType = null, $uuid = null)
{
if ($nodeType != null) {
$result = array("result" => "failed");
if ($this->request->isGet() && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
if ($nodeType == 'general') {
$mdlRelayd = new Relayd();
return array('result' => 'ok', 'general' => $mdlRelayd->getNodeByReference('general')->getNodes());
$node = $mdlRelayd->getNodeByReference($nodeType);
} else {
return $this->getBase($nodeType, $nodeType, $uuid);
if($uuid != null) {
$node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
} else {
$node = $mdlRelayd->$nodeType->Add();
}
}
if ($node != null) {
$result[$nodeType] = $node->getNodes();
$result["result"] = "ok";
}
}
return array("result" => "failed");
return $result;
}
/**
@@ -79,74 +88,85 @@ class SettingsController extends ApiMutableModelControllerBase
*/
public function setAction($nodeType = null, $uuid = null)
{
if (!$this->request->isPost() || !$this->request->hasPost("relayd") || $nodeType == null) {
return array('result' => 'failed');
}
$this->validateNodeType($nodeType);
$relaydInfo = $this->request->getPost("relayd");
if ($nodeType == 'general') {
$result = array("result" => "failed", "validations" => array());
if ($this->request->isPost() && $this->request->hasPost("relayd") && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
$node = $mdlRelayd->getNodeByReference($nodeType);
$node->setNodes($relaydInfo[$nodeType]);
if ($relaydInfo['general']['enabled'] == '0') {
$svcRelayd = new ServiceController();
$svcRelayd->stopAction();
}
$mdlRelayd->serializeToConfig();
Config::getInstance()->save();
return array("result" => "saved");
}
// perform plugin specific validations
if ($nodeType == 'virtualserver') {
if ($relaydInfo[$nodeType]['type'] == 'redirect') {
if ($relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for redirects.";
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects.";
if ($nodeType == 'general') {
$node = $mdlRelayd->getNodeByReference($nodeType);
} else {
if($uuid != null) {
$node = $mdlRelayd->getNodeByReference($nodeType . '.' . $uuid);
} else {
$node = $mdlRelayd->$nodeType->Add();
}
}
if ($relaydInfo[$nodeType]['type'] == 'relay') {
if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') {
$result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for relays.";
if ($node != null) {
$relaydInfo = $this->request->getPost("relayd");
// perform plugin specific validations
if ($nodeType == 'virtualserver') {
if ($relaydInfo[$nodeType]['type'] == 'redirect') {
if ($relaydInfo[$nodeType]['transport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['transport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for redirects.";
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] != 'least-states' &&
$relaydInfo[$nodeType]['backuptransport_tablemode'] != 'roundrobin') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for redirects.";
}
}
if ($relaydInfo[$nodeType]['type'] == 'relay') {
if ($relaydInfo[$nodeType]['transport_tablemode'] == 'least-states') {
$result["validations"]['relayd.virtualserver.transport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['transport_tablemode'] . "' not supported for relays.";
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] == 'least-states') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for relays.";
}
}
} elseif ($nodeType == 'tablecheck') {
switch ($relaydInfo[$nodeType]['type']) {
case 'send':
if (empty($relaydInfo[$nodeType]['expect'])) {
$result["validations"]['relayd.tablecheck.expect'] = "Expect Pattern cannot be empty.";
}
break;
case 'script':
if(empty($relaydInfo[$nodeType]['path'])) {
$result["validations"]['relayd.tablecheck.path'] = "Script path cannot be empty.";
}
break;
case 'http':
if(empty($relaydInfo[$nodeType]['path'])) {
$result["validations"]['relayd.tablecheck.path'] = "Path cannot be empty.";
}
if(empty($relaydInfo[$nodeType]['code']) && empty($relaydInfo[$nodeType]['digest'])) {
$result["validations"]['relayd.tablecheck.code'] = "Provide one of Response Code or Message Digest.";
$result["validations"]['relayd.tablecheck.digest'] = "Provide one of Response Code or Message Digest.";
}
break;
}
}
if ($relaydInfo[$nodeType]['backuptransport_tablemode'] == 'least-states') {
$result["validations"]['relayd.virtualserver.backuptransport_tablemode'] = "Scheduler '" . $relaydInfo[$nodeType]['backuptransport_tablemode'] . "' not supported for relays.";
$node->setNodes($relaydInfo[$nodeType]);
$valMsgs = $mdlRelayd->performValidation();
foreach ($valMsgs as $field => $msg) {
$fieldnm = str_replace($node->__reference, "relayd." . $nodeType, $msg->getField());
$result["validations"][$fieldnm] = $msg->getMessage();
}
}
} elseif ($nodeType == 'tablecheck') {
switch ($relaydInfo[$nodeType]['type']) {
case 'send':
if (empty($relaydInfo[$nodeType]['expect'])) {
$result["validations"]['relayd.tablecheck.expect'] = "Expect Pattern cannot be empty.";
if (empty($result["validations"])) {
unset($result["validations"]);
$result['result'] = 'ok';
$mdlRelayd->serializeToConfig();
Config::getInstance()->save();
if ($nodeType == 'general' && $relaydInfo['general']['enabled'] == '0') {
$svcRelayd = new ServiceController();
$result = $svcRelayd->stopAction();
}
break;
case 'script':
if (empty($relaydInfo[$nodeType]['path'])) {
$result["validations"]['relayd.tablecheck.path'] = "Script path cannot be empty.";
}
break;
case 'http':
if (empty($relaydInfo[$nodeType]['path'])) {
$result["validations"]['relayd.tablecheck.path'] = "Path cannot be empty.";
}
if (empty($relaydInfo[$nodeType]['code']) && empty($relaydInfo[$nodeType]['digest'])) {
$result["validations"]['relayd.tablecheck.code'] = "Provide one of Response Code or Message Digest.";
$result["validations"]['relayd.tablecheck.digest'] = "Provide one of Response Code or Message Digest.";
}
break;
}
}
}
if (!empty($result["validations"])) {
return $result;
}
return $this->setBase('relayd', $nodeType, $uuid);
return $result;
}
/**
@@ -200,8 +220,11 @@ class SettingsController extends ApiMutableModelControllerBase
*/
public function searchAction($nodeType = null)
{
if ($nodeType != null) {
$this->sessionClose();
if ($this->request->isPost() && $nodeType != null) {
$this->validateNodeType($nodeType);
$mdlRelayd = new Relayd();
$grid = new UIModelGrid($mdlRelayd->$nodeType);
$fields = array();
switch ($nodeType) {
case 'host':
@@ -220,7 +243,7 @@ class SettingsController extends ApiMutableModelControllerBase
$fields = array('enabled', 'name', 'type');
break;
}
return $this->searchBase($nodeType, $fields);
return $grid->fetchBindRequest($this->request, $fields);
}
}