Compare commits
No commits in common. "8b1afdc038a2789f937b75edf1e7af1fc10e73e9" and "40254b403e9d56717e1251e9cee9d9ae7a916d3b" have entirely different histories.
8b1afdc038
...
40254b403e
9 changed files with 23 additions and 297 deletions
|
@ -1,10 +0,0 @@
|
||||||
# setup
|
|
||||||
|
|
||||||
- apply influxdb to server
|
|
||||||
- write client_token into influxdb metadata:
|
|
||||||
`influx auth list --json | jq -r '.[] | select (.description == "client_token") | .token'`
|
|
||||||
- apply clients
|
|
||||||
|
|
||||||
# reset password
|
|
||||||
|
|
||||||
Opening /var/lib/influxdb/influxd.bolt with https://github.com/br0xen/boltbrowser might help
|
|
|
@ -1,73 +1,2 @@
|
||||||
from tomlkit import dumps
|
#sudo systemctl unmask influxdb.service
|
||||||
from shlex import quote
|
#sudo systemctl start influxdb
|
||||||
|
|
||||||
directories['/var/lib/influxdb'] = {
|
|
||||||
'owner': 'influxdb',
|
|
||||||
'group': 'influxdb',
|
|
||||||
'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 5',
|
|
||||||
'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',
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
actions['create_influxdb_client_token'] = {
|
|
||||||
'command': 'influx auth create --description client_token --write-buckets --read-telegrafs',
|
|
||||||
'unless': """influx auth list --json | jq -r '.[] | select (.description == "client_token") | .token' | wc -l | grep -q ^1$""",
|
|
||||||
'needs': [
|
|
||||||
'file:/root/.influxdbv2/configs',
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
from ipaddress import ip_interface
|
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'apt': {
|
'apt': {
|
||||||
'packages': {
|
'packages': {
|
||||||
|
@ -9,58 +7,4 @@ defaults = {
|
||||||
'deb https://repos.influxdata.com/debian {release} stable',
|
'deb https://repos.influxdata.com/debian {release} stable',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'influxdb': {
|
|
||||||
'port': '8200',
|
|
||||||
'username': 'admin',
|
|
||||||
'org': 'default',
|
|
||||||
'bucket': 'default',
|
|
||||||
'config': {
|
|
||||||
'bolt-path': '/var/lib/influxdb/influxd.bolt',
|
|
||||||
'engine-path': '/var/lib/influxdb/engine',
|
|
||||||
'reporting-disabled': True,
|
|
||||||
'http-bind-address': ':8200',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'zfs': {
|
|
||||||
'datasets': {
|
|
||||||
'tank/influxdb': {
|
|
||||||
'mountpoint': '/var/lib/influxdb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
|
||||||
'influxdb/password',
|
|
||||||
)
|
|
||||||
def admin_password(metadata):
|
|
||||||
return {
|
|
||||||
'influxdb': {
|
|
||||||
'password': repo.vault.password_for(f"{metadata.get('id')} influxdb admin"),
|
|
||||||
'admin_token': repo.vault.random_bytes_as_base64_for(f"{metadata.get('id')} influxdb default token", length=64),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
|
||||||
'dns',
|
|
||||||
)
|
|
||||||
def dns(metadata):
|
|
||||||
dns = {}
|
|
||||||
|
|
||||||
dns[metadata.get('influxdb/hostname')] = {
|
|
||||||
'A': [
|
|
||||||
str(ip_interface(network['ipv4']).ip)
|
|
||||||
for network in metadata.get('network').values()
|
|
||||||
if 'ipv4' in network
|
|
||||||
],
|
|
||||||
'AAAA': [
|
|
||||||
str(ip_interface(network['ipv6']).ip)
|
|
||||||
for network in metadata.get('network').values()
|
|
||||||
if 'ipv6' in network
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
'dns': dns,
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
from tomlkit import dumps
|
|
||||||
|
|
||||||
files['/etc/telegraf/telegraf.conf'] = {
|
|
||||||
'content': dumps(node.metadata.get('telegraf/config')),
|
|
||||||
'triggers': [
|
|
||||||
'svc_systemd:telegraf:restart',
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
svc_systemd['telegraf'] = {
|
|
||||||
'needs': [
|
|
||||||
'file:/etc/telegraf/telegraf.conf',
|
|
||||||
],
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
defaults = {
|
|
||||||
'apt': {
|
|
||||||
'packages': {
|
|
||||||
'telegraf': {},
|
|
||||||
},
|
|
||||||
'sources': [
|
|
||||||
'deb https://repos.influxdata.com/debian {release} stable',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'telegraf': {
|
|
||||||
'config': {
|
|
||||||
'agent': {
|
|
||||||
'hostname': node.name,
|
|
||||||
'collection_jitter': '0s',
|
|
||||||
'flush_interval': '10s',
|
|
||||||
'flush_jitter': '0s',
|
|
||||||
'interval': '10s',
|
|
||||||
'metric_batch_size': 1000,
|
|
||||||
'metric_buffer_limit': 10000,
|
|
||||||
'omit_hostname': False,
|
|
||||||
'round_interval': True
|
|
||||||
},
|
|
||||||
'inputs': {
|
|
||||||
'cpu': [{
|
|
||||||
'collect_cpu_time': False,
|
|
||||||
'percpu': True,
|
|
||||||
'report_active': False,
|
|
||||||
'totalcpu': True
|
|
||||||
}],
|
|
||||||
'disk': [{
|
|
||||||
'ignore_fs': [
|
|
||||||
'tmpfs',
|
|
||||||
'devtmpfs',
|
|
||||||
'devfs',
|
|
||||||
'iso9660',
|
|
||||||
'overlay',
|
|
||||||
'aufs',
|
|
||||||
'squashfs'
|
|
||||||
],
|
|
||||||
}],
|
|
||||||
'diskio': [{}],
|
|
||||||
'kernel': [{}],
|
|
||||||
'mem': [{}],
|
|
||||||
'processes': [{}],
|
|
||||||
'swap': [{}],
|
|
||||||
'system': [{}],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@metadata_reactor.provides(
|
|
||||||
'telegraf/config/outputs/influxdb_v2',
|
|
||||||
)
|
|
||||||
def influxdb(metadata):
|
|
||||||
influxdb_node = repo.get_node(metadata.get('telegraf/influxdb_node'))
|
|
||||||
|
|
||||||
influxdb_server_url = "http://{hostname}:{port}".format(
|
|
||||||
hostname=influxdb_node.metadata.get('influxdb/hostname'),
|
|
||||||
port=influxdb_node.metadata.get('influxdb/port'),
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
|
||||||
'telegraf': {
|
|
||||||
'config': {
|
|
||||||
'outputs': {
|
|
||||||
'influxdb_v2': [{
|
|
||||||
'urls': [influxdb_server_url],
|
|
||||||
'token': str(influxdb_node.metadata.get(f'influxdb/client_token')),
|
|
||||||
'organization': influxdb_node.metadata.get('influxdb/org'),
|
|
||||||
'bucket': influxdb_node.metadata.get('influxdb/bucket'),
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
'bundles': [
|
|
||||||
'telegraf',
|
|
||||||
],
|
|
||||||
'metadata': {
|
|
||||||
'telegraf': {
|
|
||||||
'influxdb_node': 'home.server',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
23
nodes.py
23
nodes.py
|
@ -1,30 +1,9 @@
|
||||||
from os import walk
|
from os import walk
|
||||||
from os.path import join, basename, splitext
|
from os.path import join, basename, splitext
|
||||||
|
|
||||||
converters = {
|
|
||||||
'32_random_bytes_as_base64_for': lambda x: vault.random_bytes_as_base64_for(x, length=32),
|
|
||||||
'decrypt': lambda x: vault.decrypt(x),
|
|
||||||
'decrypt_file': lambda x: vault.decrypt_file(x),
|
|
||||||
'password_for': lambda x: vault.password_for(x),
|
|
||||||
}
|
|
||||||
|
|
||||||
def demagify(data):
|
|
||||||
if isinstance(data, str):
|
|
||||||
for name, converter in converters.items():
|
|
||||||
if data.startswith(f'!{name}:'):
|
|
||||||
return converter(data[len(name) + 2:])
|
|
||||||
else:
|
|
||||||
return data
|
|
||||||
elif isinstance(data, dict):
|
|
||||||
return type(data)({key: demagify(value) for key, value in data.items()})
|
|
||||||
elif isinstance(data, (list, set, tuple)):
|
|
||||||
return type(data)([demagify(element) for element in data])
|
|
||||||
else:
|
|
||||||
return data
|
|
||||||
|
|
||||||
for root, dirs, files in walk(join(repo_path, "nodes")):
|
for root, dirs, files in walk(join(repo_path, "nodes")):
|
||||||
for filename in files:
|
for filename in files:
|
||||||
if filename.endswith(".py"):
|
if filename.endswith(".py"):
|
||||||
node = join(root, filename)
|
node = join(root, filename)
|
||||||
with open(node, 'r', encoding='utf-8') as f:
|
with open(node, 'r', encoding='utf-8') as f:
|
||||||
nodes[splitext(basename(filename))[0]] = demagify(eval(f.read()))
|
nodes[splitext(basename(filename))[0]] = eval(f.read())
|
||||||
|
|
|
@ -8,10 +8,8 @@
|
||||||
],
|
],
|
||||||
'bundles': [
|
'bundles': [
|
||||||
'gitea',
|
'gitea',
|
||||||
'influxdb2',
|
|
||||||
'postgresql',
|
'postgresql',
|
||||||
'wireguard',
|
'wireguard',
|
||||||
'zfs',
|
|
||||||
],
|
],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
'id': 'af96709e-b13f-4965-a588-ef2cd476437a',
|
'id': 'af96709e-b13f-4965-a588-ef2cd476437a',
|
||||||
|
@ -27,10 +25,6 @@
|
||||||
'sha256': '0d11d87ce60d5d98e22fc52f2c8c6ba2b54b14f9c26c767a46bf102c381ad128',
|
'sha256': '0d11d87ce60d5d98e22fc52f2c8c6ba2b54b14f9c26c767a46bf102c381ad128',
|
||||||
'domain': 'git.sublimity.de',
|
'domain': 'git.sublimity.de',
|
||||||
},
|
},
|
||||||
'influxdb': {
|
|
||||||
'hostname': 'influxdb.sublimity.de',
|
|
||||||
'client_token': '!decrypt:encrypt$gAAAAABg25z8fEYjuRkhg4XuYMtJsPO5SaqlexuricXPZAzZ51_iQtPe5v7S503hMFdZ7j-XQUP6Q2y3ovbzhouRYeRZy1W020csOOtBcH08X-ya9cCAOCMnJdujg0MVakxPJhNPa5Ip5XsI4Bjb0EcftNDayQWQsZw1vFHBHllD-ALTisoCdbImD6a1iT4NuT57JGydbWGW',
|
|
||||||
},
|
|
||||||
'users': {
|
'users': {
|
||||||
'root': {
|
'root': {
|
||||||
'shell': '/usr/bin/zsh',
|
'shell': '/usr/bin/zsh',
|
||||||
|
@ -47,15 +41,5 @@
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'zfs': {
|
|
||||||
'pools': {
|
|
||||||
'tank': {
|
|
||||||
'mirrors': [
|
|
||||||
'/dev/disk/by-partlabel/zfs-data-1',
|
|
||||||
'/dev/disk/by-partlabel/zfs-data-2',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,12 +6,13 @@
|
||||||
'hetzner-cloud',
|
'hetzner-cloud',
|
||||||
'debian-10',
|
'debian-10',
|
||||||
'mailserver',
|
'mailserver',
|
||||||
'monitored',
|
|
||||||
'webserver',
|
'webserver',
|
||||||
'dnsserver',
|
'dnsserver',
|
||||||
],
|
],
|
||||||
'bundles': [
|
'bundles': [
|
||||||
'wireguard',
|
'wireguard',
|
||||||
|
'nextcloud', #TEMP
|
||||||
|
'influxdb2', #TEMP
|
||||||
'zfs',
|
'zfs',
|
||||||
],
|
],
|
||||||
'metadata': {
|
'metadata': {
|
||||||
|
@ -52,24 +53,24 @@
|
||||||
'gateway6': 'fe80::1',
|
'gateway6': 'fe80::1',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
# 'nginx': {
|
'nginx': {
|
||||||
# 'vhosts': {
|
'vhosts': {
|
||||||
# 'nextcloud': {
|
'nextcloud': {
|
||||||
# 'domain': 'test.ckn.li',
|
'domain': 'test.ckn.li',
|
||||||
# 'ssl': 'letsencrypt',
|
'ssl': 'letsencrypt',
|
||||||
# 'letsencrypt': {
|
'letsencrypt': {
|
||||||
# 'active': True,
|
'active': True,
|
||||||
# 'force_ssl': False,
|
'force_ssl': False,
|
||||||
# },
|
},
|
||||||
# 'proxy': {
|
'proxy': {
|
||||||
# '/': {
|
'/': {
|
||||||
# 'target': 'https://mail.sublimity.de:443',
|
'target': 'https://mail.sublimity.de:443',
|
||||||
# 'websocket': True,
|
'websocket': True,
|
||||||
# },
|
},
|
||||||
# },
|
},
|
||||||
# },
|
},
|
||||||
# },
|
},
|
||||||
# },
|
},
|
||||||
'mailserver': {
|
'mailserver': {
|
||||||
'hostname': 'mail.sublimity.de',
|
'hostname': 'mail.sublimity.de',
|
||||||
'admin_email': 'postmaster@sublimity.de',
|
'admin_email': 'postmaster@sublimity.de',
|
||||||
|
|
Loading…
Reference in a new issue