diff --git a/net/relayd/+POST_INSTALL.pre b/net/relayd/+POST_INSTALL.pre deleted file mode 100644 index a72781a00..000000000 --- a/net/relayd/+POST_INSTALL.pre +++ /dev/null @@ -1 +0,0 @@ -/usr/local/opnsense/scripts/OPNsense/Relayd/post-install.php diff --git a/net/relayd/Makefile b/net/relayd/Makefile index 2a6649d95..3f38b0b00 100644 --- a/net/relayd/Makefile +++ b/net/relayd/Makefile @@ -1,6 +1,6 @@ PLUGIN_NAME= relayd PLUGIN_VERSION= 2.0.d -PLUGIN_REVISION= 3 +PLUGIN_REVISION= 4 PLUGIN_DEPENDS= relayd PLUGIN_COMMENT= Relayd Load Balancer PLUGIN_MAINTAINER= frank.brendel@eurolog.com diff --git a/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Migrations/M1_0_0.php b/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Migrations/M1_0_0.php new file mode 100644 index 000000000..ca0eac5d1 --- /dev/null +++ b/net/relayd/src/opnsense/mvc/app/models/OPNsense/Relayd/Migrations/M1_0_0.php @@ -0,0 +1,241 @@ +object(); + + $hosts = array(); + $tableChecks = array(); + $tables = array(); + $protocols = array(); + $sticky = 0; + + /* load_balancer setting */ + if (!empty($cfgObj->load_balancer->setting->timeout)) { + $model->general->timeout = $cfgObj->load_balancer->setting->timeout; + } + if (!empty($cfgObj->load_balancer->setting->interval)) { + $model->general->interval = $cfgObj->load_balancer->setting->interval; + } + if (!empty($cfgObj->load_balancer->setting->prefork)) { + $model->general->prefork = $cfgObj->load_balancer->setting->prefork; + } + if (!empty($cfgObj->load_balancer->setting->lb_use_sticky)) { + $sticky = $cfgObj->load_balancer->setting->lb_use_sticky; + } + + /* load_balancer monitor_type */ + if (!empty($cfgObj->load_balancer->monitor_type) && count($cfgObj->load_balancer->monitor_type)) { + foreach ($cfgObj->load_balancer->monitor_type as $monitorType) { + if (!empty($monitorType->name)) { + $name = $monitorType->name->__toString(); + switch ($monitorType->type) { + case 'http': + case 'https': + if (!empty($monitorType->options->path) && + !empty($monitorType->options->code)) { + $setting = array( + 'name' => $name, + 'path' => $monitorType->options->path, + 'code' => $monitorType->options->code, + 'type' => 'http'); + if ($monitorType->type == 'https') { + $setting['ssl'] = 1; + } + if (!empty($monitorType->options->host)) { + $setting['host'] = $monitorType->options->host; + } + if (!empty($setting)) { + $node = $model->tablecheck->Add(); + $node->setNodes($setting); + $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; + } + } + break; + case 'send': + if (!empty($monitorType->options->expect)) { + $setting = array( + 'name' => $name, + 'type' => 'send', + 'expect' => $monitorType->options->expect); + } + if (!empty($monitorType->options->data)) { + $setting['data'] = $monitorType->options->data; + } + if (!empty($setting)) { + $node = $model->tablecheck->Add(); + $node->setNodes($setting); + $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; + } + break; + default: + $node = $model->tablecheck->Add(); + $node->setNodes(array('name' => $name, 'type' => $monitorType->type)); + $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; + break; + } + } + } + } + + /* load_balancer lbpool */ + if (!empty($cfgObj->load_balancer->lbpool) && count($cfgObj->load_balancer->lbpool)) { + foreach ($cfgObj->load_balancer->lbpool as $lbpool) { + if (!empty($lbpool->name) && + !empty($lbpool->servers && + !empty($lbpool->monitor))) { + $name = $lbpool->name->__toString(); + $tableSetting = array( + 'enabled' => 1, + 'name' => $lbpool->name, + 'hosts' => '' + ); + /* cannot import 'serversdisabled' */ + foreach ($lbpool->servers as $server) { + $serverName = $server->__toString(); + /* add new host */ + if (empty($hosts) || !isset($hosts[$serverName])) { + $hostSetting = array( + 'name' => $serverName, + 'address' => $serverName); + if (!empty($lbpool->retry)) { + $hostSetting['retry'] = $lbpool->retry; + } + $hostNode = $model->host->Add(); + $hostNode->setNodes($hostSetting); + $hosts[$serverName]['uuid'] = $hostNode->getAttributes()['uuid']; + } + $tableSetting['hosts'] .= $hosts[$serverName]['uuid'] . ','; + } + $tableSetting['hosts'] = rtrim($tableSetting['hosts'], ','); + $tableNode = $model->table->Add(); + $tableNode->setNodes($tableSetting); + $tables[$name]['uuid'] = $tableNode->getAttributes()['uuid']; + if (!empty($lbpool->mode) && $lbpool->mode == 'loadbalance') { + $tables[$name]['mode'] = 'loadbalance'; + } + $monitor = $lbpool->monitor->__toString(); + $tables[$name]['monitor'] = $tableChecks[$monitor]['uuid']; + if (!empty($lbpool->port)) { + $tables[$name]['port'] = $lbpool->port; + } + } + } + } + + /* protocol definitions */ + $protocolDir = '/usr/local/etc/inc/plugins.inc.d/relayd'; + if (is_dir($protocolDir)) { + $protocolFiles = glob($protocolDir . '/*.proto'); + foreach ($protocolFiles as $protocolFile) { + $content = file_get_contents($protocolFile); + preg_match('/^([^\{]*)\{((.|\n|\r)*)\}((\s|\n|\r)*)$/', $content, $acontent); + if (preg_match('/^protocol\s+/', trim($acontent[1]))) { + preg_match('/^([^\s]*)\s+([^\s]*)/', trim($acontent[1]), $protocol); + } else { + preg_match('/^([^\s]*)\s+([^\s]*)\s+([^\s]*)/', trim($acontent[1]), $protocol); + } + $type = trim($protocol[1]); + if (count($protocol) == 3 && $type == 'protocol') { + $type = 'tcp'; + $name = trim($protocol[2]); + } else { + $name = trim($protocol[3]); + } + $name = trim($name, '"'); + $protocolSetting = array( + 'name' => $name, + 'type' => $type, + 'options' => trim($acontent[2]) + ); + $protocolNode = $model->protocol->Add(); + $protocolNode->setNodes($protocolSetting); + $protocols[$name]['uuid'] = $protocolNode->getAttributes()['uuid']; + } + } + + /* load_balancer virtual_server */ + if (!empty($cfgObj->load_balancer->virtual_server) && count($cfgObj->load_balancer->virtual_server)) { + foreach ($cfgObj->load_balancer->virtual_server as $virtual_server) { + if (!empty($virtual_server->name) && + !empty($virtual_server->ipaddr) && + !empty($virtual_server->port) && + !empty($virtual_server->poolname)) { + $poolname = $virtual_server->poolname->__toString(); + $vserverSetting = array( + 'enabled' => 1, + 'name' => $virtual_server->name, + 'listen_address' => $virtual_server->ipaddr, + 'listen_startport' => $virtual_server->port, + 'transport_type' => 'forward', + 'transport_table' => $tables[$poolname]['uuid'], + 'transport_tablecheck' => $tables[$poolname]['monitor'] + ); + if (!empty($virtual_server->mode)) { + $vserverSetting['type'] = $virtual_server->mode; + if (!empty($sticky) && $vserverSetting['type'] == 'redirect') { + $vserverSetting['stickyaddress'] = 1; + } + } + if (!empty($tables[$poolname]['port'])) { + $vserverSetting['transport_port'] = $tables[$poolname]['port']; + } + if (!empty($tables[$poolname]['mode'])) { + $vserverSetting['transport_tablemode'] = $tables[$poolname]['mode']; + } + if (!empty($virtual_server->sitedown)) { + $sitedown = $virtual_server->sitedown->__toString(); + $vserverSetting['backuptransport_table'] = $tables[$sitedown]['uuid']; + $vserverSetting['backuptransport_tablecheck'] = $vserverSetting['transport_tablecheck']; + if (!empty($vserverSetting['transport_tablemode'])) { + $vserverSetting['backuptransport_tablemode'] = $vserverSetting['transport_tablemode']; + } + } + if (!empty($virtual_server->sessiontimeout)) { + $vserverSetting['sessiontimeout'] = $virtual_server->sessiontimeout; + } + if (!empty($virtual_server->relay_protocol)) { + $relay_protocol = $virtual_server->relay_protocol->__toString(); + $vserverSetting['protocol'] = $protocols[$relay_protocol]['uuid']; + } + $vserverNode = $model->virtualserver->Add(); + $vserverNode->setNodes($vserverSetting); + } + } + } + } +} diff --git a/net/relayd/src/opnsense/scripts/OPNsense/Relayd/post-install.php b/net/relayd/src/opnsense/scripts/OPNsense/Relayd/post-install.php deleted file mode 100755 index ad0771163..000000000 --- a/net/relayd/src/opnsense/scripts/OPNsense/Relayd/post-install.php +++ /dev/null @@ -1,272 +0,0 @@ -#!/usr/local/bin/php -object(); -$shellObj = new OPNsense\Core\Shell; - -// test if Relayd is already configured -$nodes = $mdlRelayd->getNodes(); -if (count($nodes['host']) != 0 || - count($nodes['table']) != 0 || - count($nodes['tablecheck']) != 0) { - exit; -} - -$hosts = array(); -$tableChecks = array(); -$tables = array(); -$protocols = array(); -$sticky = 0; - -if (!empty($cfgObj->load_balancer->setting)) { - $generalSetting = array(); - if (!empty($cfgObj->load_balancer->setting->timeout)) { - $generalSetting['timeout'] = $cfgObj->load_balancer->setting->timeout; - } - if (!empty($cfgObj->load_balancer->setting->interval)) { - $generalSetting['interval'] = $cfgObj->load_balancer->setting->interval; - } - if (!empty($cfgObj->load_balancer->setting->prefork)) { - $generalSetting['prefork'] = $cfgObj->load_balancer->setting->prefork; - } - if (!empty($cfgObj->load_balancer->setting->lb_use_sticky)) { - $sticky = $cfgObj->load_balancer->setting->lb_use_sticky; - } - if (!empty($generalSetting)) { - $node = $mdlRelayd->getNodeByReference('general'); - $node->setNodes($generalSetting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - } -} - -if (!empty($cfgObj->load_balancer->monitor_type) && count($cfgObj->load_balancer->monitor_type)) { - foreach ($cfgObj->load_balancer->monitor_type as $monitorType) { - if (!empty($monitorType->name)) { - $name = $monitorType->name->__toString(); - switch ($monitorType->type) { - case 'http': - case 'https': - if (!empty($monitorType->options->path) && - !empty($monitorType->options->code)) { - $setting = array( - 'name' => $name, - 'path' => $monitorType->options->path, - 'code' => $monitorType->options->code, - 'type' => 'http'); - if ($monitorType->type == 'https') { - $setting['ssl'] = 1; - } - if (!empty($monitorType->options->host)) { - $setting['host'] = $monitorType->options->host; - } - if (!empty($setting)) { - $node = $mdlRelayd->tablecheck->Add(); - $node->setNodes($setting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; - } - } - break; - case 'send': - if (!empty($monitorType->options->expect)) { - $setting = array( - 'name' => $name, - 'type' => 'send', - 'expect' => $monitorType->options->expect); - } - if (!empty($monitorType->options->data)) { - $setting['data'] = $monitorType->options->data; - } - if (!empty($setting)) { - $node = $mdlRelayd->tablecheck->Add(); - $node->setNodes($setting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; - } - break; - default: - $node = $mdlRelayd->tablecheck->Add(); - $node->setNodes(array('name' => $name, 'type' => $monitorType->type)); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $tableChecks[$name]['uuid'] = $node->getAttributes()['uuid']; - break; - } - } - } -} - -if (!empty($cfgObj->load_balancer->lbpool) && count($cfgObj->load_balancer->lbpool)) { - foreach ($cfgObj->load_balancer->lbpool as $lbpool) { - if (!empty($lbpool->name) && - !empty($lbpool->servers && - !empty($lbpool->monitor))) { - $name = $lbpool->name->__toString(); - $tableSetting = array( - 'enabled' => 1, - 'name' => $lbpool->name - ); - // cannot import 'serversdisabled' - foreach ($lbpool->servers as $server) { - $serverName = $server->__toString(); - // add new host - if (empty($hosts) || !isset($hosts[$serverName])) { - $hostSetting = array( - 'name' => $serverName, - 'address' => $serverName); - if (!empty($lbpool->retry)) { - $hostSetting['retry'] = $lbpool->retry; - } - $hostNode = $mdlRelayd->host->Add(); - $hostNode->setNodes($hostSetting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $hosts[$serverName]['uuid'] = $hostNode->getAttributes()['uuid']; - } - $tableSetting['hosts'] .= $hosts[$serverName]['uuid'] . ','; - } - $tableSetting['hosts'] = rtrim($tableSetting['hosts'], ','); - $tableNode = $mdlRelayd->table->Add(); - $tableNode->setNodes($tableSetting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $tables[$name]['uuid'] = $tableNode->getAttributes()['uuid']; - if (!empty($lbpool->mode) && $lbpool->mode == 'loadbalance') { - $tables[$name]['mode'] = 'loadbalance'; - } - $monitor = $lbpool->monitor->__toString(); - $tables[$name]['monitor'] = $tableChecks[$monitor]['uuid']; - if (!empty($lbpool->port)) { - $tables[$name]['port'] = $lbpool->port; - } - } - } -} - -$protocolDir = '/usr/local/etc/inc/plugins.inc.d/relayd'; -if (is_dir($protocolDir)) { - $protocolFiles = glob($protocolDir . '/*.proto'); - foreach ($protocolFiles as $protocolFile) { - $content = file_get_contents($protocolFile); - preg_match('/^([^\{]*)\{((.|\n|\r)*)\}((\s|\n|\r)*)$/', $content, $acontent); - if (preg_match('/^protocol\s+/', trim($acontent[1]))) { - preg_match('/^([^\s]*)\s+([^\s]*)/', trim($acontent[1]), $protocol); - } else { - preg_match('/^([^\s]*)\s+([^\s]*)\s+([^\s]*)/', trim($acontent[1]), $protocol); - } - $type = trim($protocol[1]); - if (count($protocol) == 3 && $type == 'protocol') { - $type = 'tcp'; - $name = trim($protocol[2]); - } else { - $name = trim($protocol[3]); - } - $name = trim($name, '"'); - $protocolSetting = array( - 'name' => $name, - 'type' => $type, - 'options' => trim($acontent[2]) - ); - $protocolNode = $mdlRelayd->protocol->Add(); - $protocolNode->setNodes($protocolSetting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - $protocols[$name]['uuid'] = $protocolNode->getAttributes()['uuid']; - } -} - -if (!empty($cfgObj->load_balancer->virtual_server) && count($cfgObj->load_balancer->virtual_server)) { - foreach ($cfgObj->load_balancer->virtual_server as $virtual_server) { - if (!empty($virtual_server->name) && - !empty($virtual_server->ipaddr) && - !empty($virtual_server->port) && - !empty($virtual_server->poolname)) { - $poolname = $virtual_server->poolname->__toString(); - $vserverSetting = array( - 'enabled' => 1, - 'name' => $virtual_server->name, - 'listen_address' => $virtual_server->ipaddr, - 'listen_startport' => $virtual_server->port, - 'transport_type' => 'forward', - 'transport_table' => $tables[$poolname]['uuid'], - 'transport_tablecheck' => $tables[$poolname]['monitor'] - ); - if (!empty($virtual_server->mode)) { - $vserverSetting['type'] = $virtual_server->mode; - if (!empty($sticky) && $vserverSetting['type'] == 'redirect') { - $vserverSetting['stickyaddress'] = 1; - } - } - if (!empty($tables[$poolname]['port'])) { - $vserverSetting['transport_port'] = $tables[$poolname]['port']; - } - if (!empty($tables[$poolname]['mode'])) { - $vserverSetting['transport_tablemode'] = $tables[$poolname]['mode']; - } - if (!empty($virtual_server->sitedown)) { - $sitedown = $virtual_server->sitedown->__toString(); - $vserverSetting['backuptransport_table'] = $tables[$sitedown]['uuid']; - $vserverSetting['backuptransport_tablecheck'] = $vserverSetting['transport_tablecheck']; - if (!empty($vserverSetting['transport_tablemode'])) { - $vserverSetting['backuptransport_tablemode'] = $vserverSetting['transport_tablemode']; - } - } - if (!empty($virtual_server->sessiontimeout)) { - $vserverSetting['sessiontimeout'] = $virtual_server->sessiontimeout; - } - if (!empty($virtual_server->relay_protocol)) { - $relay_protocol = $virtual_server->relay_protocol->__toString(); - $vserverSetting['protocol'] = $protocols[$relay_protocol]['uuid']; - } - - $vserverNode = $mdlRelayd->virtualserver->Add(); - $vserverNode->setNodes($vserverSetting); - $mdlRelayd->serializeToConfig(false, true); - $cfg->save(); - } - } -} - -echo "--------------------------------------------------------- --- Your old load balancer configuration was converted. -- --- Please check the new configuration and enable it. -- ---------------------------------------------------------- -";