Skip to content

Commit

Permalink
use global options for project if not specified (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
epsilon-0 committed Jan 9, 2024
1 parent fd91451 commit dde1d05
Show file tree
Hide file tree
Showing 3 changed files with 156 additions and 63 deletions.
2 changes: 2 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ Usage
$ lxd-dyndns -f /etc/lxd-dyndns.conf -d info
An example config file is shown below:

.. code:: toml
cache_dir = "/var/lib/lxd-dyndns"
Expand Down
9 changes: 0 additions & 9 deletions lxd-dyndns.conf

This file was deleted.

208 changes: 154 additions & 54 deletions src/lxd_dyndns/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,6 @@
def setup_config(config: dict[str, Any]) -> bool:
config_valid = True

if not "cache_dir" in config:
logger.error(
f"Using '{CACHE_DIR}' for caching as option 'cache_dir' is not specified"
)
config["cache_dir"] = CACHE_DIR

if not "projects" in config:
logger.error("Missing section [projects]")
config_valid = False
Expand All @@ -37,11 +31,29 @@ def setup_config(config: dict[str, Any]) -> bool:
config_valid = False
continue

if not "ipv4_prefixes" in project_info:
logger.debug(
f"Will use all iIPv4 addresses as option 'ipv4_prefixes' not specified for: {project}"
if not "cache_dir" in project_info:
if "cache_dir" in config:
logger.debug(
f"Using global option for 'cache_dir' as option not specified for: {project}"
)
project_info["cache_dir"] = config["cache_dir"]
else:
project_info["cache_dir"] = CACHE_DIR
logger.error(
f"Using '{CACHE_DIR}' for caching as option 'cache_dir' is not specified"
)
project_info["ipv4_prefixes"] = []

if not "ipv4_prefixes" in project_info:
if "ipv4_prefixes" in config:
logger.debug(
f"Using global option for 'ipv4_prefixes' as option not specified for: {project}"
)
project_info["ipv4_prefixes"] = config["ipv4_prefixes"]
else:
logger.debug(
f"Will use all IPv4 addresses as option 'ipv4_prefixes' not specified for: {project}"
)
project_info["ipv4_prefixes"] = []
if not isinstance(project_info["ipv4_prefixes"], list):
logger.error(f"Invalid 'ipv4_prefixes' for: {project}")
config_valid = False
Expand All @@ -57,10 +69,16 @@ def setup_config(config: dict[str, Any]) -> bool:
break

if not "ipv6_prefixes" in project_info:
logger.debug(
f"Will use all iIPv6 addresses as option 'ipv6_prefixes' not specified for: {project}"
)
project_info["ipv6_prefixes"] = []
if "ipv6_prefixes" in config:
logger.debug(
f"Using global option for 'ipv6_prefixes' as option not specified for: {project}"
)
project_info["ipv6_prefixes"] = config["ipv6_prefixes"]
else:
logger.debug(
f"Will use all IPv6 addresses as option 'ipv6_prefixes' not specified for: {project}"
)
project_info["ipv6_prefixes"] = []
if not isinstance(project_info["ipv6_prefixes"], list):
logger.error(f"Invalid 'ipv6_prefixes' for: {project}")
config_valid = False
Expand All @@ -76,33 +94,59 @@ def setup_config(config: dict[str, Any]) -> bool:
break

if not "dns_server" in project_info:
logger.error(f"Missing option 'dns_server' for: {project}")
config_valid = False
elif not isinstance(project_info["dns_server"], str):
if "dns_server" in config:
logger.debug(
f"Using global option for 'dns_server' as option not specified for: {project}"
)
project_info["dns_server"] = config["dns_server"]
else:
logger.error(f"Missing option 'dns_server' for: {project}")
config_valid = False
if "dns_server" in project_info and not isinstance(
project_info["dns_server"], str
):
logger.error(f"Invalid 'dns_server' for: {project}")
config_valid = False

if not "dns_port" in project_info:
logger.debug(
f"Using port 53 as option 'dns_port' not specified for: {project}"
)
project_info["dns_port"] = 53
if not isinstance(project_info["dns_port"], int):
if "dns_port" in config:
logger.debug(
f"Using global option for 'dns_port' as option not specified for: {project}"
)
project_info["dns_port"] = config["dns_port"]
else:
logger.debug(
f"Using DNS port 53 as option 'dns_port' not specified for: {project}"
)
project_info["dns_port"] = 53
if "dns_port" in project_info and not isinstance(project_info["dns_port"], int):
logger.error(f"Invalid 'dns_port' for: {project}")
config_valid = False

if not "dns_zone" in project_info:
logger.error(f"Missing option 'dns_zone' for: {project}")
config_valid = False
if not isinstance(project_info["dns_zone"], str):
if "dns_zone" in config:
logger.debug(
f"Using global option for 'dns_zone' as option not specified for: {project}"
)
project_info["dns_zone"] = config["dns_zone"]
else:
logger.error(f"Missing option 'dns_zone' for: {project}")
config_valid = False
if "dns_zone" in project_info and not isinstance(project_info["dns_zone"], str):
logger.error(f"Invalid 'dns_zone' for: {project}")
config_valid = False

if not "dns_transport" in project_info:
logger.debug(
f"Using 'udp' for DNS as option 'dns_transport' not specified for: {project}"
)
project_info["dns_transport"] = "udp"
if "dns_transport" in config:
logger.debug(
f"Using global option for 'dns_transport' as option not specified for: {project}"
)
project_info["dns_transport"] = config["dns_transport"]
else:
logger.debug(
f"Using 'udp' for DNS as option 'dns_transport' not specified for: {project}"
)
project_info["dns_transport"] = "udp"
if not isinstance(project_info["dns_transport"], str):
logger.error(f"Invalid 'dns_transport' for: {project}")
config_valid = False
Expand All @@ -112,55 +156,111 @@ def setup_config(config: dict[str, Any]) -> bool:
)

if not "dns_key_name" in project_info:
logger.error(f"Missing option 'dns_key_name' for: {project}")
config_valid = False
elif not isinstance(project_info["dns_key_name"], str):
if "dns_key_name" in config:
logger.debug(
f"Using global option for 'dns_key_name' as option not specified for: {project}"
)
project_info["dns_key_name"] = config["dns_key_name"]
else:
logger.error(f"Missing option 'dns_key_name' for: {project}")
config_valid = False
if "dns_key_name" in project_info and not isinstance(
project_info["dns_key_name"], str
):
logger.error(f"Invalid 'dns_key_name' for: {project}")
config_valid = False

if not "dns_key_secret" in project_info:
logger.error(f"Missing option 'dns_key_secret' for: {project}")
config_valid = False
elif not isinstance(project_info["dns_key_secret"], str):
if "dns_key_secret" in config:
logger.debug(
f"Using global option for 'dns_key_secret' as option not specified for: {project}"
)
project_info["dns_key_secret"] = config["dns_key_secret"]
else:
logger.error(f"Missing option 'dns_key_secret' for: {project}")
config_valid = False
if "dns_key_secret" in project_info and not isinstance(
project_info["dns_key_secret"], str
):
logger.error(f"Invalid 'dns_key_secret' for: {project}")
config_valid = False

if not "lxd_server" in project_info:
logger.error(f"Missing option 'lxd_server' for: {project}")
config_valid = False
elif not isinstance(project_info["lxd_server"], str):
if "lxd_server" in config:
logger.debug(
f"Using global option for 'lxd_server' as option not specified for: {project}"
)
project_info["lxd_server"] = config["lxd_server"]
else:
logger.error(f"Missing option 'lxd_server' for: {project}")
config_valid = False
if "lxd_server" in project_info and not isinstance(
project_info["lxd_server"], str
):
logger.error(f"Invalid 'lxd_server' for: {project}")
config_valid = False

if not "lxd_client_cert" in project_info:
logger.error(f"Missing option 'lxd_client_cert' for: {project}")
config_valid = False
elif not isinstance(project_info["lxd_client_cert"], str):
if "lxd_client_cert" in config:
logger.debug(
f"Using global option for 'lxd_client_cert' as option not specified for: {project}"
)
project_info["lxd_client_cert"] = config["lxd_client_cert"]
else:
logger.error(f"Missing option 'lxd_client_cert' for: {project}")
config_valid = False
if "lxd_client_cert" in project_info and not isinstance(
project_info["lxd_client_cert"], str
):
logger.error(f"Invalid 'lxd_client_cert' for: {project}")
config_valid = False

if not "lxd_client_key" in project_info:
logger.error(f"Missing option 'lxd_client_key' for: {project}")
config_valid = False
elif not isinstance(project_info["lxd_client_key"], str):
if "lxd_client_key" in config:
logger.debug(
f"Using global option for 'lxd_client_key' as option not specified for: {project}"
)
project_info["lxd_client_key"] = config["lxd_client_key"]
else:
logger.error(f"Missing option 'lxd_client_key' for: {project}")
config_valid = False
if "lxd_client_key" in project_info and not isinstance(
project_info["lxd_client_key"], str
):
logger.error(f"Invalid 'lxd_client_key' for: {project}")
config_valid = False

if not "lxd_verify" in project_info:
logger.debug(
f"Using 'true' for 'lxd_verify' as option not specified for: {project}"
)
project_info["lxd_verify"] = "true"
elif not isinstance(project_info["lxd_verify"], bool):
if "lxd_verify" in config:
logger.debug(
f"Using global option for 'lxd_verify' as option not specified for: {project}"
)
project_info["lxd_verify"] = config["lxd_verify"]
else:
logger.debug(
f"Using 'true' for 'lxd_verify' as option not specified for: {project}"
)
project_info["lxd_verify"] = "true"
if "lxd_verify" in project_info and not isinstance(
project_info["lxd_verify"], bool
):
logger.error(f"Invalid 'lxd_verify' for: {project}")
config_valid = False

if not "refresh_interval" in project_info:
logger.debug(
f"Using 30 seconds for 'refresh_interval' as option not specified for: {project}"
)
project_info["refresh_interval"] = 30
elif not isinstance(project_info["refresh_interval"], int):
if "refresh_interval" in config:
logger.debug(
f"Using global option for 'refresh_interval' as option not specified for: {project}"
)
project_info["refresh_interval"] = config["refresh_interval"]
else:
logger.debug(
f"Using 30 seconds for 'refresh_interval' as option not specified for: {project}"
)
project_info["refresh_interval"] = 30
if "refresh_interval" in project_info and not isinstance(
project_info["refresh_interval"], int
):
logger.error(f"Invalid 'refresh_interval' for: {project}")
config_valid = False

Expand Down

0 comments on commit dde1d05

Please sign in to comment.