per_listener_settings true

allow_zero_length_clientid true
autosave_interval 5
autosave_on_changes true
log_dest syslog
log_timestamp false
persistence true
persistence_location /var/lib/mosquitto/
pid_file /run/mosquitto/mosquitto.pid
set_tcp_nodelay ${str(node.metadata.get('mosquitto/tcp_nodelay', True)).lower()}

% for port, config in sorted(node.metadata.get('mosquitto/listeners', {}).items()):
listener ${port}
    max_connections ${config.get('max_connections', -1)}
    protocol ${config.get('protocol', 'mqtt')}
    allow_anonymous ${str(config.get('allow_anonymous', True)).lower()}

% endfor

% for bridge, config in sorted(node.metadata.get('mosquitto/bridges', {}).items()):
connection ${bridge}
    address ${config['peer']}
    bridge_attempt_unsubscribe true
    cleansession ${str(config.get('cleansession', True)).lower()}
    notifications true
    notifications_local_only true
    remote_clientid ${config.get('client_id', node.name)}
% if 'auth' in config:
    remote_password ${config['auth']['password']}
    remote_username ${config['auth']['username']}
% endif
    start_type automatic
% for topic in config['topics']:
    topic ${topic['pattern']} ${topic.get('direction', 'in')} ${topic.get('qos', 0)} /${topic.get('local_prefix', bridge)}/ ${topic.get('remote_prefix', '')}
% endfor
    try_private ${str(config.get('try_private', True)).lower()}

% endfor
