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