Merge "Align logging in the amphora"
This commit is contained in:
commit
41e7cfa09f
|
@ -195,6 +195,19 @@
|
|||
# facilitate "fail fast" scenarios like failovers
|
||||
# active_connection_max_retries = 15
|
||||
# active_connection_rety_interval = 2
|
||||
#
|
||||
# Sets the syslog LOG_LOCAL[0-7] facility number for amphora log offloading.
|
||||
# user_log_facility will receive the traffic flow logs.
|
||||
# administrative_log_facility will receive the amphora processes logs.
|
||||
# Note: Some processes only support LOG_LOCAL, so we are restricted to the
|
||||
# LOG_LOCAL facilities.
|
||||
# user_log_facility = 0
|
||||
# administrative_log_facility = 1
|
||||
#
|
||||
# The user flow log format for HAProxy.
|
||||
# {{ project_id }} and {{ lb_id }} will be automatically substituted by the
|
||||
# controller when configuring HAProxy if they are present in the string.
|
||||
# user_log_format = '{{ project_id }} {{ lb_id }} %f %ci %cp %t %{+Q}r %ST %B %U %[ssl_c_verify] %{+Q}[ssl_c_s_dn] %b %s %Tt %tsc'
|
||||
|
||||
[controller_worker]
|
||||
# workers = 1
|
||||
|
|
|
@ -59,4 +59,7 @@ class AgentJinjaTemplater(object):
|
|||
'respawn_interval': CONF.haproxy_amphora.respawn_interval,
|
||||
'amphora_udp_driver': CONF.amphora_agent.amphora_udp_driver,
|
||||
'agent_tls_protocol': CONF.amphora_agent.agent_tls_protocol,
|
||||
'topology': topology})
|
||||
'topology': topology,
|
||||
'administrative_log_facility':
|
||||
CONF.haproxy_amphora.administrative_log_facility,
|
||||
'user_log_facility': CONF.haproxy_amphora.user_log_facility})
|
||||
|
|
|
@ -18,6 +18,7 @@ import subprocess
|
|||
|
||||
import flask
|
||||
import jinja2
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
import webob
|
||||
|
||||
|
@ -27,6 +28,7 @@ from octavia.common import constants as consts
|
|||
|
||||
|
||||
BUFFER = 100
|
||||
CONF = cfg.CONF
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
@ -92,7 +94,9 @@ class Keepalived(object):
|
|||
keepalived_cfg=util.keepalived_cfg_path(),
|
||||
keepalived_log=util.keepalived_log_path(),
|
||||
amphora_nsname=consts.AMPHORA_NAMESPACE,
|
||||
amphora_netns=consts.AMP_NETNS_SVC_PREFIX
|
||||
amphora_netns=consts.AMP_NETNS_SVC_PREFIX,
|
||||
administrative_log_facility=(
|
||||
CONF.haproxy_amphora.administrative_log_facility),
|
||||
)
|
||||
text_file.write(text)
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import subprocess
|
|||
|
||||
import flask
|
||||
import jinja2
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
import webob
|
||||
from werkzeug import exceptions
|
||||
|
@ -32,6 +33,7 @@ from octavia.common import constants as consts
|
|||
|
||||
BUFFER = 100
|
||||
CHECK_SCRIPT_NAME = 'udp_check.sh'
|
||||
CONF = cfg.CONF
|
||||
KEEPALIVED_CHECK_SCRIPT_NAME = 'lvs_udp_check.sh'
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
@ -127,7 +129,9 @@ class KeepalivedLvs(udp_listener_base.UdpListenerApiServerBase):
|
|||
keepalived_cmd=consts.KEEPALIVED_CMD,
|
||||
keepalived_cfg=util.keepalived_lvs_cfg_path(listener_id),
|
||||
amphora_nsname=consts.AMPHORA_NAMESPACE,
|
||||
amphora_netns=consts.AMP_NETNS_SVC_PREFIX
|
||||
amphora_netns=consts.AMP_NETNS_SVC_PREFIX,
|
||||
administrative_log_facility=(
|
||||
CONF.haproxy_amphora.administrative_log_facility),
|
||||
)
|
||||
text_file.write(text)
|
||||
|
||||
|
|
|
@ -10,9 +10,9 @@ SELinuxContext=system_u:system_r:keepalived_t:s0
|
|||
Type=forking
|
||||
KillMode=process
|
||||
{% if vrrp_pid and check_pid %}
|
||||
ExecStart=/sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}
|
||||
ExecStart=/sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} --log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}
|
||||
{% else %}
|
||||
ExecStart=/sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }}
|
||||
ExecStart=/sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} --log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }}
|
||||
{% endif %}
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
PIDFile={{ keepalived_pid }}
|
||||
|
|
|
@ -19,9 +19,9 @@ NAME=octavia-keepalived
|
|||
DESC=octavia-keepalived
|
||||
TMPFILES="/tmp/.vrrp /tmp/.healthcheckers"
|
||||
{% if vrrp_pid and check_pid %}
|
||||
DAEMON_ARGS="-D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}"
|
||||
DAEMON_ARGS="--log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}"
|
||||
{% else %}
|
||||
DAEMON_ARGS="-D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }}"
|
||||
DAEMON_ARGS="-log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }}"
|
||||
{% endif %}
|
||||
|
||||
#includes lsb functions
|
||||
|
|
|
@ -23,7 +23,7 @@ stop on runlevel [!2345]
|
|||
respawn
|
||||
|
||||
{% if vrrp_pid and check_pid %}
|
||||
exec /sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -n -D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}
|
||||
exec /sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -n --log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }} -r {{ vrrp_pid }} -c {{ check_pid }}
|
||||
{% else %}
|
||||
exec /sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -n -D -d -f {{ keepalived_cfg }} -p {{ keepalived_pid }}
|
||||
exec /sbin/ip netns exec {{ amphora_nsname }} {{ keepalived_cmd }} -n --log-facility={{ administrative_log_facility }} -f {{ keepalived_cfg }} -p {{ keepalived_pid }}
|
||||
{% endif %}
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
#}
|
||||
[DEFAULT]
|
||||
debug = {{ debug }}
|
||||
use_syslog = True
|
||||
syslog_log_facility = LOG_LOCAL{{ administrative_log_facility }}
|
||||
|
||||
[haproxy_amphora]
|
||||
base_cert_dir = {{ base_cert_dir }}
|
||||
|
@ -24,6 +26,8 @@ haproxy_cmd = {{ haproxy_cmd }}
|
|||
respawn_count = {{ respawn_count }}
|
||||
respawn_interval = {{ respawn_interval }}
|
||||
use_upstart = {{ use_upstart }}
|
||||
user_log_facility = {{ user_log_facility }}
|
||||
administrative_log_facility = {{ administrative_log_facility }}
|
||||
|
||||
[health_manager]
|
||||
controller_ip_port_list = {{ controller_list|join(', ') }}
|
||||
|
|
|
@ -80,5 +80,10 @@ def main():
|
|||
'accesslog': '/var/log/amphora-agent.log',
|
||||
'errorlog': '/var/log/amphora-agent.log',
|
||||
'loglevel': 'debug',
|
||||
'syslog': True,
|
||||
'syslog_facility': 'local{}'.format(
|
||||
CONF.haproxy_amphora.administrative_log_facility),
|
||||
'syslog_addr': 'unix://dev/log',
|
||||
|
||||
}
|
||||
AmphoraAgent(server_instance.app, options).run()
|
||||
|
|
|
@ -253,6 +253,16 @@ haproxy_amphora_opts = [
|
|||
cfg.StrOpt('haproxy_stick_size', default='10k',
|
||||
help=_('Size of the HAProxy stick table. Accepts k, m, g '
|
||||
'suffixes. Example: 10k')),
|
||||
cfg.IntOpt('user_log_facility', default=0, min=0, max=7,
|
||||
help=_('LOG_LOCAL facility number to use for user traffic '
|
||||
'logs.')),
|
||||
cfg.IntOpt('administrative_log_facility', default=1, min=0, max=7,
|
||||
help=_('LOG_LOCAL facility number to use for amphora processes '
|
||||
'logs.')),
|
||||
cfg.StrOpt('user_log_format',
|
||||
default='{project_id} {lb_id} %f %ci %cp %t %{+Q}r %ST %B %U '
|
||||
'%[ssl_c_verify] %{+Q}[ssl_c_s_dn] %b %s %Tt %tsc',
|
||||
help=_('Log format string for user flow logging.')),
|
||||
|
||||
# REST server
|
||||
cfg.IPOpt('bind_host', default='::', # nosec
|
||||
|
|
|
@ -123,6 +123,13 @@ class JinjaTemplater(object):
|
|||
JINJA_ENV.filters['hash_amp_id'] = octavia_utils.base64_sha1_string
|
||||
return JINJA_ENV.get_template(os.path.basename(self.haproxy_template))
|
||||
|
||||
def _format_log_string(self, load_balancer):
|
||||
log_format = CONF.haproxy_amphora.user_log_format.replace(
|
||||
'{project_id}', load_balancer.project_id)
|
||||
log_format = log_format.replace('{lb_id}', load_balancer.id)
|
||||
log_format = log_format.replace(' ', '\ ')
|
||||
return log_format
|
||||
|
||||
def render_loadbalancer_obj(self, host_amphora, listener,
|
||||
tls_cert=None, socket_path=None,
|
||||
feature_compatibility=None,
|
||||
|
@ -154,6 +161,9 @@ class JinjaTemplater(object):
|
|||
'stats_sock': socket_path,
|
||||
'log_http': self.log_http,
|
||||
'log_server': self.log_server,
|
||||
'administrative_log_facility':
|
||||
CONF.haproxy_amphora.administrative_log_facility,
|
||||
'user_log_facility': CONF.haproxy_amphora.user_log_facility,
|
||||
'connection_logging': self.connection_logging},
|
||||
constants=constants)
|
||||
|
||||
|
@ -166,7 +176,7 @@ class JinjaTemplater(object):
|
|||
be processed by the templating system
|
||||
"""
|
||||
t_listener = self._transform_listener(
|
||||
listener, tls_cert, feature_compatibility,
|
||||
listener, tls_cert, feature_compatibility, loadbalancer,
|
||||
client_ca_filename=client_ca_filename, client_crl=client_crl,
|
||||
pool_tls_certs=pool_tls_certs)
|
||||
ret_value = {
|
||||
|
@ -208,8 +218,8 @@ class JinjaTemplater(object):
|
|||
}
|
||||
|
||||
def _transform_listener(self, listener, tls_cert, feature_compatibility,
|
||||
client_ca_filename=None, client_crl=None,
|
||||
pool_tls_certs=None):
|
||||
loadbalancer, client_ca_filename=None,
|
||||
client_crl=None, pool_tls_certs=None):
|
||||
"""Transforms a listener into an object that will
|
||||
|
||||
be processed by the templating system
|
||||
|
@ -224,6 +234,7 @@ class JinjaTemplater(object):
|
|||
'topology': listener.load_balancer.topology,
|
||||
'amphorae': listener.load_balancer.amphorae,
|
||||
'enabled': listener.enabled,
|
||||
'user_log_format': self._format_log_string(loadbalancer),
|
||||
'timeout_client_data': (
|
||||
listener.timeout_client_data or
|
||||
CONF.haproxy_amphora.timeout_client_data),
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
global
|
||||
daemon
|
||||
user nobody
|
||||
log {{ log_http | default('/dev/log', true)}} local0
|
||||
log {{ log_server | default('/dev/log', true)}} local1 notice
|
||||
log {{ log_http | default('/dev/log', true)}} local{{ user_log_facility }}
|
||||
log {{ log_server | default('/dev/log', true)}} local{{ administrative_log_facility }} notice
|
||||
stats socket {{ sock_path }} mode 0666 level user
|
||||
{% if loadbalancer.global_connection_limit is defined %}
|
||||
maxconn {{ loadbalancer.global_connection_limit }}
|
||||
|
|
|
@ -139,14 +139,7 @@ bind {{ lb_vip_address }}:{{ listener.protocol_port }} {{
|
|||
|
||||
{% macro frontend_macro(constants, listener, lb_vip_address) %}
|
||||
frontend {{ listener.id }}
|
||||
{% if (listener.protocol.lower() ==
|
||||
constants.PROTOCOL_TERMINATED_HTTPS.lower() or
|
||||
listener.protocol.lower() ==
|
||||
constants.PROTOCOL_HTTP.lower()) %}
|
||||
option httplog
|
||||
{% else %}
|
||||
option tcplog
|
||||
{% endif %}
|
||||
log-format {{ listener.user_log_format }}
|
||||
{% if listener.connection_limit is defined %}
|
||||
maxconn {{ listener.connection_limit }}
|
||||
{% endif %}
|
||||
|
|
|
@ -41,7 +41,9 @@ class HAProxyCompatTestCase(base.TestCase):
|
|||
" option splice-response\n"
|
||||
" option http-keep-alive\n\n\n\n"
|
||||
"frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ %tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:80\n"
|
||||
" mode http\n"
|
||||
|
|
|
@ -57,8 +57,13 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
# Test execution order could influence this with the test below
|
||||
self.conf.config(group='amphora_agent',
|
||||
agent_server_network_file=None)
|
||||
self.conf.config(group="haproxy_amphora",
|
||||
administrative_log_facility=1)
|
||||
self.conf.config(group="haproxy_amphora", user_log_facility=0)
|
||||
expected_config = ('\n[DEFAULT]\n'
|
||||
'debug = False\n\n'
|
||||
'debug = False\n'
|
||||
'use_syslog = True\n'
|
||||
'syslog_log_facility = LOG_LOCAL1\n\n'
|
||||
'[haproxy_amphora]\n'
|
||||
'base_cert_dir = /var/lib/octavia/certs\n'
|
||||
'base_path = /var/lib/octavia\n'
|
||||
|
@ -67,7 +72,9 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
'haproxy_cmd = /usr/sbin/haproxy\n'
|
||||
'respawn_count = 2\n'
|
||||
'respawn_interval = 2\n'
|
||||
'use_upstart = True\n\n'
|
||||
'use_upstart = True\n'
|
||||
'user_log_facility = 0\n'
|
||||
'administrative_log_facility = 1\n\n'
|
||||
'[health_manager]\n'
|
||||
'controller_ip_port_list = 192.0.2.10:5555\n'
|
||||
'heartbeat_interval = 10\n'
|
||||
|
@ -94,8 +101,13 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
self.conf.config(group="amphora_agent",
|
||||
agent_server_network_file='/etc/network/interfaces')
|
||||
self.conf.config(group="haproxy_amphora", use_upstart='False')
|
||||
self.conf.config(group="haproxy_amphora",
|
||||
administrative_log_facility=1)
|
||||
self.conf.config(group="haproxy_amphora", user_log_facility=0)
|
||||
expected_config = ('\n[DEFAULT]\n'
|
||||
'debug = False\n\n'
|
||||
'debug = False\n'
|
||||
'use_syslog = True\n'
|
||||
'syslog_log_facility = LOG_LOCAL1\n\n'
|
||||
'[haproxy_amphora]\n'
|
||||
'base_cert_dir = /var/lib/octavia/certs\n'
|
||||
'base_path = /var/lib/octavia\n'
|
||||
|
@ -104,7 +116,9 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
'haproxy_cmd = /usr/sbin/haproxy\n'
|
||||
'respawn_count = 2\n'
|
||||
'respawn_interval = 2\n'
|
||||
'use_upstart = False\n\n'
|
||||
'use_upstart = False\n'
|
||||
'user_log_facility = 0\n'
|
||||
'administrative_log_facility = 1\n\n'
|
||||
'[health_manager]\n'
|
||||
'controller_ip_port_list = 192.0.2.10:5555\n'
|
||||
'heartbeat_interval = 10\n'
|
||||
|
@ -135,8 +149,13 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
agent_server_network_file=None)
|
||||
self.conf.config(group="amphora_agent",
|
||||
amphora_udp_driver='new_udp_driver')
|
||||
self.conf.config(group="haproxy_amphora",
|
||||
administrative_log_facility=1)
|
||||
self.conf.config(group="haproxy_amphora", user_log_facility=0)
|
||||
expected_config = ('\n[DEFAULT]\n'
|
||||
'debug = False\n\n'
|
||||
'debug = False\n'
|
||||
'use_syslog = True\n'
|
||||
'syslog_log_facility = LOG_LOCAL1\n\n'
|
||||
'[haproxy_amphora]\n'
|
||||
'base_cert_dir = /var/lib/octavia/certs\n'
|
||||
'base_path = /var/lib/octavia\n'
|
||||
|
@ -145,7 +164,9 @@ class AgentJinjaTestCase(base.TestCase):
|
|||
'haproxy_cmd = /usr/sbin/haproxy\n'
|
||||
'respawn_count = 2\n'
|
||||
'respawn_interval = 2\n'
|
||||
'use_upstart = True\n\n'
|
||||
'use_upstart = True\n'
|
||||
'user_log_facility = 0\n'
|
||||
'administrative_log_facility = 1\n\n'
|
||||
'[health_manager]\n'
|
||||
'controller_ip_port_list = 192.0.2.10:5555\n'
|
||||
'heartbeat_interval = 10\n'
|
||||
|
|
|
@ -35,7 +35,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_tls(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" redirect scheme https if !{{ ssl_fc }}\n"
|
||||
" bind 10.0.0.2:443 "
|
||||
|
@ -86,7 +89,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_tls_no_sni(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" redirect scheme https if !{{ ssl_fc }}\n"
|
||||
" bind 10.0.0.2:443 "
|
||||
|
@ -185,7 +191,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_custom_timeouts(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:80\n"
|
||||
" mode http\n"
|
||||
|
@ -221,7 +230,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_null_timeouts(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:80\n"
|
||||
" mode http\n"
|
||||
|
@ -285,7 +297,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_https_real_monitor(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -318,7 +333,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_https_hello_monitor(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -420,7 +438,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_no_monitor_https(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -476,7 +497,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_no_persistence_https(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -574,7 +598,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_unlimited_connections(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -602,7 +629,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_limited_connections(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option tcplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{+Q}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{+Q}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn 2014\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
" mode tcp\n"
|
||||
|
@ -630,7 +660,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_render_template_l7policies(self):
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:80\n"
|
||||
" mode http\n"
|
||||
|
@ -896,12 +929,14 @@ class TestHaproxyCfg(base.TestCase):
|
|||
|
||||
def test_transform_listener(self):
|
||||
in_listener = sample_configs.sample_listener_tuple()
|
||||
ret = self.jinja_cfg._transform_listener(in_listener, None, {})
|
||||
ret = self.jinja_cfg._transform_listener(in_listener, None, {},
|
||||
in_listener.load_balancer)
|
||||
self.assertEqual(sample_configs.RET_LISTENER, ret)
|
||||
|
||||
def test_transform_listener_with_l7(self):
|
||||
in_listener = sample_configs.sample_listener_tuple(l7=True)
|
||||
ret = self.jinja_cfg._transform_listener(in_listener, None, {})
|
||||
ret = self.jinja_cfg._transform_listener(in_listener, None, {},
|
||||
in_listener.load_balancer)
|
||||
self.assertEqual(sample_configs.RET_LISTENER_L7, ret)
|
||||
|
||||
def test_transform_loadbalancer(self):
|
||||
|
@ -1069,7 +1104,10 @@ class TestHaproxyCfg(base.TestCase):
|
|||
base_amp_path='/var/lib/octavia',
|
||||
base_crt_dir='/var/lib/octavia/certs')
|
||||
fe = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{+Q}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{+Q}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn 1000000\n"
|
||||
" redirect scheme https if !{ ssl_fc }\n"
|
||||
" bind 10.0.0.2:443\n"
|
||||
|
|
|
@ -295,6 +295,9 @@ RET_LISTENER = {
|
|||
'amphorae': [sample_amphora_tuple()],
|
||||
'peer_port': 1024,
|
||||
'topology': 'SINGLE',
|
||||
'user_log_format': '12345\\ sample_loadbalancer_id_1\\ %f\\ %ci\\ %cp\\ '
|
||||
'%t\\ %{+Q}r\\ %ST\\ %B\\ %U\\ %[ssl_c_verify]\\ '
|
||||
'%{+Q}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ %tsc',
|
||||
'pools': [RET_POOL_1],
|
||||
'l7policies': [],
|
||||
'enabled': True,
|
||||
|
@ -315,6 +318,9 @@ RET_LISTENER_L7 = {
|
|||
'amphorae': [sample_amphora_tuple()],
|
||||
'peer_port': 1024,
|
||||
'topology': 'SINGLE',
|
||||
'user_log_format': '12345\\ sample_loadbalancer_id_1\\ %f\\ %ci\\ %cp\\ '
|
||||
'%t\\ %{+Q}r\\ %ST\\ %B\\ %U\\ %[ssl_c_verify]\\ '
|
||||
'%{+Q}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ %tsc',
|
||||
'pools': [RET_POOL_1, RET_POOL_2],
|
||||
'l7policies': [RET_L7POLICY_1, RET_L7POLICY_2, RET_L7POLICY_3,
|
||||
RET_L7POLICY_4, RET_L7POLICY_5, RET_L7POLICY_6,
|
||||
|
@ -504,7 +510,7 @@ def sample_listener_loadbalancer_tuple(proto=None, topology=None,
|
|||
topology = constants.TOPOLOGY_SINGLE
|
||||
in_lb = collections.namedtuple(
|
||||
'load_balancer', 'id, name, protocol, vip, amphorae, topology, '
|
||||
'enabled')
|
||||
'enabled, project_id')
|
||||
return in_lb(
|
||||
id='sample_loadbalancer_id_1',
|
||||
name='test-lb',
|
||||
|
@ -518,7 +524,8 @@ def sample_listener_loadbalancer_tuple(proto=None, topology=None,
|
|||
role=constants.ROLE_BACKUP)]
|
||||
if more_amp else [sample_amphora_tuple()],
|
||||
topology=topology,
|
||||
enabled=enabled
|
||||
enabled=enabled,
|
||||
project_id='12345'
|
||||
)
|
||||
|
||||
|
||||
|
@ -991,7 +998,10 @@ def sample_base_expected_config(frontend=None, backend=None,
|
|||
peers=None, global_opts=None, defaults=None):
|
||||
if frontend is None:
|
||||
frontend = ("frontend sample_listener_id_1\n"
|
||||
" option httplog\n"
|
||||
" log-format 12345\\ sample_loadbalancer_id_1\\ %f\\ "
|
||||
"%ci\\ %cp\\ %t\\ %{{+Q}}r\\ %ST\\ %B\\ %U\\ "
|
||||
"%[ssl_c_verify]\\ %{{+Q}}[ssl_c_s_dn]\\ %b\\ %s\\ %Tt\\ "
|
||||
"%tsc\n"
|
||||
" maxconn {maxconn}\n"
|
||||
" bind 10.0.0.2:80\n"
|
||||
" mode http\n"
|
||||
|
|
Loading…
Reference in New Issue