Initial commit
commit
778c6d440d
|
@ -0,0 +1,17 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[**.k]
|
||||
max_line_length = 79
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[**.sh]
|
||||
max_line_length = 79
|
||||
indent_style = space
|
||||
indent_size = 4
|
|
@ -0,0 +1,2 @@
|
|||
/.kclvm
|
||||
/keys.txt
|
|
@ -0,0 +1,7 @@
|
|||
import pkg.nut
|
||||
|
||||
nut: nut.Nut {
|
||||
users.upsmon = {
|
||||
upsmon = "primary"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
: "${DESTDIR=/host}"
|
||||
env="$1"
|
||||
|
||||
kcl nut/base nut/"${env}" -o nut.yaml
|
||||
mkdir -p "${DESTDIR}"/etc/ups
|
||||
tera --template nut/templates/ups.conf nut.yaml \
|
||||
> "${DESTDIR}"/etc/ups/ups.conf
|
||||
tera --template nut/templates/upsd.users nut.yaml \
|
||||
> "${DESTDIR}"/etc/ups/upsd.users
|
|
@ -0,0 +1,24 @@
|
|||
import pkg.nut
|
||||
|
||||
nut: nut.Nut {
|
||||
ups = {
|
||||
apc1500 = {
|
||||
driver = "usbhid-ups"
|
||||
port = "auto"
|
||||
desc = "Back-UPS XS 1500G"
|
||||
vendorid = "051d"
|
||||
product = ".*1500M.*"
|
||||
pollonly = "enabled"
|
||||
pollinterval = 1
|
||||
}
|
||||
apc1300 = {
|
||||
driver = "usbhid-ups"
|
||||
port = "auto"
|
||||
desc = "Back-UPS XS 1300G"
|
||||
vendorid = "051d"
|
||||
product = ".*1300G.*"
|
||||
pollonly = "enabled"
|
||||
pollinterval = 1
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
import pkg.nut
|
||||
|
||||
nut: nut.Nut {
|
||||
users.homeassistant.password = """\
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxZUZleGt3emxXdDFtcEtN
|
||||
Wll3K0hrS2c2M1oyMWh2VlBnMER0bkZOb1VVCnU3aTI2eVJoV1dKNWxEd0VnbVNa
|
||||
NlMxVWRuZWpNbTJRVUhWR2w3bUlwaEUKLS0tIGZLcGNQRy9LNUF1Y0JzZEZGdXBn
|
||||
bUJjYlBSSEYwRUpwemlMZ0xCZnpTS2cKUFke27YDeTME9OBgEcQdbJ3jsDZS43km
|
||||
tK61kLMcexq3lXQb30gx4fzMuYa0MXFygawscTnxTrOrXUd36Iga4A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
"""
|
||||
|
||||
users.upsmon.password = """\
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzdnZMZ1F1d05RRi84ZENT
|
||||
SmdRNkFLWDRPMTBFTkdOdFRBMC8xK0gvUVV3CjRhWVljR3ZiU1hwWEJBN2hCcTM1
|
||||
NWFQWWdmVm1XK1pKUHFnRjJjYXdDNjgKLS0tIERvOU44ellHdGZYVXRDMHN4NkpV
|
||||
QkhtVlVQUS96UStlQWo2QWJISUlGL2cKc8AC3UujJMIafbV31pjAzniqSHBNwYDw
|
||||
zhh094auKibUcg6Tbyc=
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
"""
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
import pkg.nut
|
||||
|
||||
nut: nut.Nut {
|
||||
users.dustin.password = """\
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsdWVBOXZpb3Fxclk4SGJv
|
||||
N0JyeEthbzFOTzQySkw3cWZhSEk2Y1poWm0wCnhEVkJhWWtIdUxnVUFSa2xCSDNU
|
||||
ak1rbzhaUzN1WUxKajdvOTluVGJwaGsKLS0tIG9NL3ZrMDY5Z2prMnNWL003cDRP
|
||||
T3NySlREeXZoaVhGcUdTVmxrYXNyUDQKXFvRM9INd7E334OOYlFgp9pu1w4b3szL
|
||||
yVmqMxpy98iHA6HKvuw=
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
"""
|
||||
|
||||
users.upsmon.password = """\
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzdnZMZ1F1d05RRi84ZENT
|
||||
SmdRNkFLWDRPMTBFTkdOdFRBMC8xK0gvUVV3CjRhWVljR3ZiU1hwWEJBN2hCcTM1
|
||||
NWFQWWdmVm1XK1pKUHFnRjJjYXdDNjgKLS0tIERvOU44ellHdGZYVXRDMHN4NkpV
|
||||
QkhtVlVQUS96UStlQWo2QWJISUlGL2cKc8AC3UujJMIafbV31pjAzniqSHBNwYDw
|
||||
zhh094auKibUcg6Tbyc=
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
"""
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
import pkg
|
||||
import pkg.nut
|
||||
|
||||
render: [pkg.RenderInstruction] = nut.templates
|
|
@ -0,0 +1,4 @@
|
|||
kcl_cli_configs:
|
||||
files:
|
||||
- ../app/nut/base
|
||||
- ../app/nut/test
|
|
@ -0,0 +1,5 @@
|
|||
[package]
|
||||
name = "dch"
|
||||
edition = "0.0.1"
|
||||
version = "0.0.1"
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
schema Hook:
|
||||
run: str
|
||||
immediate?: bool
|
||||
|
||||
schema Hooks:
|
||||
changed?: [Hook]
|
||||
|
||||
schema RenderInstruction:
|
||||
template: str
|
||||
dest: str
|
||||
owner?: str
|
||||
group?: str
|
||||
mode?: str
|
||||
hooks?: Hooks
|
||||
|
||||
schema Instructions:
|
||||
render: [RenderInstruction]
|
|
@ -0,0 +1,35 @@
|
|||
schema Ups:
|
||||
"""Schema for ups.conf sections"""
|
||||
|
||||
driver: str
|
||||
port?: str
|
||||
desc?: str
|
||||
vendorid?: str
|
||||
productid?: str
|
||||
product?: str
|
||||
serial?: str
|
||||
vendor?: str
|
||||
bus?: str
|
||||
pollonly?: "enabled" | "disabled"
|
||||
pollinterval?: int
|
||||
|
||||
schema User:
|
||||
"""Schema for upsd.users sections"""
|
||||
|
||||
password: str
|
||||
actions?: [str]
|
||||
instcmds?: [str]
|
||||
upsmon?: "primary" | "secondary"
|
||||
|
||||
schema Listen:
|
||||
"""Schema for listen socket address"""
|
||||
|
||||
address: str = "::"
|
||||
port: int = 3493
|
||||
|
||||
schema Nut:
|
||||
"""Schema for NUT configuration"""
|
||||
|
||||
listen = Listen()
|
||||
ups: {str:Ups} = {}
|
||||
users: {str:User} = {}
|
|
@ -0,0 +1,46 @@
|
|||
templates = [
|
||||
{
|
||||
template = "nut/nut.sysusers"
|
||||
dest = "/etc/sysusers.d/nut.conf"
|
||||
hooks = {
|
||||
changed = [{
|
||||
run = "systemd-sysusers %s"
|
||||
immediate = True
|
||||
}]
|
||||
}
|
||||
}
|
||||
{
|
||||
template = "nut/ups.conf"
|
||||
dest = "/etc/ups/ups.conf"
|
||||
hooks = {
|
||||
changed = [{run = "systemctl try-restart nut-server"}]
|
||||
}
|
||||
}
|
||||
{
|
||||
template = "nut/upsd.conf"
|
||||
dest = "/etc/ups/upsd.conf"
|
||||
owner = "root"
|
||||
group = "nut"
|
||||
mode = "u=rw,g=r,o="
|
||||
hooks = {
|
||||
changed = [{run = "systemctl try-reload-or-restart nut-server"}]
|
||||
}
|
||||
}
|
||||
{
|
||||
template = "nut/upsd.users"
|
||||
dest = "/etc/ups/upsd.users"
|
||||
owner = "root"
|
||||
group = "nut"
|
||||
mode = "u=rw,g=r,o="
|
||||
hooks = {
|
||||
changed = [{run = "systemctl try-reload-or-restart nut-server"}]
|
||||
}
|
||||
}
|
||||
{
|
||||
template = "nut/nut-server.container"
|
||||
dest = "/etc/containers/systemd/nut-server.container"
|
||||
hooks = {
|
||||
changed = [{run = "systemctl restart nut-server"}]
|
||||
}
|
||||
}
|
||||
]
|
|
@ -0,0 +1,23 @@
|
|||
# vim: set ft=systemd :
|
||||
[Unit]
|
||||
Description=Network UPS Tools - power devices information server
|
||||
Wants=network-online.target
|
||||
After=network-online.target
|
||||
Before=nut-monitor.service
|
||||
|
||||
[Container]
|
||||
Image=git.pyrocufflink.net/containerimages/nut:latest
|
||||
Pull=newer
|
||||
RunInit=true
|
||||
Volume=/etc/ups:/etc/ups:ro
|
||||
Volume=/dev:/dev:rw
|
||||
ReadOnly=true
|
||||
VolatileTmp=true
|
||||
PodmanArgs=--privileged
|
||||
Network=host
|
||||
|
||||
[Service]
|
||||
ExecReload=podman exec systemd-%N upsd -c reload
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
|
@ -0,0 +1,4 @@
|
|||
g nut 57
|
||||
u nut 57:57 "Network UPS Tools" /var/lib/ups /bin/false
|
||||
m nut tty
|
||||
m nut dialout
|
|
@ -0,0 +1,7 @@
|
|||
{% for name, ups in nut.ups %}{% if not loop.first %}
|
||||
{% endif -%}
|
||||
[{{ name }}]
|
||||
{% for key, value in ups -%}
|
||||
{{ key }} = "{{ value }}"
|
||||
{% endfor -%}
|
||||
{% endfor -%}
|
|
@ -0,0 +1 @@
|
|||
LISTEN {{ nut.listen.address }} {{ nut.listen.port }}
|
|
@ -0,0 +1,14 @@
|
|||
{% for username, settings in nut.users %}{% if not loop.first %}
|
||||
{% endif -%}
|
||||
[{{ username }}]
|
||||
password = {{ settings.password | decrypt }}
|
||||
{% for action in settings.actions|default(value=[]) -%}
|
||||
actions = {{ action }}
|
||||
{% endfor -%}
|
||||
{% for instcmds in settings.instcmds|default(value=[]) -%}
|
||||
instcmds = {{ instcmds }}
|
||||
{% endfor -%}
|
||||
{% if settings.upsmon is defined -%}
|
||||
upsmon {{ settings.upsmon }}
|
||||
{% endif -%}
|
||||
{% endfor -%}
|
Loading…
Reference in New Issue