Source code for insights.parsers.libssh_config

"""
Libssh configuration files
==========================

This module provides the ssh options in libssh configuration file

Parsers provided by this module are:

LibsshClientConfig - file ``/etc/libssh/libssh_client.config``
--------------------------------------------------------------

LibsshServerConfig - file ``/etc/libssh/libssh_server.config``
--------------------------------------------------------------
"""
from insights.core import CommandParser
from insights.core.exceptions import SkipComponent
from insights.core.plugins import parser
from insights.parsers import get_active_lines
from insights.specs import Specs


[docs] class LibsshConfig(CommandParser, dict): """ Base class for libssh configuration file. There are many options in the libssh configuration file and all of them are stored in one of the following formations: a) Key [space] Value b) Key = Value There are the keywords used in the configuration file: include hostkey listenaddress port loglevel ciphers macs kexalgorithms match pubkeyacceptedkeytypes hostkeyalgorithms all user group host localaddress localport rdomain address Sample output:: # Parse system-wide crypto configuration file Include /etc/crypto-policies/back-ends/libssh.config # Parse OpenSSH configuration file for consistency Include /etc/ssh/sshd_config .. note:: If there are two or more lines that have the same key, then we store the values in a list. Examples: >>> 'Include' in config True >>> config['Include'] ['/etc/crypto-policies/back-ends/libssh.config', '/etc/ssh/sshd_config'] Raises: SkipComponent: When input content is empty or there is a syntax error. """
[docs] def parse_content(self, content): if not content: raise SkipComponent('No content.') for line in get_active_lines(content): delimiter = None if ' ' in line: delimiter = ' ' if '=' in line: delimiter = '=' try: k, v = [i.strip() for i in line.split(delimiter)] if k not in self: self[k] = v else: _v = self[k] _v = [_v] if not isinstance(_v, list) else _v if v not in _v: _v.append(v) self[k] = _v except ValueError: raise SkipComponent('Syntax error')
[docs] @parser(Specs.libssh_client_config) class LibsshClientConfig(LibsshConfig): """ Parser for accessing the ``/etc/libssh/libssh_client.config`` file. .. note:: Please refer to the super-class :py:class:`insights.parsers.libssh_config:LibsshConfig` for more usage information. """ pass
[docs] @parser(Specs.libssh_server_config) class LibsshServerConfig(LibsshConfig): """ Parser for accessing the ``/etc/libssh/libssh_server.config`` file .. note:: Please refer to the super-class :py:class:`insights.parsers.libssh_config:LibsshConfig` for more usage information. """ pass