feat: auto-detect BIND paths via os.path.exists fallback chain
环境变量 > 自动探测 > 内置默认值。自动探测按发行版常见路径顺序 回退(Debian/Ubuntu / RHEL/CentOS/Rocky / AlmaLinux / FreeBSD), 大多数情况下无需任何配置。 新增探测函数 _detect_bind_path() 与候选路径字典 _BIND_PATH_CANDIDATES, 覆盖以下发行版默认布局: BIND_CONF_DIR: /etc/bind -> /etc -> /etc/named BIND_ZONES_DIR: /etc/bind/zones -> /var/named -> /var/named/data BIND_CONF_LOCAL: /etc/bind/named.conf.local -> /etc/named.conf.local BIND_CONF_OPTIONS: /etc/bind/named.conf.options -> /etc/named.conf BIND_RNDC_KEY: /etc/bind/rndc.key -> /etc/rndc.key -> /var/named/key 环境变量仍然作为最高优先级入口,用于非标准路径或多实例场景。 README 第 5 节改名为'路径优先级',列出三层优先级与探测顺序。
This commit is contained in:
@@ -27,15 +27,30 @@ app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
# ─── BIND paths ───
|
||||
# Defaults are Debian/Ubuntu (bind9). Override via env on RHEL/CentOS/Rocky:
|
||||
# BIND_CONF_DIR=/etc BIND_CONF_LOCAL=/etc/named.conf
|
||||
# BIND_ZONES_DIR=/var/named BIND_CONF_OPTIONS=/etc/named.conf.options
|
||||
# BIND_RNDC_KEY=/etc/rndc.key
|
||||
BIND_CONF_DIR = os.environ.get("BIND_CONF_DIR", "/etc/bind")
|
||||
BIND_ZONES_DIR = os.environ.get("BIND_ZONES_DIR", "/etc/bind/zones")
|
||||
BIND_CONF_LOCAL = os.environ.get("BIND_CONF_LOCAL", "/etc/bind/named.conf.local")
|
||||
BIND_CONF_OPTIONS = os.environ.get("BIND_CONF_OPTIONS", "/etc/bind/named.conf.options")
|
||||
BIND_RNDC_KEY = os.environ.get("BIND_RNDC_KEY", "/etc/bind/rndc.key")
|
||||
# 优先级:环境变量 > 自动探测 > 内置默认值。
|
||||
# 自动探测按"哪个目录/文件存在就用谁"在常见路径里回退,覆盖 Debian/Ubuntu、
|
||||
# RHEL/CentOS/Rocky、AlmaLinux、FreeBSD 等发行版默认布局;如有特殊安装路径,
|
||||
# 可用环境变量强制指定。
|
||||
_BIND_PATH_CANDIDATES = {
|
||||
"BIND_CONF_DIR": ["/etc/bind", "/etc", "/etc/named"],
|
||||
"BIND_ZONES_DIR": ["/etc/bind/zones", "/var/named", "/var/named/data"],
|
||||
"BIND_CONF_LOCAL": ["/etc/bind/named.conf.local", "/etc/named.conf.local"],
|
||||
"BIND_CONF_OPTIONS": ["/etc/bind/named.conf.options", "/etc/named.conf"],
|
||||
"BIND_RNDC_KEY": ["/etc/bind/rndc.key", "/etc/rndc.key", "/var/named/key"],
|
||||
}
|
||||
|
||||
def _detect_bind_path(candidates):
|
||||
"""Return first existing path in candidates; fall back to first (built-in default)."""
|
||||
for p in candidates:
|
||||
if os.path.exists(p):
|
||||
return p
|
||||
return candidates[0]
|
||||
|
||||
BIND_CONF_DIR = os.environ.get("BIND_CONF_DIR", _detect_bind_path(_BIND_PATH_CANDIDATES["BIND_CONF_DIR"]))
|
||||
BIND_ZONES_DIR = os.environ.get("BIND_ZONES_DIR", _detect_bind_path(_BIND_PATH_CANDIDATES["BIND_ZONES_DIR"]))
|
||||
BIND_CONF_LOCAL = os.environ.get("BIND_CONF_LOCAL", _detect_bind_path(_BIND_PATH_CANDIDATES["BIND_CONF_LOCAL"]))
|
||||
BIND_CONF_OPTIONS = os.environ.get("BIND_CONF_OPTIONS", _detect_bind_path(_BIND_PATH_CANDIDATES["BIND_CONF_OPTIONS"]))
|
||||
BIND_RNDC_KEY = os.environ.get("BIND_RNDC_KEY", _detect_bind_path(_BIND_PATH_CANDIDATES["BIND_RNDC_KEY"]))
|
||||
BIND_SERVICE = os.environ.get("BIND_SERVICE", "named")
|
||||
|
||||
# ─── Record types ───
|
||||
|
||||
Reference in New Issue
Block a user