94 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
defaults = {}
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'mailserver/autoconfig_hostname',
 | 
						|
)
 | 
						|
def hostname(metadata):
 | 
						|
    return {
 | 
						|
        'mailserver': {
 | 
						|
            'autoconfig_hostname': f"autoconfig.{metadata.get('mailserver/hostname')}",
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'nginx/vhosts',
 | 
						|
)
 | 
						|
def nginx(metadata):
 | 
						|
    return {
 | 
						|
        'nginx': {
 | 
						|
            'vhosts': {
 | 
						|
                metadata.get('mailserver/autoconfig_hostname'): {
 | 
						|
                    'content': 'mailserver-autodiscover/vhost.conf',
 | 
						|
                    'context': {
 | 
						|
                        'root': f"/var/www/{metadata.get('mailserver/autoconfig_hostname')}",
 | 
						|
                    },
 | 
						|
                    'check_path': '/mail/config-v1.1.xml',
 | 
						|
                },
 | 
						|
            },
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'letsencrypt/domains',
 | 
						|
)
 | 
						|
def letsencrypt(metadata):
 | 
						|
    return {
 | 
						|
        'letsencrypt': {
 | 
						|
            'domains': {
 | 
						|
                metadata.get('mailserver/autoconfig_hostname'): {
 | 
						|
                    'aliases': {
 | 
						|
                        *{
 | 
						|
                            f'autoconfig.{domain}'
 | 
						|
                                for domain in metadata.get('mailserver/domains')
 | 
						|
                        },
 | 
						|
                        *{
 | 
						|
                            f'autodiscover.{domain}'
 | 
						|
                                for domain in metadata.get('mailserver/domains')
 | 
						|
                        },
 | 
						|
                    },
 | 
						|
                },
 | 
						|
            },
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
@metadata_reactor.provides(
 | 
						|
    'dns',
 | 
						|
)
 | 
						|
def autoconfig(metadata):
 | 
						|
    dns = {}
 | 
						|
 | 
						|
    for domain in metadata.get('mailserver/domains'):
 | 
						|
        dns.update({
 | 
						|
            f'autoconfig.{domain}': {
 | 
						|
                'CNAME': {f"{metadata.get('mailserver/autoconfig_hostname')}."},
 | 
						|
            },
 | 
						|
            f'autodiscover.{domain}': {
 | 
						|
                'CNAME': {f"{metadata.get('mailserver/autoconfig_hostname')}."},
 | 
						|
            },
 | 
						|
            f'_autodiscover._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 443 {metadata.get('mailserver/autoconfig_hostname')}."},
 | 
						|
            },
 | 
						|
            f'_smtp._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 25 {metadata.get('mailserver/hostname')}."},
 | 
						|
            },
 | 
						|
            f'_smtps._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 465 {metadata.get('mailserver/hostname')}."},
 | 
						|
            },
 | 
						|
            f'_submission._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 587 {metadata.get('mailserver/hostname')}."},
 | 
						|
            },
 | 
						|
            f'_imap._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 143 {metadata.get('mailserver/hostname')}."},
 | 
						|
            },
 | 
						|
            f'_imaps._tcp.{domain}': {
 | 
						|
                'SRV': {f"0 1 993 {metadata.get('mailserver/hostname')}."},
 | 
						|
            },
 | 
						|
        })
 | 
						|
 | 
						|
    return {
 | 
						|
        'dns': dns,
 | 
						|
    }
 |