Disclaimer: This is an independent, community project. It is not official software supported by, endorsed by, or affiliated with Red Hat, Inc. It is provided "as is", without warranty of any kind. Use it entirely at your own risk. See the LICENCE file for details.
Two independent CLI tools (Python and bash) that monitor the Red Hat Errata Search API for new errata matching configurable filters. No authentication required.
Transparency: This project is developed with AI assistance.
Use cases:
- Track new releases of Red Hat Satellite, Ansible Automation Platform, or any other product
- Monitor for security, bug-fix, or enhancement advisories
- Get notified when new errata are published for products you care about
- Run it on demand to prepare your TAM calls with your customers to proactively notify them about new releases (the author's use case)
- It's brand new and still in testing
- I'm not sure filters work correctly, there might be false positives
- Please submit any issues via the issue tracker of this repo
- Python 3.9+ (tested on RHEL 9 / Fedora)
requestslibrary
- Bash 4+
curljq
git clone <repo-url> rh_errata_monitor
cd rh_errata_monitor
pip install -r requirements.txt # Python version only
cp filters.conf.example filters.conf- Copy and edit the filter configuration:
cp filters.conf.example filters.conf- Discover available product names:
# Python
python3 rh_errata_monitor.py list-products --search satellite
# Bash
./rh_errata_monitor.sh list-products --search satellite- Run the monitor:
# Python
python3 rh_errata_monitor.py monitor
# Bash
./rh_errata_monitor.sh monitorOn the first run it looks back 30 days by default. Subsequent runs only show errata published since the last successful execution.
The default format is md (Markdown), which is convenient for pasting into wiki pages, PR comments, or chat:
### satellite-releases (2 new errata since 2026-08-20)
- [RHBA-2026:51087 - Satellite 6 Client Bug Fix Update](https://access.redhat.com/errata/RHBA-2026:51087) - None
- [RHSA-2024:2010 - Important: Satellite 6.15.0 release](https://access.redhat.com/errata/RHSA-2024:2010) - Important
### aap-setup-bundle (1 new erratum since 2026-08-20)
- [RHBA-2026:67611 - Red Hat Ansible Automation Platform 2.7 Setup Bundle Release Update](https://access.redhat.com/errata/RHBA-2026:67611) - None
**Total: 3 new errata since 2026-08-20 across 2 filters**The since DATE suffix always appears for monitor (it always queries from a known date) and only appears for search when --after was explicitly passed. Filters with no results render as a single - none line.
The file filters.conf uses INI syntax. Each [section] defines a named filter:
[satellite-releases]
product = Red Hat Satellite
synopsis = Satellite 6
[aap-setup-bundle]
synopsis = "Ansible Automation Platform" "Setup Bundle"
[aap-all]
product = Red Hat Ansible Automation Platform| Key | Description | API mapping |
|---|---|---|
product |
Exact product name (use list-products to discover valid names) |
fq=portal_product_names:("...") |
synopsis |
Free-text search terms; use quotes for phrases | q=... |
- Both keys are optional
- If both are set, results must match both (AND logic)
- If neither is set, all errata are returned (not recommended)
Both tools share the same interface.
| Command | Description |
|---|---|
monitor |
Check for new errata per filter (default) |
list-products |
List available product names from the API |
search |
One-off stateless errata search |
| Flag | Description | Default |
|---|---|---|
--filters FILE |
Path to INI filter config | filters.conf |
--state-file FILE |
Path to JSON state file | .errata_state.json |
--initial-days N |
On first run, look back N days | 30 |
--format {json,csv,md} |
Output format | md |
--output FILE |
Write report to file in addition to stdout | (none) |
--exit-code |
Exit with code 2 when new errata are found | (off) |
--dry-run |
Show queries without hitting the API | (off) |
-v / --verbose |
Enable debug logging | (off) |
| Flag | Description |
|---|---|
--reset-filters FILTER [...] |
Clear seen-errata cache for filters (or all) and exit |
--reset-after YYYY-MM-DD |
When resetting, also rewind the query window to this date |
| Flag | Description |
|---|---|
--search TEXT / -s TEXT |
Filter products by name (case-insensitive) |
| Flag | Description | Default |
|---|---|---|
--product NAME |
Filter by exact product name | (none) |
--synopsis TEXT |
Search terms for synopsis/content | (none) |
--after YYYY-MM-DD |
Errata published after this date | (none) |
--type {security,bugfix,enhancement} |
Advisory type | (all) |
--severity {critical,important,moderate,low} |
Severity filter | (all) |
--rows N |
Max results | 50 |
# Discover products matching "ansible"
python3 rh_errata_monitor.py list-products --search ansible
# One-off search for Satellite errata since 2024-01-01
python3 rh_errata_monitor.py search --product "Red Hat Satellite" --after 2024-01-01
# Search for AAP bundled installer releases
python3 rh_errata_monitor.py search --synopsis '"Ansible Automation Platform" "Setup Bundle"'
# Monitor with JSON output
python3 rh_errata_monitor.py --format json monitor
# Generate CSV report to file
./rh_errata_monitor.sh --format csv --output /tmp/errata.csv monitor
# Generate a Markdown report (e.g. to paste into a wiki page or PR comment)
python3 rh_errata_monitor.py --format md monitor
# Reset a specific filter and re-check from a date
python3 rh_errata_monitor.py monitor --reset-filters satellite-releases --reset-after 2024-01-01
# Reset all filters
./rh_errata_monitor.sh monitor --reset-filters all --reset-after 2026-01-01
# Use in CI -- exits 2 if new errata found
python3 rh_errata_monitor.py --exit-code monitor
# Dry run -- preview queries
./rh_errata_monitor.sh --dry-run monitorThe monitor stores its state in .errata_state.json (configurable via --state-file). This file contains:
last_run-- ISO 8601 timestamp of the last fully successful run (only updated when every filter query succeeds)seen_errata-- per-filter list of errata IDs already reported, used for deduplication across runs
Delete this file or use --reset-filters all to start fresh.
Run the monitor daily at 07:00:
crontab -eAdd:
0 7 * * * cd /opt/rh_errata_monitor && /usr/bin/python3 rh_errata_monitor.py --output /var/log/errata_report.txt 2>&1 | logger -t errata-monitor
To receive email notifications when new errata are found:
MAILTO=admin@example.com
0 7 * * * cd /opt/rh_errata_monitor && /usr/bin/python3 rh_errata_monitor.py --exit-code 2>&1
/etc/systemd/system/errata-monitor.service
[Unit]
Description=Red Hat Errata Monitor
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
WorkingDirectory=/opt/rh_errata_monitor
ExecStart=/usr/bin/python3 rh_errata_monitor.py --output /var/log/errata_report.txt
User=errata-monitor
Group=errata-monitor/etc/systemd/system/errata-monitor.timer
[Unit]
Description=Run Red Hat Errata Monitor daily
[Timer]
OnCalendar=*-*-* 07:00:00
Persistent=true
RandomizedDelaySec=300
[Install]
WantedBy=timers.targetEnable and start:
sudo systemctl daemon-reload
sudo systemctl enable --now errata-monitor.timer- Reads filter definitions from the INI config file.
- Loads state from the JSON state file (last run timestamp + previously seen errata IDs).
- For each filter, queries
GET https://access.redhat.com/hydra/rest/search/kcswith:q=<synopsis>for text searchfq=portal_product_names:("<product>")for product filteringfq=portal_publication_date:[<after_date>T00:00:00Z TO *]for date range- Automatic pagination (up to 500 results per page)
- Filters out errata already reported in prior runs (deduplication by errata ID).
- Prints the report in the requested format.
- Updates the state file (timestamp advances only if all filter queries succeeded).
This tool uses the public search endpoint that powers the Red Hat Errata Search web UI. No authentication is required.
Endpoint: GET https://access.redhat.com/hydra/rest/search/kcs
Key parameters (Solr query syntax):
| Parameter | Description |
|---|---|
q |
Full-text query (default *:*) |
fq |
Filter query (repeatable): documentKind:("Errata"), product, date range |
fl |
Field list to return |
rows |
Results per page (max ~500) |
start |
Pagination offset |
sort |
Sort order |
facet |
Enable faceting for product discovery |
--outputflag: The--outputflag writes the report to any path the current user can write to. When running the tool as a privileged user (e.g. a root cron job), ensure the output path points to a dedicated report directory. Do not pass untrusted input as the--outputvalue in automated pipelines.
- This tool is a personal project; expect rough edges
- Please report issues and feature requests via the issue tracker