Skip to content

Commit

Permalink
feat: New ceph version and enhance (#3422)
Browse files Browse the repository at this point in the history
Signed-off-by: Xiangce Liu <[email protected]>
(cherry picked from commit 7c72963)
  • Loading branch information
xiangce committed May 26, 2022
1 parent 8044364 commit 0e05ff2
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 44 deletions.
35 changes: 17 additions & 18 deletions insights/combiners/ceph_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
"""

from insights import combiner
from insights.parsers.ceph_version import CephVersion as CephV
from insights.parsers.ceph_version import (CephVersion as CephV,
get_community_version, get_ceph_version)
from insights.parsers.ceph_insights import CephInsights
from insights.parsers.ceph_cmd_json_parsing import CephReport
from insights.core.context import Context


@combiner([CephV, CephInsights, CephReport])
Expand Down Expand Up @@ -62,20 +62,19 @@ def __init__(self, cv, ci, cr):
self.downstream_release = cv.downstream_release
self.upstream_version = cv.upstream_version
elif ci:
context = Context(content=ci.data["version"]["full"].strip().splitlines())
cv = CephV(context)
self.version = cv.version
self.major = cv.major
self.minor = cv.minor
self.is_els = cv.is_els
self.downstream_release = cv.downstream_release
self.upstream_version = cv.upstream_version
community_full = get_community_version(ci.data["version"]["full"].strip())
cv = get_ceph_version(community_full)
self.version = cv.get('version')
self.major = cv.get('major')
self.minor = cv.get('minor')
self.is_els = cv.get('els', False)
self.downstream_release = cv.get('downstream_release')
self.upstream_version = cv.get('upstream_version')
else:
context = Context(content=cr["version"].strip().splitlines())
cv = CephV(context)
self.version = cv.version
self.major = cv.major
self.minor = cv.minor
self.is_els = cv.is_els
self.downstream_release = cv.downstream_release
self.upstream_version = cv.upstream_version
cv = get_ceph_version(cr["version"].strip())
self.version = cv.get('version')
self.major = cv.get('major')
self.minor = cv.get('minor')
self.is_els = cv.get('els', False)
self.downstream_release = cv.get('downstream_release')
self.upstream_version = cv.get('upstream_version')
69 changes: 43 additions & 26 deletions insights/parsers/ceph_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@
"""

import re
from insights import parser, CommandParser
from insights.parsers import SkipException
from insights.specs import Specs
from insights.util import deprecated
from insights.util import rsplit

# TODO: the following metrics need update timely per:
# - https://access.redhat.com/solutions/2045583
Expand Down Expand Up @@ -70,6 +69,8 @@
"12.2.12-115": {'version': "3.3.5", 'major': '3', 'minor': '3', 'downstream_release': '0'},
"12.2.12-124": {'version': "3.3.6", 'major': '3', 'minor': '3', 'downstream_release': '0'},
"12.2.12-127": {'version': "3.3.6", 'major': '3', 'minor': '3', 'downstream_release': '0'},
"12.2.12-139": {'version': "3.3.7", 'major': '3', 'minor': '3', 'downstream_release': '0', 'els': True},
"12.2.12-141": {'version': "3.3.8", 'major': '3', 'minor': '3', 'downstream_release': '0', 'els': True},
"14.2.4-125": {'version': "4.0", 'major': '4', 'minor': '0', 'downstream_release': '0'},
"14.2.4-51": {'version': "4.0", 'major': '4', 'minor': '0', 'downstream_release': '0'},
"14.2.8-50": {'version': "4.1", 'major': '4', 'minor': '1', 'downstream_release': '0'},
Expand All @@ -79,6 +80,20 @@
"14.2.8-91": {'version': "4.1.1", 'major': '4', 'minor': '1', 'downstream_release': 'async 2'},
"14.2.8-111": {'version': "4.1.2", 'major': '4', 'minor': '1', 'downstream_release': '0'},
"14.2.8-115": {'version': "4.1.3", 'major': '4', 'minor': '1', 'downstream_release': '0'},
"14.2.11-95": {'version': "4.2", 'major': '4', 'minor': '2', 'downstream_release': '0'},
"14.2.11-139": {'version': "4.2", 'major': '4', 'minor': '2', 'downstream_release': 'async'},
"14.2.11-147": {'version': "4.2.1", 'major': '4', 'minor': '2', 'downstream_release': '0'},
"14.2.11-181": {'version': "4.2.2", 'major': '4', 'minor': '2', 'downstream_release': '0'},
"14.2.11-184": {'version': "4.2.2", 'major': '4', 'minor': '2', 'downstream_release': 'async'},
"14.2.11-199": {'version': "4.2.3", 'major': '4', 'minor': '2', 'downstream_release': '0'},
"14.2.11-208": {'version': "4.2.4", 'major': '4', 'minor': '2', 'downstream_release': '0'},
"14.2.22-110": {'version': "4.3", 'major': '4', 'minor': '3', 'downstream_release': '0'},
"16.2.0-117": {'version': "5.0", 'major': '5', 'minor': '0', 'downstream_release': '0'},
"16.2.0-143": {'version': "5.0.1", 'major': '5', 'minor': '0', 'downstream_release': '0'},
"16.2.0-146": {'version': "5.0.3", 'major': '5', 'minor': '0', 'downstream_release': '0'},
"16.2.0-152": {'version': "5.0.4", 'major': '5', 'minor': '0', 'downstream_release': '0'},
"16.2.7-98": {'version': "5.1", 'major': '5', 'minor': '1', 'downstream_release': '0'},
"16.2.7-112": {'version': "5.1.1", 'major': '5', 'minor': '1', 'downstream_release': '0'},
}


