From e3d4b3b7f7ae0eeb936f734f696d3f5bbfe2c762 Mon Sep 17 00:00:00 2001 From: PiBa-NL Date: Sat, 24 Oct 2015 20:45:43 +0200 Subject: haproxy-devel, avoid possible config upgrade error messages, add actually writhing the configured frontend errorfiles to the config --- config/haproxy-devel/pkg/haproxy.inc | 24 +++- .../haproxy-devel/pkg/haproxy_upgrade_config.inc | 146 ++++++++++----------- 2 files changed, 92 insertions(+), 78 deletions(-) (limited to 'config/haproxy-devel/pkg') diff --git a/config/haproxy-devel/pkg/haproxy.inc b/config/haproxy-devel/pkg/haproxy.inc index 7a07e9a7..afa10fb7 100644 --- a/config/haproxy-devel/pkg/haproxy.inc +++ b/config/haproxy-devel/pkg/haproxy.inc @@ -1295,7 +1295,7 @@ function haproxy_updateocsp($socketupdate = true) { } function haproxy_writeconf($configpath) { - global $config; + global $config, $a_files_cache; global $aliastable; global $a_action; if (!isset($aliastable)) { @@ -1595,6 +1595,24 @@ function haproxy_writeconf($configpath) { fwrite ($fd, "\ttimeout client\t\t{$bind['client_timeout']}\n"); + if (is_arrayset($bind,'a_errorfiles','item')) { + foreach($bind['a_errorfiles']['item'] as $errorfile) { + if (!is_array($a_files_cache)) {// load only once + $a_files_cache = haproxy_get_fileslist(); + } + $file = $errorfile['errorfile']; + $errorcodes = explode(",",$errorfile['errorcode']); + foreach($errorcodes as $errorcode) { + $filename = "$configpath/errorfile_{$name}_{$errorcode}_{$file}"; + $content = base64_decode($a_files_cache[$file]['content']); + $content = str_replace('{errormsg}', $a_error[$errorcode]['descr'], $content); + $content = str_replace('{errorcode}', $errorcode, $content); + file_put_contents($filename, $content); + fwrite ($fd, "\terrorfile\t\t\t" . $errorcode ." " . $filename . "\n"); + } + } + } + // Advanced pass thru if ($bind['advanced']) { $advanced = explode("\n", base64_decode($bind['advanced'])); @@ -1647,12 +1665,8 @@ function haproxy_writeconf($configpath) { $item['use_backendbackend'] = $frontend['backend_serverpool']; $a_actionitems[] = $item; } - - //$backend = haproxy_find_backend($frontend['backend_serverpool']); - //$transparent_clientip = $backend["transparent_clientip"] == 'yes'; $transparent_clientip = frontend_usetransparentbackend($frontend); - $allowfordefaultbackend = true; $ipv = array(); if ($transparent_clientip) { diff --git a/config/haproxy-devel/pkg/haproxy_upgrade_config.inc b/config/haproxy-devel/pkg/haproxy_upgrade_config.inc index 58e66852..052f7c77 100644 --- a/config/haproxy-devel/pkg/haproxy_upgrade_config.inc +++ b/config/haproxy-devel/pkg/haproxy_upgrade_config.inc @@ -145,16 +145,18 @@ function haproxy_upgrade_config() { } if ($configversion < "00.13") { // update config to "haproxy-devel 1.5-dev19 pkg v0.13" - foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$bind) { - if (isset($bind['extaddr'])) { - $new['extaddr'] = $bind['extaddr']; - $new['extaddr_port'] = $bind['port']; - $new['extaddr_ssl'] = $bind['ssloffload']; - $bind['a_extaddr']['item'][] = $new; + if (is_array($config['installedpackages']['haproxy']['ha_backends']['item'])) { + foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$bind) { + if (isset($bind['extaddr'])) { + $new['extaddr'] = $bind['extaddr']; + $new['extaddr_port'] = $bind['port']; + $new['extaddr_ssl'] = $bind['ssloffload']; + $bind['a_extaddr']['item'][] = $new; + } + unset($bind['extaddr']); + unset($bind['port']); + //unset($bind['ssloffload']); } - unset($bind['extaddr']); - unset($bind['port']); - //unset($bind['ssloffload']); } $configversion = "00.13"; } @@ -169,15 +171,17 @@ function haproxy_upgrade_config() { $static_output .= "HAProxy, 00.17\n"; update_output_window($static_output); // remove 'none' ca-cert, and set checkbox to allow for no certificate instead. - foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$bind) { - $list = array(); - foreach ($bind['clientcert_ca']['item'] as $ca){ - if (empty($ca['cert_ca'])) - $bind['sslclientcert-none'] = 'yes'; - else - $list[] = $ca; + if (is_array($config['installedpackages']['haproxy']['ha_backends']['item'])) { + foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$bind) { + $list = array(); + foreach ($bind['clientcert_ca']['item'] as $ca){ + if (empty($ca['cert_ca'])) + $bind['sslclientcert-none'] = 'yes'; + else + $list[] = $ca; + } + $bind['clientcert_ca']['item'] = $list; } - $bind['clientcert_ca']['item'] = $list; } $configversion = "00.17"; } @@ -197,69 +201,65 @@ function haproxy_upgrade_config() { } if ($configversion < "00.32") { $frontends = array(); - foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$frontend) { - $primaryfrontend = get_primaryfrontend($frontend); - $fe_name = $primaryfrontend['name']; - $frontends[$fe_name][] = &$frontend; - } - - foreach ($frontends as $primary) { - $acl_count = array(); - foreach ($primary as &$frontend){ - $acl_use = array(); - $a_actions = &$frontend['a_actionitems']['item']; - if (!is_array($a_actions)) { - $a_actions = array(); - } - + if (is_array($config['installedpackages']['haproxy']['ha_backends']['item'])) { + foreach ($config['installedpackages']['haproxy']['ha_backends']['item'] as &$frontend) { $primaryfrontend = get_primaryfrontend($frontend); - $frontendtype = $primaryfrontend['type']; - $is_default = true; - if (is_array($frontend['ha_acls']['item'])) { - $a_acl = &$frontend['ha_acls']['item']; + $fe_name = $primaryfrontend['name']; + $frontends[$fe_name][] = &$frontend; + } + + foreach ($frontends as $primary) { + $acl_count = array(); + foreach ($primary as &$frontend){ + $acl_use = array(); + $a_actions = &$frontend['a_actionitems']['item']; + if (!is_array($a_actions)) { + $a_actions = array(); + } + + $primaryfrontend = get_primaryfrontend($frontend); + $frontendtype = $primaryfrontend['type']; + $is_default = true; + if (is_array($frontend['ha_acls']['item'])) { + $a_acl = &$frontend['ha_acls']['item']; - foreach ($a_acl as &$aclitem) { - $aclname = $aclitem['name']; - $acltype = haproxy_find_acl($aclitem['expression']); - if ($aclitem['expression'] == "backendservercount") { - $aclitem['backendservercountbackend'] = $frontend['backend_serverpool']; + foreach ($a_acl as &$aclitem) { + $aclname = $aclitem['name']; + $acltype = haproxy_find_acl($aclitem['expression']); + if ($aclitem['expression'] == "backendservercount") { + $aclitem['backendservercountbackend'] = $frontend['backend_serverpool']; + } + if (!isset($acl_count[$aclname])) { + $acl_count[$aclname] = 1; + } else { + $acl_count[$aclname] += 1; + $aclitem['name'] .= "_{$acl_count[$aclname]}"; + } + if (!isset($acltype)) + continue; + if ($acltype['mode'] != '' && $acltype['mode'] != strtolower($frontendtype)) { + continue; + } + $acl_use[$aclname][] = $aclitem['name']; } - if (!isset($acl_count[$aclname])) { - $acl_count[$aclname] = 1; - } else { - $acl_count[$aclname] += 1; - $aclitem['name'] .= "_{$acl_count[$aclname]}"; + foreach ($acl_use as $key => $acl_x) { + $aclx = $acl_count[$key]; + $aclnames = ""; + foreach($acl_x as $aclname) { + $aclnames .= " $aclname"; + } + $aclnames = trim($aclnames); + $action['action'] = 'use_backend'; + $action['use_backendbackend'] = $frontend['backend_serverpool']; + $action['acl'] = $aclnames; + $a_actions[] = $action; + $is_default = false; } - if (!isset($acltype)) - continue; - if ($acltype['mode'] != '' && $acltype['mode'] != strtolower($frontendtype)) { - continue; - } - $acl_use[$aclname][] = $aclitem['name']; } - foreach ($acl_use as $key => $acl_x) { - $aclx = $acl_count[$key]; - $aclnames = ""; - foreach($acl_x as $aclname) { - $aclnames .= " $aclname"; - } - $aclnames = trim($aclnames); - $action['action'] = 'use_backend'; - $action['use_backendbackend'] = $frontend['backend_serverpool']; - $action['acl'] = $aclnames; - $a_actions[] = $action; - $is_default = false; + if (!$is_default) { + $frontend['backend_serverpool'] = ""; } } - if (!$is_default) { - /* - // default backends still exist ;) no need to convert them to 'actions'. - $action['action'] = 'use_backend'; - $action['use_backendbackend'] = $frontend['backend_serverpool']; - $action['acl'] = ""; // default backend has no acl - $a_actions[] = $action;*/ - $frontend['backend_serverpool'] = ""; - } } } $configversion = "00.32"; -- cgit v1.2.3