--- # NUT server. The UPS is on USB here, so this host drives it and serves # status to truenas.localdomain over the network. - name: set NUT run mode to netserver become: true ansible.builtin.template: src: nut.conf.j2 dest: /etc/ups/nut.conf owner: root group: nut mode: '0640' notify: - reload nut driver units - restart nut driver - restart nut server - restart nut monitor tags: ups - name: deploy NUT driver configuration become: true ansible.builtin.template: src: ups.conf.j2 dest: /etc/ups/ups.conf owner: root group: nut mode: '0640' notify: - reload nut driver units - restart nut driver - restart nut server tags: ups - name: deploy upsd listener configuration become: true ansible.builtin.template: src: upsd.conf.j2 dest: /etc/ups/upsd.conf owner: root group: nut mode: '0640' notify: restart nut server tags: ups - name: deploy upsd users become: true ansible.builtin.template: src: upsd.users.j2 dest: /etc/ups/upsd.users owner: root group: nut mode: '0640' notify: - restart nut server - restart nut monitor tags: ups - name: deploy upsmon configuration become: true ansible.builtin.template: src: upsmon.conf.j2 dest: /etc/ups/upsmon.conf owner: root group: nut mode: '0640' notify: restart nut monitor tags: ups - name: deploy upssched configuration become: true ansible.builtin.template: src: upssched.conf.j2 dest: /etc/ups/upssched.conf owner: root group: nut mode: '0640' notify: restart nut monitor tags: ups # The nut package ships /usr/lib/udev/rules.d/62-nut-usbups.rules, which # hands the UPS USB device to the nut user. Reload and retrigger so the # driver can claim it without physically replugging the UPS. - name: reload udev rules for NUT USB access become: true ansible.builtin.command: cmd: udevadm control --reload-rules changed_when: false tags: ups - name: retrigger UPS USB device become: true ansible.builtin.command: cmd: >- udevadm trigger --subsystem-match=usb --attr-match=idVendor={{ ups_vendorid }} changed_when: false tags: ups # nut-driver-enumerator reads ups.conf and generates nut-driver@{{ ups_name }}. # The .service is oneshot (so never "started" for long) and is triggered by # the .path unit watching ups.conf - enable both, but only start the .path. - name: enable NUT driver enumerator become: true ansible.builtin.systemd: name: nut-driver-enumerator.service enabled: true daemon_reload: true tags: ups - name: enable and start NUT driver enumerator path trigger become: true ansible.builtin.systemd: name: nut-driver-enumerator.path enabled: true state: started tags: ups - name: enable and start NUT services become: true ansible.builtin.systemd: name: "{{ item }}" enabled: true state: started loop: - "nut-driver@{{ ups_name }}.service" - nut-server.service - nut-monitor.service - nut.target tags: ups