bundles/mosquitto: introduce, add to node home.nas
All checks were successful
bundlewrap/pipeline/head This commit looks good
All checks were successful
bundlewrap/pipeline/head This commit looks good
This commit is contained in:
parent
f8bbe00d47
commit
9cbf866de7
4 changed files with 119 additions and 9 deletions
39
bundles/mosquitto/files/mosquitto.conf
Normal file
39
bundles/mosquitto/files/mosquitto.conf
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
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
|
17
bundles/mosquitto/items.py
Normal file
17
bundles/mosquitto/items.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
files = {
|
||||||
|
'/etc/mosquitto/mosquitto.conf': {
|
||||||
|
'content_type': 'mako',
|
||||||
|
'triggers': {
|
||||||
|
'svc_systemd:mosquitto:restart',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
svc_systemd = {
|
||||||
|
'mosquitto': {
|
||||||
|
'needs': {
|
||||||
|
'file:/etc/mosquitto/mosquitto.conf',
|
||||||
|
'pkg_apt:mosquitto',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
33
bundles/mosquitto/metadata.py
Normal file
33
bundles/mosquitto/metadata.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
from bundlewrap.metadata import atomic
|
||||||
|
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
'apt': {
|
||||||
|
'packages': {
|
||||||
|
'mosquitto': {},
|
||||||
|
'mosquitto-clients': {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'mosquitto': {
|
||||||
|
'listeners': {
|
||||||
|
'1883': {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@metadata_reactor.provides(
|
||||||
|
'iptables/port_rules',
|
||||||
|
)
|
||||||
|
def iptables(metadata):
|
||||||
|
sources = metadata.get('mosquitto/restrict-to', {'*'})
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for listener in metadata.get('mosquitto/listeners').keys():
|
||||||
|
result[listener] = atomic(sources)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'iptables': {
|
||||||
|
'port_rules': result,
|
||||||
|
},
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ nodes['home.nas'] = {
|
||||||
'hostname': '172.19.138.20',
|
'hostname': '172.19.138.20',
|
||||||
'bundles': {
|
'bundles': {
|
||||||
'backup-server',
|
'backup-server',
|
||||||
|
'mosquitto',
|
||||||
'netdata',
|
'netdata',
|
||||||
'nfs-server',
|
'nfs-server',
|
||||||
'smartd',
|
'smartd',
|
||||||
|
@ -50,13 +51,9 @@ nodes['home.nas'] = {
|
||||||
'nas': {},
|
'nas': {},
|
||||||
},
|
},
|
||||||
'iptables': {
|
'iptables': {
|
||||||
'custom_rules': [
|
|
||||||
# Dell ULNM
|
|
||||||
'iptables -A INPUT -p tcp --dport 4679 -j ACCEPT',
|
|
||||||
],
|
|
||||||
'port_rules': {
|
'port_rules': {
|
||||||
'1883': { # mosquitto
|
'4679': { # Dell ULNM
|
||||||
'172.19.136.0/25', # wireguard clients, because remote access
|
'172.19.136.0/25',
|
||||||
'172.19.138.0/24',
|
'172.19.138.0/24',
|
||||||
},
|
},
|
||||||
'5060': { # yate SIP
|
'5060': { # yate SIP
|
||||||
|
@ -67,9 +64,6 @@ nodes['home.nas'] = {
|
||||||
'home.snom-wohnzimmer',
|
'home.snom-wohnzimmer',
|
||||||
'home.bubble01',
|
'home.bubble01',
|
||||||
},
|
},
|
||||||
'8083': { # mosquitto Websocket
|
|
||||||
'172.19.138.0/24',
|
|
||||||
},
|
|
||||||
# yate RTP uses some random UDP port. We cannot firewall
|
# yate RTP uses some random UDP port. We cannot firewall
|
||||||
# it, because for incoming calls the other side decides
|
# it, because for incoming calls the other side decides
|
||||||
# which port to use. That's why we simply allow all UDP
|
# which port to use. That's why we simply allow all UDP
|
||||||
|
@ -82,6 +76,33 @@ nodes['home.nas'] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'mosquitto': {
|
||||||
|
'bridges': {
|
||||||
|
'c3voc': {
|
||||||
|
'peer': 'mqtt.c3voc.de',
|
||||||
|
'client_id': 'kunsi-home',
|
||||||
|
'auth': {
|
||||||
|
'username': vault.decrypt('encrypt$gAAAAABgaBa5UZyZlsMM9TV5pa-VyOieFWYzAslxWVnXjOeXHvF4kMHHSHSMOrv-U9k7Ec3mMCDuJFO3ybpOsZSeFQDL7GgEfw=='),
|
||||||
|
'password': vault.decrypt('encrypt$gAAAAABgaBbfm65cYBuod0UehWNmY0NfeUH9xsrP2kENYNF_LWP2iV5a8db_cqMoITwyjjBsHpvjaeDq07Z5K5nQ_BLZG6zPqapL-Qvp20wyck49Dy2R4V4='),
|
||||||
|
},
|
||||||
|
'topics': [
|
||||||
|
{
|
||||||
|
'pattern': '#',
|
||||||
|
'remote_prefix': '/voc/',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'listeners': {
|
||||||
|
'8083': {
|
||||||
|
'protocol': 'websockets',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'restrict-to': {
|
||||||
|
'172.19.136.0/25',
|
||||||
|
'172.19.138.0/24',
|
||||||
|
},
|
||||||
|
},
|
||||||
'nfs-server': {
|
'nfs-server': {
|
||||||
'shares': {
|
'shares': {
|
||||||
'/storage/nas': {
|
'/storage/nas': {
|
||||||
|
|
Loading…
Reference in a new issue