15 Commits

Author SHA1 Message Date
10fd5b8668 fix: add handlers for odhcpd / dnsmasq reload
for: issue #6

Based on 01fda612ae/handlers/main.yml (L8)
2026-04-26 18:09:27 -04:00
26ef6cdc33 feat: Separate network/wifi/dhcp into separate yaml; disable dhcp
- "disable dhcp" -- erasing /etc/config/dhcp will / should also
prevent odhcpcd from starting.

For: issue #6
2026-04-26 18:02:47 -04:00
728a897fec fix: tear down default surplus wifi-iface(s)
Fixes: issue #5
2026-04-26 17:43:05 -04:00
120a2b5a93 feat: add new key hashes from bielik/zephyr 2026-03-29 15:15:29 -04:00
9c43186e5a feat: add ap3825i11/12 2026-03-29 15:15:13 -04:00
44e2634b6e Add ap3825i10 2024-07-25 14:27:24 -04:00
e92dbe3658 feat: enable dawn
Now that we're on ath9k-only ...
2024-07-09 13:32:02 -04:00
2c04241abb feat: Swap all 5 APs for ath9k cards
Details:

https://discord.com/channels/910601480241836112/910602028747751454/1259957870699745300
2024-07-09 13:31:01 -04:00
fcbb8826cf cleanup: drop prometheus-.*ucode, which aren't available in 23.05.3 2024-07-08 22:49:02 -04:00
4dc1d44aea feat: Re-add ap3825i7 2024-07-08 22:48:17 -04:00
97bfe982cf cleanup: drop STP everywhere
STP is hellishly annoying just like 802.11s is.

So, drop both of them.

Wow! No more issues.
2024-07-01 19:54:05 -04:00
69c6be8453 feat: Add prometheus packages
This commit has the install code add the prometheus packages.
2024-07-01 19:52:18 -04:00
fa5fbb4c7d feat: add ap3935i1, 2
These two APs replace ap3825i6 (conf room) and ap3825i4 (fishbowl
AP) respectively. We switch to the full-htt Candelatech firmware
in hopes that it will handle many concurrent users more gracefully.
2024-07-01 19:51:26 -04:00
5b4e8e0147 feat: dropbear: add neo, jafar pubkeys
This commit just directly adds the pubkeys to git. They're not special
or in need of protection. Makes this code more portable... for now.
2024-07-01 19:50:08 -04:00
714f7dc85f cleanup: drop missing APs
- mr16_4 has been gone for a while.
- ap3825i7 is no longer reachable.
- ap3825i6 (conference room AP) replaced.
- ap3825i4 (fishbowl AP) replaced.
- ap3825i1 (office 7 mesh AP) discontinued.
2024-07-01 19:44:11 -04:00
10 changed files with 547 additions and 246 deletions

View File

