From d2916ef4f9c1cc20e655048e7eacddcca091370d Mon Sep 17 00:00:00 2001 From: mwiegand Date: Wed, 10 Nov 2021 02:09:42 +0100 Subject: [PATCH] raspberry bundle --- README.md | 4 +- bundles/raspberry-pi/metadata.py | 69 ++++++++++++++++++++++++++++++++ bundles/smartctl/metadata.py | 6 ++- bundles/systemd/items.py | 15 +++++++ bundles/systemd/metadata.py | 1 + bundles/telegraf/items.py | 5 ++- bundles/telegraf/metadata.py | 28 +++++++------ groups/hardware/raspberry-pi.py | 23 +---------- 8 files changed, 112 insertions(+), 39 deletions(-) create mode 100644 bundles/raspberry-pi/metadata.py diff --git a/README.md b/README.md index 7818f1d..d5aa843 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # TODO +- systemd-swap +- raspberry cpu frequency /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq - gollum wiki - blog? - fix dkim not working sometimes - LDAP - oauth2/OpenID - icinga -- Homeassistant/OpenHAB -- Homematic diff --git a/bundles/raspberry-pi/metadata.py b/bundles/raspberry-pi/metadata.py new file mode 100644 index 0000000..368b041 --- /dev/null +++ b/bundles/raspberry-pi/metadata.py @@ -0,0 +1,69 @@ +h = repo.libs.hashable.hashable + +defaults = { + 'grafana_rows': { + 'health', + }, + 'systemd': { + 'journald.conf': { + 'Storage': 'volatile', + }, + }, +} + + +@metadata_reactor.provides( + 'telegraf/config', +) +def telegraf(metadata): + return { + 'telegraf': { + 'config': { + 'agent': { + 'flush_interval': '30s', + 'interval': '30s', + }, + 'inputs': { + 'exec': { + h({ + 'commands': ["/bin/bash -c 'expr $(cat /sys/class/thermal/thermal_zone0/temp) / 1000'"], + 'name_override': "cpu_temperature", + 'data_format': "value", + 'data_type': "integer", + }), + # h({ + # 'commands': [ + # f'sudo /usr/local/share/icinga/plugins/smartctl', + # ], + # 'data_format': 'influx', + # 'interval': '20s', + # }), + }, + }, + }, + }, + } + + + +@metadata_reactor.provides( + 'zfs/kernel_params', + 'zfs/datasets', +) +def zfs(metadata): + if not node.has_bundle('zfs'): + return {} + + return { + 'zfs': { + 'datasets': { + name: { + 'logbias': 'throughput', + } + for name in metadata.get('zfs/datasets') + }, + 'kernel_params': { + 'zfs_txg_timeout': 300, + }, + }, + } diff --git a/bundles/smartctl/metadata.py b/bundles/smartctl/metadata.py index f28838a..18726ca 100644 --- a/bundles/smartctl/metadata.py +++ b/bundles/smartctl/metadata.py @@ -1,3 +1,5 @@ +h = repo.libs.hashable.hashable + defaults = { 'apt': { 'packages': { @@ -11,13 +13,13 @@ defaults = { 'telegraf': { 'config': { 'inputs': { - 'exec': [{ + 'exec': {h({ 'commands': [ f'sudo /usr/local/share/icinga/plugins/smartctl', ], 'data_format': 'influx', 'interval': '20s', - }], + })}, }, }, }, diff --git a/bundles/systemd/items.py b/bundles/systemd/items.py index c7fab56..2d7c4f2 100644 --- a/bundles/systemd/items.py +++ b/bundles/systemd/items.py @@ -1,5 +1,20 @@ from bundlewrap.utils.dicts import merge_dict +files = { + '/etc/systemd/journald.conf.d/managed.conf': { + 'content': repo.libs.systemd.generate_unitfile({ + 'Jorunal': node.metadata.get('systemd/journald.conf'), + }), + 'triggers': { + 'svc_systemd:systemd-journald:restart', + }, + } +} + +svc_systemd = { + 'systemd-journald': {}, +} + actions = { 'systemd-reload': { 'command': 'systemctl daemon-reload', diff --git a/bundles/systemd/metadata.py b/bundles/systemd/metadata.py index d8fb272..0df2fa3 100644 --- a/bundles/systemd/metadata.py +++ b/bundles/systemd/metadata.py @@ -2,6 +2,7 @@ defaults = { 'systemd': { 'units': {}, 'services': {}, + 'journald.conf': {}, } } diff --git a/bundles/telegraf/items.py b/bundles/telegraf/items.py index 2b6bf84..fadd146 100644 --- a/bundles/telegraf/items.py +++ b/bundles/telegraf/items.py @@ -1,7 +1,10 @@ from tomlkit import dumps +import json +from bundlewrap.metadata import MetadataJSONEncoder + files['/etc/telegraf/telegraf.conf'] = { - 'content': dumps(node.metadata.get('telegraf/config'), sort_keys=True), + 'content': dumps(json.loads(json.dumps(node.metadata.get('telegraf/config'), cls=MetadataJSONEncoder)), sort_keys=True), 'triggers': [ 'svc_systemd:telegraf:restart', ], diff --git a/bundles/telegraf/metadata.py b/bundles/telegraf/metadata.py index b65e456..2404c3b 100644 --- a/bundles/telegraf/metadata.py +++ b/bundles/telegraf/metadata.py @@ -1,3 +1,5 @@ +h = repo.libs.hashable.hashable + defaults = { 'apt': { 'packages': { @@ -21,13 +23,13 @@ defaults = { 'round_interval': True, }, 'inputs': { - 'cpu': [{ + 'cpu': {h({ 'collect_cpu_time': False, 'percpu': True, 'report_active': False, 'totalcpu': True, - }], - 'disk': [{ + })}, + 'disk': {h({ 'ignore_fs': [ 'tmpfs', 'devtmpfs', @@ -37,22 +39,22 @@ defaults = { 'aufs', 'squashfs', ], - }], - 'procstat': [{ + })}, + 'procstat': {h({ 'interval': '60s', 'pattern': '.', 'fieldpass': [ 'cpu_usage', 'memory_rss', ], - }], - 'diskio': [{}], - 'kernel': [{}], - 'mem': [{}], - 'processes': [{}], - 'swap': [{}], - 'system': [{}], - 'net': [{}], + })}, + 'diskio': {h({})}, + 'kernel': {h({})}, + 'mem': {h({})}, + 'processes': {h({})}, + 'swap': {h({})}, + 'system': {h({})}, + 'net': {h({})}, }, }, }, diff --git a/groups/hardware/raspberry-pi.py b/groups/hardware/raspberry-pi.py index 93b1390..64983f5 100644 --- a/groups/hardware/raspberry-pi.py +++ b/groups/hardware/raspberry-pi.py @@ -1,24 +1,5 @@ { - 'metadata': { - 'telegraf': { - 'config': { - 'inputs': { - 'exec': [{ - 'commands': ["/bin/bash -c 'expr $(cat /sys/class/thermal/thermal_zone0/temp) / 1000'"], - 'name_override': "cpu_temperature", - 'data_format': "value", - 'data_type': "integer", - }], - }, - }, - }, - 'grafana_rows': { - 'health', - }, - 'zfs': { - 'kernel_params': { - 'zfs_txg_timeout': 300, - }, - }, + 'bundles': { + 'raspberry-pi', }, }