Source code for insights.parsers.jboss_version

"""
JBoss version
=============
Provide information about the versions of all running Jboss on a system.
"""
import json

from collections import namedtuple
from insights import Parser, parser
from insights.specs import Specs

# define namedtuple to store the property of version
_VersionNameTuple = namedtuple("_VersionNameTuple", ["file_path", "product", "version", "code_name", "major", "minor", "release"])


def _get_version_tuple(version_line, i_file_path):
    """
    Perform the version line parsing, returning a nametuple of the values of one jboss version
    """
    product, _, version_name = [v.strip() for v in version_line.partition("- Version")]
    if " GA" in version_name:
        # handle Red Hat JBoss Web Server - Version 5.6 GA
        version = version_name.split(' GA')[0]
        code_name = "GA"
        updated_version = version + ".0"
        major, minor, release = updated_version.split('.')[0:3]
    else:
        # add empty code name for Red Hat Data Grid - Version 7.3.0
        version_name = version_name.strip() + "."
        major, minor, release, code_name = version_name.split(".")[0:4]
        version = '.'.join([major, minor, release])

    return _VersionNameTuple(i_file_path, product, version, code_name, int(major), int(minor), int(release))


[docs] @parser(Specs.jboss_version) class JbossVersion(Parser): """ This class is to access to file ``$JBOSS_HOME/version.txt`` Typical content of file ``$JBOSS_HOME/version.txt`` is:: Red Hat JBoss Enterprise Application Platform - Version 6.4.3.GA This class parses the file content and stores data in the dict ``self.parsed``. The version info can also be got via ``obj.major`` and ``obj.minor``, etc. Examples: >>> jboss_version.file_path '/home/test/jboss/jboss-eap-6.4/version.txt' >>> jboss_version.raw 'Red Hat JBoss Enterprise Application Platform - Version 6.4.3.GA' >>> jboss_version.major 6 >>> jboss_version.minor 4 >>> jboss_version.release 3 >>> jboss_version.version '6.4.3' >>> jboss_version.code_name 'GA' """
[docs] def parse_content(self, content): self.raw = content[0] self._parsed = _get_version_tuple(content[0], self.file_path)
@property def product(self): """string: the version of this running JBoss progress.""" return self._parsed.product @property def version(self): """string: the version of this running JBoss progress.""" return self._parsed.version @property def major(self): """int: the major version of this running JBoss progress.""" return self._parsed.major @property def minor(self): """int: the minor version of this running JBoss progress.""" return self._parsed.minor @property def release(self): """int: release of this running JBoss progress.""" return self._parsed.release @property def code_name(self): """string: code name of this running JBoss progress.""" return self._parsed.code_name
[docs] @parser(Specs.jboss_runtime_versions) class JbossRuntimeVersions(Parser, list): """ This class is to access to file ``data/insights_commands/jboss_versions`` Typical content of file ``data/insights_commands/jboss_versions`` is:: {"/opt/jboss-datagrid-7.3.0-server": "Red Hat Data Grid - Version 7.3.0"} This class parses the file content and stores data in the list. Examples: >>> len(all_jboss_versions) 1 >>> all_jboss_versions[0].major 7 >>> all_jboss_versions[0].minor 3 >>> all_jboss_versions[0].release 0 """
[docs] def parse_content(self, content): jboss_version_dict = json.loads(' '.join(content)) for j_path, version_content in jboss_version_dict.items(): lines = version_content.strip().splitlines() self.append(_get_version_tuple(lines[0], j_path))