ALBS-901: New service albs-oval-errata-dif #1
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,4 +2,5 @@ venv
|
|||||||
logs
|
logs
|
||||||
results
|
results
|
||||||
*.pyc
|
*.pyc
|
||||||
__pycache__
|
__pycache__
|
||||||
|
.vscode
|
@ -1,4 +0,0 @@
|
|||||||
from albs_oval_erratta_diff.start import start
|
|
||||||
|
|
||||||
|
|
||||||
start()
|
|
7
albs_oval_errata_diff.py
Normal file
7
albs_oval_errata_diff.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
"""
|
||||||
|
albs_oval_errata_diff.py is a service startup script
|
||||||
|
"""
|
||||||
|
from albs_oval_errata_diff.start import start
|
||||||
|
|
||||||
|
|
||||||
|
start()
|
105
albs_oval_errata_diff/config.py
Normal file
105
albs_oval_errata_diff/config.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
'''
|
||||||
|
config.py used for generation service configuration based on input json file
|
||||||
|
'''
|
||||||
|
|
||||||
|
from datetime import datetime, date
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Dict, List
|
||||||
|
from ipaddress import IPv4Address
|
||||||
|
|
||||||
|
from pydantic import BaseModel, validator, Field # pylint: disable=import-error
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
# DEFAULTS
|
||||||
|
DIFF_FILE = Path('/tmp/albs-oval-errata-diff.json')
|
||||||
kzhukov marked this conversation as resolved
|
|||||||
|
DOWNLOAD_DIR = Path('/tmp')
|
||||||
|
LOG_FILE = Path('logs/albs-oval-errata-diff.log')
|
||||||
|
PACKAGES_EXCLUDE = []
|
||||||
|
SA_EXCLUDE = []
|
||||||
|
SERVER_PORT = 3001
|
||||||
|
SERVER_IP = IPv4Address('127.0.0.1')
|
||||||
|
# not checking anything before RHEL-9.0 release
|
||||||
|
NOT_BEFORE = datetime(2022, 5, 18)
|
||||||
|
UPDATE_INTERVAL_MINUTES = 30
|
||||||
|
|
||||||
|
|
||||||
|
class ReleaseUrls(BaseModel):
|
||||||
|
"""
|
||||||
|
ReleaseUrls represents list of RHEL/Alma Oval and Errata URLS for specific OS release
|
||||||
|
"""
|
||||||
|
rhel_oval_url: str = Field(description='URL for RHEL OVAL file')
|
||||||
|
alma_oval_url: str = Field(description='URL for Alma OVAL file')
|
||||||
|
alma_errata_url: str = Field(description='URL for Alma Errata file')
|
||||||
|
|
||||||
|
|
||||||
|
class Config(BaseModel):
|
||||||
|
"""
|
||||||
|
Config represents service configuration
|
||||||
|
"""
|
||||||
|
diff_file: Path = Field(description="file to store diff JSON in",
|
||||||
|
default=DIFF_FILE)
|
||||||
|
download_dir: Path = Field(
|
||||||
|
description='directory to download Oval/Errata files to',
|
||||||
|
default=DOWNLOAD_DIR)
|
||||||
|
log_file: Path = Field(
|
||||||
|
description='file to write logs to',
|
||||||
|
default=LOG_FILE)
|
||||||
|
packages_exclude: List[str] = Field(
|
||||||
|
description='list of RPM package names to exclude from checking',
|
||||||
|
default=PACKAGES_EXCLUDE)
|
||||||
|
releases: Dict[int, ReleaseUrls] = Field(
|
||||||
|
description='list of OS releases with Oval/Errata URLs to check')
|
||||||
|
sa_exclude: List[str] = Field(
|
||||||
|
description='list of Security Advisory IDs (ALSA-2022:5219) to exclude from checking',
|
||||||
|
default=SA_EXCLUDE)
|
||||||
|
server_port: int = Field(
|
||||||
|
description="port that will be used by websever",
|
||||||
|
default=SERVER_PORT)
|
||||||
|
server_ip: IPv4Address = Field(
|
||||||
|
description="IP that will be used by webserver",
|
||||||
|
default=SERVER_IP)
|
||||||
|
not_before: date = Field(
|
||||||
|
description='date to start checking from (YYYY-mm-dd)',
|
||||||
|
default=NOT_BEFORE)
|
||||||
|
update_interval_minutes: int = Field(
|
||||||
|
description='how often service will be running difference checks (in minutes)',
|
||||||
|
default=UPDATE_INTERVAL_MINUTES)
|
||||||
|
|
||||||
|
@validator("releases", pre=True)
|
||||||
|
@classmethod
|
||||||
|
def parse_releases(cls, value) -> Dict[int, ReleaseUrls]:
|
||||||
|
"""
|
||||||
|
parse_release converts releases attribute
|
||||||
|
Dict[int, Dict[str, str]] -> Dict[str, ReleaseUrls]
|
||||||
|
"""
|
||||||
|
result: Dict[int, ReleaseUrls] = {}
|
||||||
|
for release, urls in value.items():
|
||||||
|
result[release] = ReleaseUrls(rhel_oval_url=urls['rhel_oval_url'],
|
||||||
|
alma_oval_url=urls['alma_oval_url'],
|
||||||
|
alma_errata_url=urls['alma_errata_url'])
|
||||||
|
return result
|
||||||
|
|
||||||
|
@validator("not_before", pre=True)
|
||||||
|
@classmethod
|
||||||
|
def str_to_datetime(cls, value) -> datetime:
|
||||||
|
"""
|
||||||
|
str_to_datetime converts string attr str -> datetime
|
||||||
|
"""
|
||||||
|
return datetime.strptime(
|
||||||
|
value,
|
||||||
|
"%Y-%m-%d"
|
||||||
|
).date()
|
||||||
|
|
||||||
|
|
||||||
|
def get_config(yml_path: str) -> Config:
|
||||||
|
"""
|
||||||
|
get_config loads yml file and generates Config instance
|
||||||
|
"""
|
||||||
|
with open(yml_path, 'r', encoding='utf-8') as flr:
|
||||||
|
data = yaml.safe_load(flr)
|
||||||
|
return Config(**data)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(get_config('./config.default.yml'))
|
@ -1,21 +0,0 @@
|
|||||||
from pathlib import Path
|
|
||||||
import datetime
|
|
||||||
|
|
||||||
RELEASES = {
|
|
||||||
8: {'rhel_oval_url': 'https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2',
|
|
||||||
'alma_oval_url': 'https://repo.almalinux.org/security/oval/org.almalinux.alsa-8.xml.bz2',
|
|
||||||
'alma_errata_url': "https://errata.almalinux.org/8/errata.full.json", },
|
|
||||||
9: {'rhel_oval_url': 'https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2',
|
|
||||||
'alma_oval_url': 'https://repo.almalinux.org/security/oval/org.almalinux.alsa-9.xml.bz2',
|
|
||||||
'alma_errata_url': "https://errata.almalinux.org/9/errata.full.json", }
|
|
||||||
}
|
|
||||||
LOG_FILE = Path('logs/albs-oval-errata-diff.log')
|
|
||||||
DIFF_FILE = Path('results/diff.json')
|
|
||||||
DOWNLOAD_DIR = Path('/tmp')
|
|
||||||
# not checking anything before RHEL-9.0 release
|
|
||||||
NOT_BEFORE = datetime.datetime(2022, 5, 18)
|
|
||||||
UPDATE_INTERVAL_MINUTES = 30
|
|
||||||
SERVER_PORT = 3001
|
|
||||||
SERVER_IP = "127.0.0.1"
|
|
||||||
SA_EXCLUDE = []
|
|
||||||
PACKAGES_EXCLUDE = ["dotnet-sdk-3.1-source-built-artifacts"]
|
|
68
config.default.yml
Normal file
68
config.default.yml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
# diff_file
|
||||||
|
# file to store diff JSON in
|
||||||
|
# requred: no
|
||||||
|
# default: /tmp/albs-oval-errata-diff.json
|
||||||
|
diff_file: /tmp/albs-oval-errata-diff.json
|
||||||
|
|
||||||
|
# download_dir
|
||||||
|
# directory to download Oval/Errata files to
|
||||||
|
# required: no
|
||||||
|
# default: /tmp
|
||||||
|
download_dir: /tmp
|
||||||
|
|
||||||
|
# log_file
|
||||||
|
# file to write logs to
|
||||||
|
# requred: no
|
||||||
|
# default: logs/albs-oval-errata-diff.log
|
||||||
|
log_file: logs/albs-oval-errata-diff.log
|
||||||
|
|
||||||
|
# packages_exclude
|
||||||
|
# list of RPM package names to exclude from checking
|
||||||
|
# requred: no
|
||||||
|
# default: []
|
||||||
|
packages_exclude: []
|
||||||
|
|
||||||
|
# releases
|
||||||
|
# list of OS releases with Oval/Errata URLs to check
|
||||||
|
# required: yes
|
||||||
|
# default: N/A
|
||||||
|
releases:
|
||||||
|
8:
|
||||||
|
rhel_oval_url: https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2
|
||||||
|
alma_oval_url: https://repo.almalinux.org/security/oval/org.almalinux.alsa-8.xml.bz2
|
||||||
|
alma_errata_url: https://errata.almalinux.org/8/errata.full.json
|
||||||
|
9:
|
||||||
|
rhel_oval_url: https://www.redhat.com/security/data/oval/v2/RHEL9/rhel-9.oval.xml.bz2'
|
||||||
|
alma_oval_url: https://repo.almalinux.org/security/oval/org.almalinux.alsa-9.xml.bz2'
|
||||||
|
alma_errata_url: https://errata.almalinux.org/9/errata.full.json
|
||||||
|
|
||||||
|
# sa_exclude
|
||||||
|
# list of Security Advisory IDs (ALSA-2022:5219) to exclude from checking
|
||||||
|
# requred: no
|
||||||
|
# default: []
|
||||||
|
sa_exclude: []
|
||||||
|
|
||||||
|
# server_port
|
||||||
|
# port that will be used by websever
|
||||||
|
# required: no
|
||||||
|
# default: 3001
|
||||||
|
server_port: 3001
|
||||||
|
|
||||||
|
# server_ip
|
||||||
|
# IP that will be used by webserver
|
||||||
|
# required: no
|
||||||
|
# default: 127.0.0.1
|
||||||
|
server_ip: 127.0.0.1
|
||||||
|
|
||||||
|
# not_before
|
||||||
|
# date to start checking from (YYYY-mm-dd)
|
||||||
|
# required: no
|
||||||
|
# default: 2022-5-18 (Release of RHEL 9.0)
|
||||||
|
not_before: 2022-5-18
|
||||||
|
|
||||||
|
# update_interval_minutes
|
||||||
|
# how often service will be running difference checks (in minutes)
|
||||||
|
# required: no
|
||||||
|
# default: 30
|
||||||
|
update_interval_minutes: 30
|
Loading…
Reference in New Issue
Block a user
Not sure if we want to add a timestamp or the like to both the diff and log files. As my previous comment, anything against merging this as it is
Not sure what you mean. There are no timestamps in diff file. Only timestamps of report generation date and timestamp of oldest SA we are looking for
Oh okay, I see there's a timestamp in the report ????