defaults = { 'apt': { 'packages': { 'ffmpeg': {}, 'mpv': {}, }, }, 'navidrome': { 'config': { 'DataFolder': '/var/opt/navidrome', 'Address': '127.0.0.1', 'MusicFolder': '/mnt/music', 'EnableExternalServices': False, 'LastFM.Enabled': False, 'ListenBrainz.Enabled': False, 'PasswordEncryptionKey': repo.vault.password_for('{} encryption navidrome'.format(node.name)), 'Scanner.Schedule': '@every 72h', 'Port': 4533, }, }, 'zfs': { 'datasets': { 'tank/navidrome': {}, 'tank/navidrome/install': { 'mountpoint': '/opt/navidrome', 'needed_by': { 'directory:/opt/navidrome', }, }, 'tank/navidrome/home': { 'mountpoint': '/var/opt/navidrome', 'needed_by': { 'directory:/var/opt/navidrome', }, }, }, }, } @metadata_reactor.provides( 'navidrome/config/baseurl', ) def baseurl(metadata): return { 'navidrome': { 'config': { 'BaseUrl': f'https://{metadata.get('navidrome/domain')}', }, }, } @metadata_reactor.provides( 'nginx/vhosts/navidrome', ) def nginx(metadata): if not node.has_bundle('nginx'): raise DoNotRunAgain return { 'nginx': { 'vhosts': { 'navidrome': { 'domain': metadata.get('navidrome/domain'), 'locations': { '/': { 'target': f'http://127.0.0.1:{metadata.get('navidrome/config/port')}', }, }, 'website_check_path': '/user/login', 'website_check_string': 'Sign in', }, }, }, }