@@ -9,6 +9,14 @@ templates:
- name: ath10k-firmware-qca988x
state: present
package_ath10k_99x0_full: &package_ath10k_99x0_full
- name: kmod-ath10k-ct
state: present
- name: ath10k-firmware-qca99x0-ct
state: absent
- name: ath10k-firmware-qca99x0-ct-full-htt
state: present
package_wpad_mesh: &package_wpad_mesh
- name: wpad-basic-wolfssl
state: absent
@@ -38,9 +46,9 @@ templates:
openwrt:
hosts:
ap3825i1:
ap3825i7:
packages:
ath10k: *package_ath10k_mesh
wpad: *package_wpad_mesh
network:
@@ -50,18 +58,288 @@ openwrt:
ports:
- eth0
- eth1
stp: 1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: qca9880_5
template: ath9k_5
channel: 149
- name: radio1
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 11
wifi_iface:
- ifname: labb2
device: radio1
template: labb
- ifname: labb5
device: radio0
template: labb
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
device: radio0
template: vgo5
- ifname: vgo2n
device: radio1
template: vgo2n
- ifname: vgo5n
device: radio0
template: vgo5n
ap3825i8:
packages:
wpad: *package_wpad_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: ath9k_5
channel: 157
- name: radio1
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 6
wifi_iface:
- ifname: labb2
device: radio1
template: labb
- ifname: labb5
device: radio0
template: labb
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
device: radio0
template: vgo5
- ifname: vgo2n
device: radio1
template: vgo2n
- ifname: vgo5n
device: radio0
template: vgo5n
ap3825i9:
packages:
wpad: *package_wpad_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: ath9k_5
channel: 161
- name: radio1
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 1
wifi_iface:
- ifname: labb2
device: radio1
template: labb
- ifname: labb5
device: radio0
template: labb
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
device: radio0
template: vgo5
- ifname: vgo2n
device: radio1
template: vgo2n
- ifname: vgo5n
device: radio0
template: vgo5n
ap3825i4:
packages:
wpad: *package_wpad_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: ath9k_5
channel: 36
- name: radio1
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 1
wifi_iface:
- ifname: labb2
device: radio1
template: labb
- ifname: labb5
device: radio0
template: labb
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
device: radio0
template: vgo5
- ifname: vgo2n
device: radio1
template: vgo2n
- ifname: vgo5n
device: radio0
template: vgo5n
ap3825i6:
packages:
wpad: *package_wpad_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: ath9k_5
channel: 48
- name: radio1
@@ -70,19 +348,34 @@ openwrt:
channel: 11
wifi_iface:
- ifname: labbmesh5
device: radio0
template: labbmesh
disabled: 0
- ifname: labb2
device: radio1
template: labb
ap3825i4:
- ifname: labb5
device: radio0
template: labb
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
device: radio0
template: vgo5
- ifname: vgo2n
device: radio1
template: vgo2n
- ifname: vgo5n
device: radio0
template: vgo5n
ap3825i10:
packages:
ath10k: *package_ath10k_mesh
wpad: *package_wpad_mesh
ath10k: *package_ath10k_mesh
network:
device:
@@ -90,84 +383,13 @@ openwrt:
type: bridge
ports:
- eth0
- eth1.7
stp: 1
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
stp: 1
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: qca9880_5
channel: 48
- name: radio1
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 6
wifi_iface:
- ifname: vgo2
device: radio1
template: vgo2
disabled: 0
- ifname: vgomesh2
device: radio1
template: vgomesh2
disabled: 0
- ifname: vgo5
device: radio0
template: vgo5
disabled: 0
- ifname: labb2
device: radio1
template: labb
- ifname: labbmesh5
device: radio0
template: labbmesh
disabled: 0
- ifname: labb5
device: radio0
template: labb
- ifname: labbmesh2
device: radio1
template: labbmesh
disabled: 0
ap3825i3:
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1
interface:
- key: lan
@@ -191,84 +413,72 @@ openwrt:
channel: 1
wifi_iface:
- ifname: vgo2
device: radio1
template: vgo2
- ifname: vgo5
- ifname: vgo5c
device: radio0
template: vgo5
template: vgo5c
- ifname: labb2
device: radio1
template: labb
ap3825i11:
packages:
wpad: *package_wpad_mesh
ath10k: *package_ath10k_mesh
- ifname: labb5
device: radio0
template: labb
mr16_4:
network:
device:
- name: br-lan
type: bridge
ports:
- eth1
- name: br-vgolan
type: bridge
ports:
- eth0
stp: 1
- eth1.2
interface:
- key: lan
device: br-lan
proto: dhcp
- key: vgolan
device: br-vgolan
proto: dhcp
wireless:
wifi_device:
- name: radio0
path: pci0000:00/0000:00:11.0
template: ath9k_2
hwmode:
band: 2g
channel: 6
disabled: 1
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: qca9880_5
channel: 157
- name: radio1
path: pci0000:00/0000:00:12.0
template: ath9k_5
hwmode:
band: 5g
channel: 48
path: ffe09000.pcie/pci9000:00/9000:00:00.0/9000:01:00.0
template: ath9k_2
channel: 1
wifi_iface:
- ifname: labbmesh2
- ifname: vgo5c
device: radio0
template: labbmesh
template: vgo5c
- ifname: labbmesh5
device: radio1
template: labbmesh
ap3825i7:
ap3825i12:
packages:
ath10k: *package_ath10k_mesh
wpad: *package_wpad_mesh
ath10k: *package_ath10k_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0.7
- eth1.7
- eth0
- eth1
stp: 1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
stp: 1
interface:
- key: lan
@@ -281,7 +491,6 @@ openwrt:
wireless:
wifi_device:
- name: radio0
path: ffe0a000.pcie/pcia000:02/a000:02:00.0/a000:03:00.0
template: qca9880_5
@@ -293,40 +502,28 @@ openwrt:
channel: 1
wifi_iface:
- ifname: labb2
- ifname: vgo5c
device: radio0
template: labb
template: vgo5c
- ifname: labb5
device: radio1
template: labb
- ifname: vgo2
device: radio0
template: vgo2
- ifname: vgo5
device: radio1
template: vgo5
ap3825i6:
ap3825i13:
packages:
ath10k: *package_ath10k_mesh
wpad: *package_wpad_mesh
ath10k: *package_ath10k_mesh
network:
device:
- name: br-lan
type: bridge
ports:
- eth0
- eth1
stp: 1
- name: br-vgolan
type: bridge
ports:
- eth0.2
- eth1.2
stp: 1
interface:
- key: lan
@@ -350,20 +547,6 @@ openwrt:
channel: 1
wifi_iface:
- ifname: vgo2
device: radio1
template: vgo2
disabled: 0
- ifname: vgo5
- ifname: vgo5c
device: radio0
template: vgo5
disabled: 0
- ifname: labb2
device: radio1
template: labb
- ifname: labb5
device: radio0
template: labb
template: vgo5c

