70 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
assert node.has_bundle('nginx')
 | 
						|
 | 
						|
from ipaddress import ip_interface
 | 
						|
 | 
						|
delegated = 'delegate_to_node' in node.metadata.get('letsencrypt')
 | 
						|
acme_node = repo.get_node(node.metadata.get('letsencrypt/acme_node'))
 | 
						|
 | 
						|
directories = {
 | 
						|
    '/etc/dehydrated/conf.d': {},
 | 
						|
    '/var/lib/dehydrated/acme-challenges': {},
 | 
						|
}
 | 
						|
 | 
						|
files = {
 | 
						|
    '/etc/dehydrated/domains.txt': {
 | 
						|
        'content_type': 'mako',
 | 
						|
        'context': {
 | 
						|
            'domains': node.metadata.get('letsencrypt/domains'),
 | 
						|
        },
 | 
						|
        'triggers': {
 | 
						|
            'action:letsencrypt_update_certificates',
 | 
						|
        },
 | 
						|
    },
 | 
						|
    '/etc/dehydrated/config': {
 | 
						|
        'triggers': {
 | 
						|
            'action:letsencrypt_update_certificates',
 | 
						|
        },
 | 
						|
    },
 | 
						|
    '/etc/dehydrated/hook.sh': {
 | 
						|
        'content_type': 'mako',
 | 
						|
        'context': {
 | 
						|
            'server': ip_interface(acme_node.metadata.get('network/internal/ipv4')).ip,
 | 
						|
            'zone': acme_node.metadata.get('bind/acme_zone'),
 | 
						|
            'acme_key_name': 'acme',
 | 
						|
            'acme_key': acme_node.metadata.get('bind/views/external/keys/acme/token'),
 | 
						|
            'domains': node.metadata.get('letsencrypt/domains'),
 | 
						|
        },
 | 
						|
        'mode': '0755',
 | 
						|
    },
 | 
						|
    '/etc/dehydrated/letsencrypt-ensure-some-certificate': {
 | 
						|
        'mode': '0755',
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
actions['letsencrypt_update_certificates'] = {
 | 
						|
    'command': 'systemctl start letsencrypt.service',
 | 
						|
    'triggered': True,
 | 
						|
    'skip': delegated,
 | 
						|
    'needs': {
 | 
						|
        'svc_systemd:nginx',
 | 
						|
    },
 | 
						|
}
 | 
						|
 | 
						|
for domain in node.metadata.get('letsencrypt/domains').keys():
 | 
						|
    actions[f'letsencrypt_ensure-some-certificate_{domain}'] = {
 | 
						|
        'command': f'/etc/dehydrated/letsencrypt-ensure-some-certificate {domain}',
 | 
						|
        'unless': f'/etc/dehydrated/letsencrypt-ensure-some-certificate {domain} true',
 | 
						|
        'needs': {
 | 
						|
            'file:/etc/dehydrated/letsencrypt-ensure-some-certificate',
 | 
						|
            'pkg_apt:dehydrated',
 | 
						|
        },
 | 
						|
        'needed_by': {
 | 
						|
            'svc_systemd:nginx',
 | 
						|
        },
 | 
						|
        'triggers': {
 | 
						|
           'action:letsencrypt_update_certificates',
 | 
						|
        },
 | 
						|
    }
 | 
						|
 | 
						|
if node.has_bundle('dns'):
 | 
						|
    actions['letsencrypt_update_certificates']['needs'].add('svc_systemd:named:restart')
 |