diff --git a/bundles/wpa-supplicant/files/wpa_supplicant.conf b/bundles/wpa-supplicant/files/wpa_supplicant.conf new file mode 100644 index 0000000..6326593 --- /dev/null +++ b/bundles/wpa-supplicant/files/wpa_supplicant.conf @@ -0,0 +1,7 @@ +update_config=0 +ctrl_interface=DIR=/var/run/wpa_supplicant + +network={ + ssid="${ssid}" + psk=${psk} +} diff --git a/bundles/wpa-supplicant/items.py b/bundles/wpa-supplicant/items.py new file mode 100644 index 0000000..3439a32 --- /dev/null +++ b/bundles/wpa-supplicant/items.py @@ -0,0 +1,43 @@ +import hashlib, binascii + + +def wpa_psk(ssid, password): + return binascii.hexlify( + hashlib.pbkdf2_hmac('sha1', str.encode(password), str.encode(ssid), 4096, 32) + ).decode() + + +interface = node.metadata.get('wpa-supplicant/interface') +ssid = node.metadata.get('wpa-supplicant/ssid') +passowrd = repo.vault.decrypt(node.metadata.get('wpa-supplicant/password')).value +psk = wpa_psk(ssid, passowrd) + +files = { + f'/etc/wpa_supplicant/wpa_supplicant-{interface}.conf': { + 'source': 'wpa_supplicant.conf', + 'content_type': 'mako', + 'context': { + 'ssid': ssid, + 'psk': psk, + }, + 'needs': [ + 'pkg_apt:wpasupplicant', + ], + 'triggers': [ + f'svc_systemd:wpa_supplicant@{interface}:restart', + ], + }, +} + +svc_systemd = { + 'wpa_supplicant': { + 'needs': [ + 'pkg_apt:wpasupplicant', + ], + }, + f'wpa_supplicant@{interface}': { + 'needs': [ + f'file:/etc/wpa_supplicant/wpa_supplicant-{interface}.conf', + ], + }, +} diff --git a/bundles/wpa-supplicant/metadata.py b/bundles/wpa-supplicant/metadata.py new file mode 100644 index 0000000..c56b55c --- /dev/null +++ b/bundles/wpa-supplicant/metadata.py @@ -0,0 +1,7 @@ +defaults = { + 'apt': { + 'packages': { + 'wpasupplicant': {}, + }, + }, +} diff --git a/nodes/home.stromzaehler.py b/nodes/home.stromzaehler.py index e21e725..7f355a7 100644 --- a/nodes/home.stromzaehler.py +++ b/nodes/home.stromzaehler.py @@ -7,6 +7,7 @@ ], 'bundles': [ 'stromzaehler', + 'wpa-supplicant', ], 'metadata': { 'id': 'dd521b8a-dc03-43f5-b29f-068f948ba3b8', @@ -16,9 +17,19 @@ 'ipv4': '10.0.0.15/24', 'gateway4': '10.0.0.1', }, + 'wlan': { + 'interface': 'wlan0', + 'ipv4': '10.0.0.16/24', + 'gateway4': '10.0.0.1', + }, }, 'stromzaehler': { 'influxdb_node': 'home.server', }, + 'wpa-supplicant': { + 'interface': 'wlan0', + 'ssid': 'wingl', + 'password': 'encrypt$gAAAAABhewMmeeBVKljTX3W3nb3vXaMtcJe2xSHpmCliG_JwPvxR6sgWbAokFpiV4RFL32wqxMZSd9KYPk0zV36WmqLiCWfWXg==', + }, }, }