View File

@@ -25,10 +25,14 @@
- name: Update authorized keys
lineinfile:
path: /etc/dropbear/authorized_keys
line: "{{ lookup('file', lookup('env', 'HOME') + '/.ssh/id_ed25519.pub') }}"
line: "{{ item }}"
state: present
create: yes
mode: 644
loop:
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBEysezzehXkUOm8u8nXP+YloSE8JpKYevCslao5tB2l root@neo"
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILCYhh9Fjo8bV5rV6UfvwDgR+NlmCfKuR14iXgmILeDj hurricos@bielik"
- "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPh3R8BXv9geqJMaxi134Y5hcOVZPQ/rfghjszYMFG5z hurricos@zephyr"
- name: Disable Root password authentication
uci:

View File

@@ -0,0 +1,12 @@
---
- name: reload odhcpd
nohup:
command: /etc/init.d/odhcpd reload
delay: 1
when: "'openwrt' in group_names"
- name: reload dnsmasq
nohup:
command: /etc/init.d/dnsmasq reload
delay: 1
when: "'openwrt' in group_names"

View File

@@ -1,75 +1,8 @@
- name: Setup network devices
uci:
command: section
config: network
type: device
find_by:
name: "{{ item.name }}"
value:
type: "{{ item.type }}"
ports: "{{ item.ports }}"
stp: "{{ item.stp | default() }}"
loop: "{{ network['device'] }}"
- name: Setup dhcp
ansible.builtin.import_tasks: setup_dhcp.yml
- name: Setup network interfaces
uci:
command: section
config: network
type: interface
name: "{{ item.key }}"
value:
device: "{{ item.device }}"
proto: "{{ item.proto }}"
ifname: "{{ item.ifname | default() }}"
loop: "{{ network['interface'] }}"
- name: Setup network
ansible.builtin.import_tasks: setup_network.yml
- name: commit changes
uci:
command: commit
key: network
notify: restart network
- name: Setup wireless devices (radios)
uci:
command: section
config: wireless
type: wifi-device
find_by:
path: "{{ item.path }}"
name: "{{ item.name }}"
value:
type: "mac80211" # they'd BETTER be.
band: "{{ item.band | default(wifi_device[item.template].band) | default() }}"
channel: "{{ item.channel | default(wifi_device[item.template].channel) }}"
country: "{{ item.country | default(wifi_device[item.template].country) }}"
disabled: "{{ item.disabled | default(wifi_device[item.template].disabled) }}"
hwmode: "{{ item.hwmode | default(wifi_device[item.template].hwmode) | default() }}"
htmode: "{{ item.htmode | default(wifi_device[item.template].htmode) }}"
log_level: "{{ item.log_level | default(wifi_device[item.template].log_level) | default() }}"
loop: "{{ wireless['wifi_device'] }}"
- name: Setup wireless ifaces (VIFs)
uci:
command: section
config: wireless
type: wifi-iface
name: "{{ item.ifname | default(wifi_iface[item.template].ifname) | default('') }}"
value:
ifname: "{{ item.ifname | default(wifi_iface[item.template].ifname) | default('') if not item.force_ifnameless | default(false) }}"
mode: "{{ item.mode | default(wifi_iface[item.template].mode) }}"
device: "{{ item.device | default(wifi_iface[item.template].device) }}"
network: "{{ item.network | default(wifi_iface[item.template].network) }}"
ssid: "{{ item.ssid | default(wifi_iface[item.template].ssid) | default() }}"
mesh_id: "{{ item.mesh_id | default(wifi_iface[item.template].mesh_id) | default() }}"
encryption: "{{ item.encryption | default(wifi_iface[item.template].encryption) }}"
key: "{{ item.key | default(wifi_iface[item.template].key) }}"
disabled: "{{ item.disabled | default(wifi_iface[item.template].disabled) | default(0) }}"
skip_inactivity_poll: "{{ item.skip_inactivity_poll | default(wifi_iface[item.template].skip_inactivity_poll) | default() }}"
disassoc_low_ack: "{{ item.disassoc_low_ack | default(wifi_iface[item.template].disassoc_low_ack) | default() }}"
loop: "{{ wireless['wifi_iface'] }}"
- name: commit changes
uci:
command: commit
key: wireless
notify: reload wifi
- name: Setup wireless
ansible.builtin.import_tasks: setup_wireless.yml