Expand Down Expand Up @@ -113,39 +128,41 @@ class CephVersion(CommandParser):

def parse_content(self, content):
# Parse Ceph Version Content and get Release, Major, Minor number
if not content:
if not content or len(content) != 1:
raise SkipException("Empty Ceph Version Line", content)

ceph_version_line = content[-1]
# re search pattern
pattern_community = r'((\d{1,2})\.(\d{1,2})\.((\d{1,2})|x))((\-(\d+)))'
community_version_mo = re.search(pattern_community, str(ceph_version_line), 0)
if not community_version_mo:
raise SkipException("Wrong Format Ceph Version", content)

community_version = community_version_mo.group(0)
release_data = community_to_release_map.get(community_version, None)
if not release_data:
raise SkipException("No Mapping Release Version. Ceph Release Number is Null", content)
community_version = get_community_version(content[0])
release_data = get_ceph_version(community_version)

self.version = release_data['version']
self.major = release_data['major']
self.minor = release_data['minor']
self.is_els = release_data.get('els', False)
self.downstream_release = release_data['downstream_release']
self.upstream_version = {
"release": int(community_version_mo.group(2)),
"major": int(community_version_mo.group(3)),
"minor": int(community_version_mo.group(4))
}
self.upstream_version = release_data['upstream_version']


class CephVersionError(Exception):
def get_community_version(version_full):
"""
.. note::
This class is deprecated, please use :py:class:`insights.parsers.SkipException` instead.
Returns the community version part from the output of ``ceph -v``
"""
if any(item not in version_full for item in ['ceph version', '.', '-']):
raise SkipException("Wrong Format Ceph Version", version_full)

return version_full.split()[2]

def __init__(self, *args, **kwargs):
deprecated(CephVersionError, "Use SkipException instead.")
super(CephVersionError, self).__init__(*args, **kwargs)

def get_ceph_version(community_full):
"""
Get the release version from the mapping metrics and generate the
`upstream_version`.
"""
community_version, _ = rsplit(community_full, '.')
release_data = community_to_release_map.get(community_version, None)
if not release_data:
raise SkipException("No Mapping Release Version", community_version)
release_data['upstream_version'] = dict(
zip(
['release', 'major', 'minor'],
[int(_i) for _i in community_version.split('-')[0].split('.')])
)
return release_data
3 changes: 3 additions & 0 deletions insights/tests/parsers/test_ceph_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,6 @@ def test_ceph_version():
assert ceph_version_els.minor == "5"
assert ceph_version_els.is_els
assert ceph_version_els.downstream_release == "5"
assert ceph_version_els.upstream_version['release'] == 10
assert ceph_version_els.upstream_version['major'] == 2
assert ceph_version_els.upstream_version['minor'] == 10

0 comments on commit 0e05ff2

Please sign in to comment.