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

fixes #21 - add OS major/minor/name to yupana #333

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 19 additions & 22 deletions yupana/processor/report_slice_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,22 +229,28 @@ def _remove_empty_mac_addresses(self, host: dict):
))
return host

def _match_regex_and_find_version(self, os_release):
def _match_regex_and_find_os_details(self, os_release):
"""Match Regex with os_release and return os_version."""
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you update function description as well?

source_os_release = os_release.strip()
if not source_os_release:
return None

match_result = OS_RELEASE_PATTERN.match(source_os_release)
os_version = match_result.groupdict()
os_details = match_result.groupdict()
if os_details['minor']:
os_details['version'] = f"{os_details['major']}.{os_details['minor']}"
else:
os_details['version'] = os_details['major']
os_details['minor'] = '0'

LOG.info(
format_message(
self.prefix,
"os version after parsing os_release: '%s'"
% os_version,
% os_details,
account_number=self.account_number,
report_platform_id=self.report_platform_id))
return os_version
return os_details

def _transform_os_release(self, host: dict):
"""Transform 'system_profile.os_release' label."""
Expand All @@ -253,8 +259,8 @@ def _transform_os_release(self, host: dict):
if not isinstance(os_release, str):
return host

os_version = self._match_regex_and_find_version(os_release)
if not os_version or not os_version['major']:
os_details = self._match_regex_and_find_os_details(os_release)
if not os_details or not os_details['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,33 +269,24 @@ def _transform_os_release(self, host: dict):
report_platform_id=self.report_platform_id))
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'].strip()
host['system_profile']['os_release'] = os_details['version']
host['system_profile']['operating_system'] = {}
host['system_profile']['operating_system']['major'] = os_version['major'].strip()

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']['major'] = os_details['major']
host['system_profile']['operating_system']['minor'] = os_details['minor']

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

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

LOG.info(
format_message(
self.prefix,
"os_release transformed '%s' -> '%s'"
% (os_release, os_version['version']),
% (os_release, os_details['version']),
account_number=self.account_number,
report_platform_id=self.report_platform_id)
)
Expand Down
4 changes: 2 additions & 2 deletions yupana/processor/tests_report_slice_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -689,12 +689,12 @@ def test_do_not_tranform_os_release_with_number_field(self):
{'system_profile': {'os_release': 7}}
)

def test_match_regex_and_find_version(self):
def test_match_regex_and_find_os_details(self):
"""Test match Regex with os_release and return os_version."""
host = {'system_profile': {
'os_release': 'Red Hat Enterprise Linux Server 7'}}
host_os_version = '7'
os_version = self.processor._match_regex_and_find_version(
os_version = self.processor._match_regex_and_find_os_details(
host['system_profile']['os_release'])
self.assertEqual(host_os_version, os_version['major'])

Expand Down