Skip to content
This repository has been archived by the owner on Mar 28, 2023. It is now read-only.

Commit

Permalink
Refs #21 Modified Regex pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
patilsuraj767 committed Dec 15, 2020
1 parent b5b4cf2 commit 56df138
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 18 deletions.
34 changes: 21 additions & 13 deletions yupana/processor/report_slice_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@
RETRY_TIME = int(RETRY_TIME)
UPLOAD_TOPIC = 'platform.inventory.host-ingress' # placeholder topic
OS_RELEASE_PATTERN = re.compile(
r'(?P<name>[a-zA-Z\s]*)?\s*(?P<version>[\d\.]*)\s*(\((?P<code>\S*)\))?'
r'(?P<name>[a-zA-Z\s]*)?\s*((?P<major>\d*)(\.?(?P<minor>\d*)(\.?(?P<patch>\d*))?)?)\s*'
r'(\((?P<code>\S*)\))?'
)
PROCESSOR_NAME = 'report_slice_processor'

Expand Down Expand Up @@ -235,8 +236,7 @@ def _match_regex_and_find_version(self, os_release):
return None

match_result = OS_RELEASE_PATTERN.match(source_os_release)
parsed_info = match_result.groupdict()
os_version = parsed_info['version'].strip()
os_version = match_result.groupdict()
LOG.info(
format_message(
self.prefix,
Expand All @@ -254,7 +254,7 @@ def _transform_os_release(self, host: dict):
return host

os_version = self._match_regex_and_find_version(os_release)
if not os_version:
if not os_version or not os_version['major']:
del host['system_profile']['os_release']
LOG.info(format_message(
self.prefix, "Removed empty os_release fact for host with FQDN '%s'"
Expand All @@ -263,25 +263,33 @@ def _transform_os_release(self, host: dict):
report_platform_id=self.report_platform_id))
return host

if os_release == os_version:
return host
if os_version['minor']:
os_version['version'] = f"{os_version['major'].strip()}.{os_version['minor'].strip()}"
else:
os_version['version'] = os_version['major'].strip()

host['system_profile']['os_release'] = os_version
version_split = os_version.split('.', 1)
host['system_profile']['os_release'] = os_version['version'].strip()
host['system_profile']['operating_system'] = {}
host['system_profile']['operating_system']['major'] = version_split[0]
host['system_profile']['operating_system']['major'] = os_version['major'].strip()

if len(version_split) > 1:
host['system_profile']['operating_system']['minor'] = version_split[1]
if os_version['minor']:
host['system_profile']['operating_system']['minor'] = os_version['minor'].strip()
else:
host['system_profile']['operating_system']['minor'] = '0'

host['system_profile']['operating_system']['name'] = 'RHEL'
if 'Red Hat' in os_version['name']:
host['system_profile']['operating_system']['name'] = 'RHEL'
else:
host['system_profile']['operating_system']['name'] = os_version['name'].strip()

if os_release == os_version['version'].strip():
return host

LOG.info(
format_message(
self.prefix,
"os_release transformed '%s' -> '%s'"
% (os_release, os_version),
% (os_release, os_version['version']),
account_number=self.account_number,
report_platform_id=self.report_platform_id)
)
Expand Down
15 changes: 10 additions & 5 deletions yupana/processor/tests_report_slice_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -618,7 +618,10 @@ def test_do_not_transform_when_only_version(self):
"""Test do not transform os_release when only version."""
host = {'system_profile': {'os_release': '7'}}
host = self.processor._transform_single_host(host)
self.assertEqual(host, {'system_profile': {'os_release': '7'}})
self.assertEqual(host,
{'system_profile': {'os_release': '7',
'operating_system': {'major': '7', 'minor': '0',
'name': ''}}})

def test_remove_os_release_when_no_version(self):
"""Test remove host os_release."""
Expand Down Expand Up @@ -651,7 +654,7 @@ def test_transform_os_release_when_non_rhel_os(self):
host = {'system_profile': {'os_release': 'CentOS Linux 7 (Core)'}}
host = self.processor._transform_single_host(host)
self.assertEqual(host, {'system_profile': {'operating_system': {
'major': '7', 'minor': '0', 'name': 'RHEL'}, 'os_release': '7'}})
'major': '7', 'minor': '0', 'name': 'CentOS Linux'}, 'os_release': '7'}})

def test_transform_os_fields(self):
"""Test transform os fields."""
Expand All @@ -662,7 +665,8 @@ def test_transform_os_fields(self):
self.assertEqual(
host,
{'system_profile': {
'os_release': '7', 'os_kernel_version': '3.10.0'}})
'os_release': '7', 'os_kernel_version': '3.10.0',
'operating_system': {'major': '7', 'minor': '0', 'name': ''}}})

def test_do_not_tranform_os_fields(self):
"""Test do not transform os fields when already in format."""
Expand All @@ -672,7 +676,8 @@ def test_do_not_tranform_os_fields(self):
self.assertEqual(
host,
{'system_profile': {
'os_release': '7', 'os_kernel_version': '2.6.32'}}
'os_release': '7', 'os_kernel_version': '2.6.32',
'operating_system': {'major': '7', 'minor': '0', 'name': ''}}}
)

def test_do_not_tranform_os_release_with_number_field(self):
Expand All @@ -691,7 +696,7 @@ def test_match_regex_and_find_version(self):
host_os_version = '7'
os_version = self.processor._match_regex_and_find_version(
host['system_profile']['os_release'])
self.assertEqual(host_os_version, os_version)
self.assertEqual(host_os_version, os_version['major'])

def test_remove_empty_ip_addresses(self):
"""Test remove host ip_addresses."""
Expand Down

0 comments on commit 56df138

Please sign in to comment.