assert node.has_bundle('systemd') streams = { 's1': { 'url': 'http://live.ber.c3voc.de:7999/s1', 'port': 15001, }, 's2': { 'url': 'http://live.ber.c3voc.de:7999/s2', 'port': 15002, }, 's3': { 'url': 'http://live.ber.c3voc.de:7999/s3', 'port': 15003, }, 's4': { 'url': 'http://live.ber.c3voc.de:7999/s4', 'port': 15004, }, 's5': { 'url': 'http://live.ber.c3voc.de:7999/s5', 'port': 15005, }, 's6': { 'url': 'http://live.ber.c3voc.de:7999/s6', 'port': 15006, }, 'sloop': { 'url': 'http://live.ber.c3voc.de:7999/sloop_h264', 'port': 15000, }, } files = {} svc_systemd = {} pkg_apt = { 'ffmpeg': {}, } for stream_id, config in streams.items(): config['id'] = stream_id files['/opt/voc-loudness-monitor/loudness_{}.sh'.format(stream_id)] = { 'source': 'loudness.sh', 'content_type': 'mako', 'context': config, 'mode': '0755', 'triggers': { 'svc_systemd:loudness_{}:restart'.format(stream_id), }, 'needs': { 'pkg_apt:ffmpeg', }, } files['/etc/systemd/system/loudness_{}.service'.format(stream_id)] = { 'source': 'loudness.service', 'content_type': 'mako', 'context': config, 'needs': { 'file:/opt/voc-loudness-monitor/loudness_{}.sh'.format(stream_id), }, 'triggers': { 'action:systemd-reload', 'svc_systemd:loudness_{}:restart'.format(stream_id), }, } svc_systemd['loudness_{}'.format(stream_id)] = { 'needs': { 'file:/etc/systemd/system/loudness_{}.service'.format(stream_id), 'action:systemd-reload', }, # These units are designed to fail if the assigned stream fails. No need # to restart them on every bw run. # Downside of this: services must be started once they are applied. 'running': None, }