Freifunkknoten mit Ansible konfigurieren

An dieser Stelle habe ich meine Vorgehensweise beschrieben wie ich einen einzelnen Router so konfiguriere das er bestimmte Rechner nicht verbindet.

Da ich dies zukünftig nicht nur auf einem Router machen muss und auch noch weitere Konfigurationen auf verschiedenen Routern verwalten muss bietet es sich natürlich an hier wie auf meinen anderen Servern auch Ansible zu verwenden.

Leider gibt es aktuell noch kein richtiges Modul um die Paket- und Variablenverwaltung anzusprechen aber mit dem Modul “raw” kann man die Befehle selbst ausführen. Es fehlt zwar die Rückmeldung über das Ergebnis aber es ist immer noch besser als einloggen und “befehle pasten”

Zuerst brauchen wir in unserem Inventory Gruppen mit den Routernamen.

  [freifunk]
  su-mck-1
  
  [ff-update-server]
  su-mck-1
  
  [ff-nodes-with-acl]
  su-mck-1 

Für jeden Router habe ich eine Datei mit Host spezifischen Variablen.

more host_vars/su-mck-1
---
  ansible_port: 22 
  ansible_host: 192.168.xxx.yy
  ansible_user : root
  ff_acl_enabled_radios:
  - radio0
  - radio1
  ff_acl_enabled_macs: "00:11:22:33:C6:2C 00:yy:ee:34" 

Der Router hat zwei Antennen und in der Variable ff_acl_enabled_macs stehen die verbotenen Mac Adressen.

Das Playbook selbst sieht so aus (Da werden zukünftig noch weiter Aufgaben dazukommen)

   more freifunk.yml 
     ---
     - name: manage-ff-nodes
       hosts: freifunk
       gather_facts: no
       roles:
       - freifunk 

Im Role Verzeichnis habe ich die dazugehörigen Dateien

more roles/freifunk/tasks/main.yml 
    ---
    - include : set-acl-list.yml hosts=ff-nodes-with-acl
 
 more roles/freifunk/tasks/set-acl-list.yml 
    ---
    - name: enable deny for configured radios
      raw:  uci set wireless.client_.macfilter=deny
      with_items: ""
    - name: set denied mac addresses 
      raw: uci set wireless.client_.maclist=''
      with_items: ""
      ignore_errors: yes
      notify:
      - uci commit
      - reload network

Fehlt noch die Datei mit dem “Handler”

  more roles/freifunk/handlers/main.yml 
  ---
  - name: uci commit
    raw: uci commit
  - name: reload network
    raw: /etc/init.d/network reload

Jetzt kann ich mit einem Befehl auf allen Routern für die ich in den Hostvars die verschiedenen Antennen und unterschiedlichen Mac Adressen angegeben habe den Router konfigurieren.

ansible-playbook freifunk.yml 
 
PLAY [manage-ff-nodes] ************

TASK [freifunk : enable deny for configured radios]**
changed: [su-mck-1] => (item=radio0)
changed: [su-mck-1] => (item=radio1)

TASK [freifunk : set denied mac addresses] **
changed: [su-mck-1] => (item=radio0)
changed: [su-mck-1] => (item=radio1)

RUNNING HANDLER [freifunk : uci commit] **
changed: [su-mck-1]

RUNNING HANDLER [freifunk : reload network] ***
changed: [su-mck-1]

PLAY RECAP ************************************
su-mck-1                   : ok=4    changed=4    unreachable=0    failed=0