defaults = { 'apt': { 'packages': { 'bindfs': {}, }, }, 'systemd-mount': {}, } @metadata_reactor.provides( 'systemd/units', 'systemd/services', ) def units(metadata): units = {} services = {} for mountpoint, conf in metadata.get('systemd-mount').items(): formatted_name = mountpoint[1:].replace('-', '\\x2d').replace('/', '-') + '.mount' units[formatted_name] = { 'Unit': { 'Description': f"Mount {conf['source']} -> {mountpoint}", 'DefaultDependencies': 'no', 'Conflicts': 'umount.target', 'Before': 'umount.target', }, 'Mount': { 'What': conf['source'], 'Where': mountpoint, 'Type': 'fuse.bindfs', 'Options': f"nonempty", }, 'Install': { 'WantedBy': { 'local-fs.target', }, }, } if conf.get('user'): units[formatted_name]['Mount']['Options'] += f",force-user={conf.get('user')}" services[formatted_name] = {} return { 'systemd': { 'units': units, 'services': services, } } @metadata_reactor.provides( 'systemd/units', ) def zfs(metadata): return { 'systemd': { 'units': { name: { 'Unit': { 'After': 'zfs-mount.service', 'Requires': 'zfs-mount.service', }, } for name in metadata.get('systemd/units') if name.endswith('.mount') }, } }