View File

@@ -0,0 +1,8 @@
---
- name: Totally eliminate DHCP configuration
copy:
content: ''
dest: "/etc/config/dhcp"
notify: # https://selivan.github.io/2017/01/15/ansible-multiple-handlers-subtlety.html
- reload odhcpd
- reload dnsmasq

View File

@@ -0,0 +1,31 @@
---
- name: Setup network devices
uci:
command: section
config: network
type: device
find_by:
name: "{{ item.name }}"
value:
type: "{{ item.type }}"
ports: "{{ item.ports }}"
stp: "{{ item.stp | default() }}"
loop: "{{ network['device'] }}"
- name: Setup network interfaces
uci:
command: section
config: network
type: interface
name: "{{ item.key }}"
value:
device: "{{ item.device }}"
proto: "{{ item.proto }}"
ifname: "{{ item.ifname | default() }}"
loop: "{{ network['interface'] }}"
- name: commit changes
uci:
command: commit
key: network
notify: restart network

View File

@@ -0,0 +1,58 @@
---
- name: Tear down the default wifi-iface(s)
uci:
config: wireless
command: absent
section: "{{ item }}"
loop:
- default_radio0
- default_radio1
- name: Setup wireless devices (radios)
uci:
command: section
config: wireless
type: wifi-device
find_by:
path: "{{ item.path }}"
name: "{{ item.name }}"
value:
type: "mac80211" # they'd BETTER be.
band: "{{ item.band | default(wifi_device[item.template].band) | default() }}"
channel: "{{ item.channel | default(wifi_device[item.template].channel) }}"
country: "{{ item.country | default(wifi_device[item.template].country) }}"
disabled: "{{ item.disabled | default(wifi_device[item.template].disabled) }}"
hwmode: "{{ item.hwmode | default(wifi_device[item.template].hwmode) | default() }}"
htmode: "{{ item.htmode | default(wifi_device[item.template].htmode) }}"
log_level: "{{ item.log_level | default(wifi_device[item.template].log_level) | default() }}"
loop: "{{ wireless['wifi_device'] }}"
- name: Setup wireless ifaces (VIFs)
uci:
command: section
config: wireless
type: wifi-iface
name: "{{ item.ifname | default(wifi_iface[item.template].ifname) | default('') }}"
value:
ifname: "{{ item.ifname | default(wifi_iface[item.template].ifname) | default('') if not item.force_ifnameless | default(false) }}"
mode: "{{ item.mode | default(wifi_iface[item.template].mode) }}"
device: "{{ item.device | default(wifi_iface[item.template].device) }}"
network: "{{ item.network | default(wifi_iface[item.template].network) }}"
ssid: "{{ item.ssid | default(wifi_iface[item.template].ssid) | default() }}"
bss_transition: "{{ item.bss_transition | default(wifi_iface[item.template].bss_transition) | default() }}"
ieee80211k: "{{ item.ieee80211k | default(wifi_iface[item.template].ieee80211k) | default() }}"
ieee80211r: "{{ item.ieee80211r | default(wifi_iface[item.template].ieee80211r) | default() }}"
ieee80211v: "{{ item.ieee80211v | default(wifi_iface[item.template].ieee80211v) | default() }}"
mesh_id: "{{ item.mesh_id | default(wifi_iface[item.template].mesh_id) | default() }}"
encryption: "{{ item.encryption | default(wifi_iface[item.template].encryption) }}"
key: "{{ item.key | default(wifi_iface[item.template].key) }}"
disabled: "{{ item.disabled | default(wifi_iface[item.template].disabled) | default(0) }}"
skip_inactivity_poll: "{{ item.skip_inactivity_poll | default(wifi_iface[item.template].skip_inactivity_poll) | default() }}"
disassoc_low_ack: "{{ item.disassoc_low_ack | default(wifi_iface[item.template].disassoc_low_ack) | default() }}"
loop: "{{ wireless['wifi_iface'] }}"
- name: commit changes
uci:
command: commit
key: wireless
notify: reload wifi

