Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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
1 change: 1 addition & 0 deletions common/feature_flags.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
OS_EXPOSURE_REPORT_FEATURE = "vulnerability.os_exposure_report"
NEW_NOTIFICATIONS_FEATURE = "vulnerability.new_notifications"
TIMING_LOG_FEATURE = "vulnerability.timing_log"
RELEASEVER_LOG_FEATURE = "vulnerability.releasever_log"


class UnleashClientProxy:
Expand Down
22 changes: 22 additions & 0 deletions listener/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,28 @@
LOGGER = get_logger(__name__)


def adapt_releasever(releasever: str | None) -> str | None:
"""
Drop RHEL <= 7 numeric releasevers.
This suppresses user ``subscription-manager release --set=...``
setup, which is intended in this case
to match xServer yum repos for x.y releasever.
This can be removed once RHEL 7 reaches end of life.
"""
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
if not releasever:
return releasever
dot = releasever.find(".")
if dot <= 0:
return releasever
try:
major = int(releasever[:dot])
except ValueError:
return releasever
if major > 7:
return releasever
return None


class ImportStatus(flags.Flags):
"""Import to database status."""

Expand Down
12 changes: 11 additions & 1 deletion listener/inventory_processor.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
from common.constants import SATELLITE_TAG_KEY
from common.constants import SATELLITE_TAG_NAMESPACE
from common.constants import HostType
from common.feature_flags import RELEASEVER_LOG_FEATURE
from common.feature_flags import UNLEASH
from common.logging import get_logger
from common.mqueue import MQWriter
from common.mqueue import Partitioners
Expand All @@ -38,6 +40,7 @@
from .common import ImportStatus
from .common import InventoryMsg
from .common import InventoryMsgType
from .common import adapt_releasever
from .common import reporter_allowed
from .processor import BaseProcessor

Expand Down Expand Up @@ -150,7 +153,14 @@ def _parse_system_data(self, msg: InventoryMsg) -> (str, list):
if installed_packages:
basearch = system_profile.get("basearch") or system_profile.get("arch")
rhsm_ver = system_profile.get("rhsm", {}).get("version")
releasever = rhsm_ver or system_profile.get("releasever")
releasever = adapt_releasever(rhsm_ver or system_profile.get("releasever"))
if UNLEASH.is_enabled(RELEASEVER_LOG_FEATURE):
LOGGER.info(
"releasever sources: rhsm_ver=%s, sp_releasever=%s, result_releasever=%s",
rhsm_ver,
system_profile.get("releasever"),
releasever,
Comment thread
sourcery-ai[bot] marked this conversation as resolved.
)

repo_list, repo_paths = self._format_repo_list(system_profile.get("yum_repos", ()), basearch=basearch, releasever=releasever)
modules_list = [{"module_name": m["name"], "module_stream": m["stream"]} for m in system_profile.get("dnf_modules", [])]
Expand Down
2 changes: 2 additions & 0 deletions listener/listener.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from psycopg_pool import AsyncConnectionPool

from common.database_handler import setup_async_db_pool
from common.feature_flags import initialize_unleash
from common.logging import get_logger
from common.logging import init_logging
from common.mqueue import MQReader
Expand Down Expand Up @@ -250,6 +251,7 @@ async def run(self):
def main():
"""Main"""
init_logging()
initialize_unleash()
loop = asyncio.new_event_loop()

loop.run_until_complete(a_ensure_minimal_schema_version())
Expand Down
13 changes: 13 additions & 0 deletions tests/listener_tests/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,16 @@ def test_reporter_not_allowed(self):
msg_dict = {"input": {"host": {"reporter": "invalid"}}}
res = common.reporter_allowed(msg_dict)
assert res is False

def test_adapt_releasever(self):
"""RHEL <= 7 numeric -> None and stream labels and RHEL 8+ unchanged"""
# numeric RHEL <= - None (omit from VMaaS request)
assert common.adapt_releasever("7.9") is None
assert common.adapt_releasever("6.9") is None
# already a stream label - pass through
assert common.adapt_releasever("7Server") == "7Server"
assert common.adapt_releasever("7Client") == "7Client"
# no dot / RHEL 8+ / None - unchanged
assert common.adapt_releasever("7") == "7"
assert common.adapt_releasever("8.0") == "8.0"
assert common.adapt_releasever(None) is None
Loading