databases/mysql{80,84,97}-server: Add rc script and user for MySQL Router
All three server ports build and install MySQL Router, but it was never
usable out of the box: there is no mysqlrouter user, no rc script, no
configuration directory, and no log, runtime or data directory. The only
trace of an integration was etc/logrotate.d/mysqlrouter, whose
"create 600 mysqlrouter mysqlrouter" refers to an account that no port
creates, so logrotate(8) skipped that entry with an error and exited
non-zero.
Upstream names that account itself: scripts/CMakeLists.txt sets
MYSQLROUTER_USER to "mysqlrouter", the built-in help of mysqlrouter
suggests --user=mysqlrouter, and the systemd unit shipped for Linux runs
the service under it.
Add the user and group, an rc script, and a configuration sample in
etc/mysqlrouter. mysqlrouter does not detach itself, so it runs under
daemon(8), which also writes the PID file that the postrotate script in
etc/logrotate.d/mysqlrouter expects. The runtime, log and data
[9 lines not shown]
databases/mysql{80,84,97}-server: Add rc script and user for MySQL Router
All three server ports build and install MySQL Router, but it was never
usable out of the box: there is no mysqlrouter user, no rc script, no
configuration directory, and no log, runtime or data directory. The only
trace of an integration was etc/logrotate.d/mysqlrouter, whose
"create 600 mysqlrouter mysqlrouter" refers to an account that no port
creates, so logrotate(8) skipped that entry with an error and exited
non-zero.
Upstream names that account itself: scripts/CMakeLists.txt sets
MYSQLROUTER_USER to "mysqlrouter", the built-in help of mysqlrouter
suggests --user=mysqlrouter, and the systemd unit shipped for Linux runs
the service under it.
Add the user and group, an rc script, and a configuration sample in
etc/mysqlrouter. mysqlrouter does not detach itself, so it runs under
daemon(8), which also writes the PID file that the postrotate script in
etc/logrotate.d/mysqlrouter expects. The runtime, log and data
[9 lines not shown]
Fix TTL handling in cache.has_key and get_or_put
## Problem
`cache.has_key` returned True whenever the TDB record existed and never looked at the stored `timeout`, so it disagreed with `cache.get` — which expires the entry and raises `KeyError` — for any key that had expired but not yet been reaped. The only reaper is a 24h periodic with `run_on_start=False` whose timer is re-armed from scratch on every middlewared start, so on a box that restarts more often than daily it never runs at all and the wrong answer sticks around indefinitely.
Separately, `get_or_put` always stored `now + timeout`, so unlike `put` — where 0 means "never expires" — `get_or_put(key, 0, method)` stored an expiry of now and the entry was already expired on the very next read.
## Solution
`has_key` now delegates to `get()` and maps `KeyError` to False. Delegating rather than repeating the timeout comparison is deliberate: the bug existed because two methods independently decided what "expired" means, and this leaves only one. Expired entries are reaped on access as a side effect, which matters given how unreliable the periodic reaper is.
`get_or_put` stores a literal 0 when `timeout` is 0, matching `put`.
net-mgmt/py-ciscoconfparse: Update to 1.9.52
* Update WWW to spare users from redirects.
* This release is also the last in the 1.x series, and the upstream repo
has already been archived with a note that py-ciscoconfparse2, should
be used.
Therefore, mark the port as DEPRECATED and set an EXPIRATION_DATE that
is long enough so that users who use the quarterly branches have
sufficient time in 2026Q4 to make the necessary switch.
Changelog since 1.9.28:
https://github.com/mpenning/ciscoconfparse/blob/1.9.52/CHANGES.md
net-mgmt/py-hier-config: Set PORTSCOUT
* Both py-ciscoconfparse and py-ciscoconfparse2 aren't yet compatible
with the 3.x release, which contains breaking changes.
net-mgmt/py-ciscoconfparse: Update to 1.9.52
* Update WWW to spare users from redirects.
* This release is also the last in the 1.x series, and the upstream repo
has already been archived with a note that py-ciscoconfparse2, should
be used.
Therefore, mark the port as DEPRECATED and set an EXPIRATION_DATE that
is long enough so that users who use the quarterly branches have
sufficient time in 2026Q4 to make the necessary switch.
Changelog since 1.9.28:
https://github.com/mpenning/ciscoconfparse/blob/1.9.52/CHANGES.md
net-mgmt/py-ciscoconfparse2: New port
ciscoconfparse parses through Cisco IOS-style configurations. It can:
- Audit existing router / switch / firewall / wlc configurations
- Retrieve portions of the configuration
- Modify existing configurations
- Build new configurations
It can also parse other vendor configurations:
- Juniper Networks JunOS
- F5 Networks configurations
- Palo Alto Networks Firewall configurations
The module handles anything that has a Cisco IOS style of configuration,
e.g.:
- Cisco IOS/IOS-XE/IOS-XR/Aironet/ASA/CatOS/Nexus
[6 lines not shown]
net/py-macaddress: New port
This Python module is used for handling hardware identifiers like MAC
addresses and makes it easy to:
* check if a string represents a valid MAC address, or a similar hardware
identifier like an EUI-64, OUI, etc,
* convert between string and binary forms of MAC addresses and other
hardware identifiers,
and so on.
Heavily inspired by the ipaddress module, but not yet quite as
featureful.
net-mgmt/py-hier-config: Set PORTSCOUT
* Both py-ciscoconfparse and py-ciscoconfparse2 aren't yet compatible
with the 3.x release, which contains breaking changes.
net/py-macaddress: New port
This Python module is used for handling hardware identifiers like MAC
addresses and makes it easy to:
* check if a string represents a valid MAC address, or a similar hardware
identifier like an EUI-64, OUI, etc,
* convert between string and binary forms of MAC addresses and other
hardware identifiers,
and so on.
Heavily inspired by the ipaddress module, but not yet quite as
featureful.
net-mgmt/py-ciscoconfparse2: New port
ciscoconfparse parses through Cisco IOS-style configurations. It can:
- Audit existing router / switch / firewall / wlc configurations
- Retrieve portions of the configuration
- Modify existing configurations
- Build new configurations
It can also parse other vendor configurations:
- Juniper Networks JunOS
- F5 Networks configurations
- Palo Alto Networks Firewall configurations
The module handles anything that has a Cisco IOS style of configuration,
e.g.:
- Cisco IOS/IOS-XE/IOS-XR/Aironet/ASA/CatOS/Nexus
[6 lines not shown]
net-mgmt/py-hier-config: New port
Hierarchical Configuration is a Python library that is able to take a
running configuration of a network device, compare it to its intended
configuration, and build the remediation steps necessary bring a device
into spec with its intended configuration.
Hierarchical Configuration has been used extensively on:
* Cisco IOS
* Cisco IOSXR
* Cisco NXOS
* Arista EOS
However, any NOS that utilizes a CLI syntax that is structured in a
similar fashion to IOS should work mostly out of the box.
net-mgmt/py-hier-config: New port
Hierarchical Configuration is a Python library that is able to take a
running configuration of a network device, compare it to its intended
configuration, and build the remediation steps necessary bring a device
into spec with its intended configuration.
Hierarchical Configuration has been used extensively on:
* Cisco IOS
* Cisco IOSXR
* Cisco NXOS
* Arista EOS
However, any NOS that utilizes a CLI syntax that is structured in a
similar fashion to IOS should work mostly out of the box.