from bundlewrap.metadata import atomic defaults = { 'apt': { 'packages': { 'nfs-kernel-server': { 'needed_by': { 'action:nfs_reload_shares', 'svc_systemd:nfs-server', }, }, }, }, 'sysctl': { 'options': { 'fs.nfs.nlm_udpport': 4045, 'fs.nfs.nlm_tcpport': 4045, }, 'reload_triggers': { 'svc_systemd:nfs-server:restart', }, }, } @metadata_reactor.provides( 'firewall/port_rules', ) def firewall(metadata): ips = set() for share_items in metadata.get('nfs-server/shares', {}).values(): for share_target in share_items: ips.add(share_target) rules = {} for port in ('111', '2049', '1110', '4045', '35295'): for proto in ('/tcp', '/udp'): rules[port + proto] = atomic(ips) return { 'firewall': { 'port_rules': rules, }, }