78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from tomlkit import dumps
 | 
						|
from shlex import quote
 | 
						|
 | 
						|
directories['/var/lib/influxdb'] = {
 | 
						|
    'owner': 'influxdb',
 | 
						|
    'group': 'influxdb',
 | 
						|
    'mode': '0750',
 | 
						|
    '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',
 | 
						|
        ],
 | 
						|
    }
 |