bundlewrap/bundles/influxdb2/items.py
2023-10-24 11:17:29 +02:00

78 lines
2.2 KiB
Python

from tomlkit import dumps
from shlex import quote
directories['/var/lib/influxdb'] = {
'owner': 'influxdb',
'group': 'influxdb',
'mode': '0755',
'needs': [
'zfs_dataset:tank/influxdb',
],
}
directories['/etc/influxdb'] = {
'purge': True,
}
files['/etc/influxdb/config.toml'] = {
'content': dumps(node.metadata.get('influxdb/config')),
'triggers': [
'svc_systemd:influxdb:restart',
]
}
svc_systemd['influxdb'] = {
'needs': [
'directory:/var/lib/influxdb',
'file:/etc/influxdb/config.toml',
'pkg_apt:influxdb2',
]
}
actions['wait_for_influxdb_start'] = {
'command': 'sleep 15',
'triggered': True,
'triggered_by': [
'svc_systemd:influxdb',
'svc_systemd:influxdb:restart',
]
}
actions['setup_influxdb'] = {
'command': 'influx setup --username={username} --password={password} --org={org} --bucket={bucket} --token={token} --retention=0 --force'.format(
username=node.metadata.get('influxdb/username'),
password=quote(str(node.metadata.get('influxdb/password'))),
org=node.metadata.get('influxdb/org'),
bucket=node.metadata.get('influxdb/bucket'),
token=str(node.metadata.get('influxdb/admin_token')),
),
'unless': 'influx bucket list',
'needs': [
'action:wait_for_influxdb_start',
],
}
files['/root/.influxdbv2/configs'] = {
'content': dumps({
node.metadata.get('influxdb/bucket'): {
'url': f"http://localhost:{node.metadata.get('influxdb/port')}",
'token': str(node.metadata.get('influxdb/admin_token')),
'org': node.metadata.get('influxdb/org'),
'active': True,
},
}),
'needs': [
'action:setup_influxdb',
],
}
for description, permissions in {
'readonly': '--read-buckets',
'writeonly': '--write-buckets --read-telegrafs',
}.items():
actions[f'influxdb_{description}_token'] = {
'command': f'influx auth create --description {description} {permissions}',
'unless': f'''influx auth list --json | jq -r '.[] | select (.description == "{description}") | .token' | wc -l | grep -q ^1$''',
'needs': [
'file:/root/.influxdbv2/configs',
],
}