77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/python3
 | |
| import argparse
 | |
| import yaml
 | |
| from jinja2 import Template
 | |
| 
 | |
| 
 | |
| def render_template(template_path, **kwargs):
 | |
|     with open(template_path, "r") as file:
 | |
|         template = Template(file.read())
 | |
|         output = template.render(**kwargs)
 | |
|     return output
 | |
| 
 | |
| 
 | |
| def format_subdomain(subdomains, domain):
 | |
|     if isinstance(subdomains, list):
 | |
|         return ", ".join([f"{sub}.{domain}" for sub in subdomains])
 | |
|     else:
 | |
|         return f"{subdomains}.{domain}"
 | |
| 
 | |
| 
 | |
| def process_sites_config(config_path, template_path, check_mode):
 | |
|     with open(config_path, "r") as file:
 | |
|         sites_config = yaml.safe_load(file)
 | |
| 
 | |
|     default_domain = sites_config.get("default_domain", None)
 | |
|     if default_domain is None:
 | |
|         raise ValueError("YAML configuration is missing default_domain key")
 | |
|     total_sites = len(sites_config["sites"])
 | |
|     enabled_sites = 0
 | |
|     disabled_sites = 0
 | |
| 
 | |
|     for site in sites_config["sites"]:
 | |
|         domain = site.get("domain", default_domain)
 | |
|         # Check if site is enabled
 | |
|         if site.get("enabled", True):  # Default to True if 'enabled' key is not present
 | |
|             enabled_sites += 1
 | |
| 
 | |
|             if "subdomain" in site:
 | |
|                 site["subdomain"] = format_subdomain(site["subdomain"], domain)
 | |
| 
 | |
|             if not check_mode:
 | |
|                 rendered_content = render_template(template_path, **site)
 | |
|                 print(f"{rendered_content}\n")
 | |
|         else:
 | |
|             disabled_sites += 1
 | |
| 
 | |
|     if check_mode:
 | |
|         print(f"Total sites: {total_sites}")
 | |
|         print(f"Enabled sites: {enabled_sites}")
 | |
|         print(f"Disabled sites: {disabled_sites}")
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     parser = argparse.ArgumentParser(
 | |
|         description="Process a sites configuration file for Caddyfiles"
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "--config", required=True, help="Path to the YAML configuration file"
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "--check",
 | |
|         action="store_true",
 | |
|         help="Only check statistics, do not output templates",
 | |
|     )
 | |
|     parser.add_argument("--template", help="Path to the Jinja2 template file")
 | |
|     args = parser.parse_args()
 | |
| 
 | |
|     if args.template is None and args.check is False:
 | |
|         parser.error("--template argument is required if not using --check")
 | |
| 
 | |
|     template_path = args.template  # Replace with the actual path to your template file
 | |
|     process_sites_config(args.config, template_path, args.check)
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |