+ Args:
+ config_data (Dict[str, Any]): configuration data.
+ relation_data (Dict[str, Any]): relation data.
+ keystone (bool): is keystone to be used.
+ """
+ config_validators = {
+ "enable_test": lambda value, _: isinstance(value, bool),
+ "database_commonkey": lambda value, _: (
+ isinstance(value, str) and len(value) > 1
+ ),
+ "log_level": lambda value, _: (
+ isinstance(value, str) and value in ("INFO", "DEBUG")
+ ),
+ "auth_backend": lambda value, _: (
+ isinstance(value, str) and (value == "internal" or value == "keystone")
+ ),
+ "site_url": lambda value, _: isinstance(value, str)
+ if value is not None
+ else True,
+ "max_file_size": lambda value, values: _validate_max_file_size(
+ value, values.get("site_url")
+ ),
+ "ingress_whitelist_source_range": lambda value, _: _validate_ip_network(value),
+ "tls_secret_name": lambda value, _: isinstance(value, str)
+ if value is not None
+ else True,
+ }
+ relation_validators = {
+ "message_host": lambda value, _: isinstance(value, str),
+ "message_port": lambda value, _: isinstance(value, int) and value > 0,
+ "database_uri": lambda value, _: (
+ isinstance(value, str) and value.startswith("mongodb://")
+ ),
+ "prometheus_host": lambda value, _: isinstance(value, str),
+ "prometheus_port": lambda value, _: isinstance(value, int) and value > 0,
+ "keystone_host": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ "keystone_port": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, int) and x > 0
+ ),
+ "keystone_user_domain_name": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ "keystone_project_domain_name": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ "keystone_username": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ "keystone_password": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ "keystone_service": lambda value, _: _validate_keystone_config(
+ keystone, value, lambda x: isinstance(x, str) and len(x) > 0
+ ),
+ }
+ problems = []