Ansible role to configure NUT. This was designed to be pretty generic though it currently supports only the distros I use. Any contributions are welcome.
None.
- Raspbian 8: netserver mode fully working
- Fedora 24: netclient mode working (note name resolution issue at boot)
- Arch: Researching possibilities as no native package seems to exist but my main server is arch...
- Ubuntu: Untested (needs variable file)
- upssched.conf, host.conf upsset.conf, upsstats.html are not implemented yet as I do not use it. Some require special handling as some require a specific rendering order. The dictionaries that are used above cannot be used here. This file needs to use arrays to preserve order.
- On Fedora 24 upsmon doesn't want to resolve DNS names for a NUT server at boot. It works fine if the service is bounced after boot. Alternatively using an IP just works. I am investigating this as I want DNS resolution.
- UDEV rules may not be present on the host with the UPS. If that is the case the role may fail when starting the USB drivers. After UDEV rules are installed you will need to unplug the UPS and replug it in. Then run the role again. This happens because something may bind to the USB device before the UDEV rules prevent this. (Educated guess)
- The vars folder contains examples of distribution specific variables.
- The defaults folder should contain examples of all available variables in each NUT config file. Note that these are rarely accessed by name from templates so if more are added in the future this role shouldn't need an update to use them. Just add additional parameters.
- See the examples on how to use array variables.
- The defaults should always be overridden by the user.
- The default values reflect NUT defaults in Raspbian 8.
- You will find documentation for all config options at http://networkupstools.org/docs/man/.
Here are a couple working examples of how to use this role. Note that host names and IPs have been obfuscated.
Notes:
- {{nut_user}} comes from the distro specific variables in the var directory.
- Notice the LISTEN variable is an example of how to use the array type variables from the defaults/main.yml.
- Notice upsmon master entry is set to ''. This is interpreted differently by the template as this part of the config doesn't follow ini standards.
- {{ansible_default_ipv4.address}} comes from the setup module in ansible.
NUT Server that will monitor itself with a Cyberpower 1350C UPS:
---
- hosts: ups
become: yes
vars:
roles:
- role: nut
nut_nut_conf:
MODE: netserver
UPSD_OPTIONS: '""'
UPSMON_OPTIONS: '""'
nut_ups_conf:
globals:
maxretry: 3
user: "{{nut_user}}"
upses:
ups01:
driver: usbhid-ups
port: auto
desc: Primary UPS
override.battery.charge.low: 20
override.battery.charge.warning: 30
nut_upsd_users:
admin:
password: password1
actions:
- set
- fsd
instcmds: all
monitor:
password: password2
upsmon master: '' #special entry, doesn't follow normal ini format.
nut_upsd_conf:
LISTEN:
- "{{ansible_default_ipv4.address}} 3493"
- 127.0.0.1 3493
nut_upsmon_conf:
DEADTIME: 15
FINALDELAY: 60
HOSTSYNC: 15
MINSUPPLIES: 1
MONITOR:
- "ups01@localhost:3493 1 monitor password2 master"
NOCOMMWARNTIME: 300
POLLFREQ: 5
POLLFREQALERT: 5
POWERDOWNFLAG: /etc/killpower
RBWARNTIME: 43200
SHUTDOWNCMD: '"/sbin/shutdown -h +0"'
RUN_AS_USER: "{{nut_user}}"
NUT Client that will monitor the above server.
---
- hosts: client
become: yes
vars:
roles:
- role: nut
nut_nut_conf:
MODE: netclient
UPSD_OPTIONS: '""'
UPSMON_OPTIONS: '""'
nut_upsmon_conf:
DEADTIME: 15
FINALDELAY: 5
HOSTSYNC: 15
MINSUPPLIES: 1
MONITOR:
- "[email protected]:3493 1 monitor password2 slave"
NOCOMMWARNTIME: 300
POLLFREQ: 5
POLLFREQALERT: 5
POWERDOWNFLAG: /etc/killpower
RBWARNTIME: 43200
SHUTDOWNCMD: '"/sbin/shutdown -h +0"'
RUN_AS_USER: "{{nut_user}}"
GPLv3
Yevgeniy Kuksenko