View File

@@ -7,6 +7,10 @@ wifi_iface:
key: 'password'
skip_inactivity_poll: '1'
disassoc_low_ack: '0'
ieee80211k: 1
ieee80211r: 1
ieee80211v: 1
bss_transition: 1
vgo: &vgo_wifi_iface
<<: *default_wifi_iface
@@ -27,12 +31,21 @@ wifi_iface:
<<: *vgo_wifi_iface
ssid: 'Vermont Green Offices 5G'
mesh: &mesh_wifi_iface
ssid:
mode: 'mesh'
encryption: 'psk2+ccmp'
skip_inactivity_poll: 1
disassoc_low_ack:
vgo2n:
<<: *vgo_wifi_iface
ssid: 'Vermont Green Offices'
vgo5n:
<<: *vgo_wifi_iface
ssid: 'Vermont Green Offices'
vgo5c:
<<: *vgo_wifi_iface
ssid: 'Vermont Green Offices 5AC'
ieee80211k: 0
ieee80211r: 0
ieee80211v: 0
bss_transition: 0
labb: &labb_wifi_iface
<<: *default_wifi_iface
@@ -50,16 +63,6 @@ wifi_iface:
<<: *labb_wifi_iface
encryption: 'sae'
labbmesh:
<<: *labb_wifi_iface
<<: *mesh_wifi_iface
mesh_id: 'Laboratory B_Mesh'
vgomesh2:
<<: *vgo_wifi_iface
<<: *mesh_wifi_iface
mesh_id: 'Vermont Green Offices 2G_Mesh'
wifi_device:
default: &default_wifi_device

View File

@@ -3,3 +3,15 @@
argv:
- touch
- /tmp/test_proof
- name: Restart prometheus-ucode
service:
name: prometheus-node-exporter-ucode
state: restarted
enabled: yes
- name: Restart prometheus-lua
service:
name: prometheus-node-exporter-lua
state: restarted
enabled: yes

View File

@@ -27,3 +27,60 @@
state: "{{ item.state }}"
loop: "{{ packages.ath10k | default([]) }}"
notify: "{{ item.notify | default([]) }}"
# - name: Install prometheus-ucode packages
# opkg:
# name: "{{ item }}"
# state: present
# loop:
# - prometheus-node-exporter-ucode
# - prometheus-node-exporter-ucode-wifi
# - prometheus-node-exporter-ucode-netstat
# - prometheus-node-exporter-ucode-openwrt
# notify: Restart prometheus-ucode
# - name: Setup prometheus-ucode properly
# uci:
# command: set
# key: 'prometheus-node-exporter-ucode.main'
# value:
# listen_interface: 'lan'
# notify: Restart prometheus-ucode
# - name: commit changes to prometheus-node-exporter-ucode
# uci:
# command: commit
# key: prometheus-node-exporter-ucode
- name: Install prometheus-lua packages
opkg:
name: "{{ item }}"
state: present
loop:
- prometheus-node-exporter-lua
- prometheus-node-exporter-lua-wifi
- prometheus-node-exporter-lua-wifi_stations
- prometheus-node-exporter-lua-hostapd_stations
- prometheus-node-exporter-lua-hostapd_ubus_stations
- prometheus-node-exporter-lua-netstat
- prometheus-node-exporter-lua-dawn
notify: Restart prometheus-lua
- name: Setup prometheus-lua properly
uci:
command: set
key: 'prometheus-node-exporter-lua.main'
value:
listen_interface: 'lan'
notify: Restart prometheus-lua
- name: commit changes to prometheus-node-exporter-lua
uci:
command: commit
key: prometheus-node-exporter-lua
- name: Install dawn
opkg:
name: dawn
state: present