- added config generation logic
- fixed typo in package name
This commit is contained in:
parent
7844a44a74
commit
48750d1377
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,4 +2,5 @@ venv
|
||||
logs
|
||||
results
|
||||
*.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')
|
||||
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