Source code for insights.parsers.haproxy_cfg

"""
Haproxy configuration files
===========================

Parsers provided by this module are:

HaproxyCfg - file ``/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg`` or ``/etc/haproxy/haproxy.cfg``
---------------------------------------------------------------------------------------------------------------------------
HaproxyCfgScl - file ``/etc/opt/rh/rh-haproxy18/haproxy/haproxy.cfg``
---------------------------------------------------------------------
"""

from insights.core import Parser
from insights.core.plugins import parser
from insights.specs import Specs


[docs] class HaproxyFile(Parser): """ Base class for ``HaproxyCfg`` and ``HaproxyCfgScl`` classes. Attributes: data (dict): Dictionary of all parsed sections. lines (list): List of all non-commented lines. Content of the `haproxy.cfg` file looks like:: global daemon group haproxy log /dev/log local0 user haproxy maxconn 20480 pidfile /var/run/haproxy.pid defaults retries 3 maxconn 4096 log global timeout http-request 10s timeout queue 1m timeout connect 10s Examples: >>> type(haproxy) <class 'insights.parsers.haproxy_cfg.HaproxyFile'> >>> haproxy.data['global'] {'daemon': '', 'group': 'haproxy', 'log': '/dev/log local0', 'user': 'haproxy', 'maxconn': '20480', 'pidfile': '/var/run/haproxy.pid'} >>> haproxy.data['global']['group'] 'haproxy' >>> 'global' in haproxy.data True >>> 'user' in haproxy.data.get('global') True >>> haproxy.data['defaults'] {'retries': '3', 'maxconn': '4096', 'log': 'global', 'timeout': ['http-request 10s', 'queue 1m', 'connect 10s']} """ SECTION_NAMES = ("global", "defaults", "frontend", "backend", "listen") def __init__(self, context): self.data = {} self.lines = [] super(HaproxyFile, self).__init__(context)
[docs] def parse_content(self, content): section_dict = {} for line in content: line = line.strip() if line.startswith("#") or line == "": continue self.lines.append(line) split_items = line.split(None, 1) # Create a new section, e.g. global: {} if split_items[0] in self.SECTION_NAMES: section_dict = {} section = split_items[0] if len(split_items) == 1 else split_items[0] + " " + split_items[1] self.data.update({section: section_dict}) # Handle attributes inside section else: if len(split_items) == 1: section_dict[line] = "" else: key = split_items[0] value = split_items[1] if key in section_dict: # Convert value into list in case of duplicate key items if not isinstance(section_dict[key], list): section_dict[key] = [section_dict[key]] section_dict[key].append(value) else: section_dict[key] = value
[docs] @parser(Specs.haproxy_cfg) class HaproxyCfg(HaproxyFile): """ Class to parse file ``/var/lib/config-data/puppet-generated/haproxy/etc/haproxy/haproxy.cfg`` or ``haproxy.cfg``. """ pass
[docs] @parser(Specs.haproxy_cfg_scl) class HaproxyCfgScl(HaproxyFile): """ Class to parse file ``/etc/opt/rh/rh-haproxy18/haproxy/haproxy.cfg``. """ pass