gekmihesg.openwrt

Ansible-Rolle: openwrt

Verwalte OpenWRT und Abkömmlinge mit Ansible, aber ohne Python.

Indem du einen Host in die Inventargruppe openwrt einfügst, werden einige Module durch eine Shell-Version ersetzt, die auf einer Standard-OpenWRT-Installation läuft, wobei versucht wird, die meisten ursprünglichen Funktionen beizubehalten. Hosts, die nicht in dieser Gruppe sind, sind nicht betroffen. Dies ermöglicht es, Aufgaben mit OpenWRT und anderen Plattformen zu mischen. Es sind auch einige neue, OpenWRT-spezifische Module enthalten (wie uci). Nicht alle Argumentkombinationen sind getestet! Einige Fälle wurden nur aus Vollständigkeitsgründen von Python übersetzt.

Derzeit sind die folgenden Module implementiert:

  • command
  • copy
  • fetch (implizit)
  • file
  • lineinfile
  • nohup (neu)
  • opkg
  • ping
  • service
  • setup
  • shell (implizit)
  • slurp
  • stat
  • sysctl
  • template (implizit)
  • uci (neu)
  • wait_for_connection (implizit)

Um all dies zu erreichen, sind einige Anpassungen erforderlich (falls du dich über die vars_plugins wunderst).

Kompatibilität

Diese Rolle wurde erfolgreich getestet mit:

  • LEDE 17.01 (manuell)
  • OpenWRT 18.06
  • OpenWRT 19.07
  • OpenWRT 21.02
  • OpenWRT 22.03

Anforderungen

Einige Module benötigen optional eine Möglichkeit, SHA1-Hashes zu generieren oder Daten Base64 zu codieren. Im Falle von Base64 gibt es eine sehr langsame hexdump | awk Implementierung. Für SHA1 gibt es keinen Workaround. Die Module versuchen, verwendbare Systembefehle für SHA1 (sha1sum, openssl) und Base64 (base64, openssl, Workaround) zu finden, wenn nötig. Wenn keine verwendbaren Befehle gefunden werden, funktioniert die meiste Funktionalität weiterhin, aber das fetch-Modul muss zum Beispiel mit validate_checksum: no ausgeführt werden, wird immer die Datei herunterladen und changed: yes zurückgeben. Daher wird empfohlen, coreutils-sha1sum und coreutils-base64 zu installieren, wenn die Befehle nicht bereits von Busybox bereitgestellt werden. Die Rolle erledigt dies standardmäßig automatisch (siehe unten).

Rollenvariablen

openwrt_install_recommended_packages:
    Überprüft einige Befehle und installiert die entsprechenden Pakete, wenn sie fehlen.
    Siehe Anforderungen oben. (Standard: ja)

openwrt_scp_if_ssh:
    Ob scp anstelle von sftp für OpenWRT-Systeme verwendet werden soll. Der Wert kann `ja`,
    `nein` oder `intelligent` sein. Ansible verwendet standardmäßig `intelligent`, aber diese Rolle verwendet standardmäßig `ja`,
    da OpenWRT standardmäßig kein sftp anbietet. (Standard: ja)

openwrt_remote_tmp:
    Ansibles remote_tmp-Einstellung für OpenWRT-Systeme. Standardmäßig auf /tmp eingestellt, um 
    Flash-Verschleiß auf dem Zielgerät zu vermeiden. (Standard: /tmp)

openwrt_wait_for_connection, openwrt_wait_for_connection_timeout:
    Ob auf den Host gewartet werden soll (Standard: ja) und wie lange (300), nach einem 
    Netzwerk- oder WLAN-Neustart (siehe Handler).

openwrt_ssh, openwrt_scp, openwrt_ssh_host, openwrt_ssh_user, openwrt_user_host:
    Hilfsshortcuts, um Dinge wie
    "command: {{ openwrt_scp }} {{ openwrt_user_host|quote }}:/etc/rc.local /tmp" zu tun.

Beispiel-Playbook

Inventar:

[aps]
ap1.example.com
ap2.example.com
ap3.example.com

[routers]
router1.example.com

[openwrt:children]
aps
routers

Playbook:

- hosts: openwrt
  roles:
    - gekmihesg.openwrt
  tasks:
    - name: OpenWRT-Image kopieren
      command: "{{ openwrt_scp }} image.bin {{ openwrt_user_host|quote }}:/tmp/sysupgrade.bin"
      delegate_to: localhost
    - name: Sysupgrade starten
      nohup:
        command: sysupgrade -q /tmp/sysupgrade.bin
    - name: Auf Neustart warten
      wait_for_connection:
        timeout: 300
        delay: 60
    - name: mdns installieren
      opkg:
        name: mdns
        state: present
    - name: mdns aktivieren und starten
      service:
        name: mdns
        state: started
        enabled: yes
    - name: autorisierte Schlüssel kopieren
      copy:
        src: authorized_keys
        dest: /etc/dropbear/authorized_keys
    - name: ausstehende Änderungen zurücksetzen
      uci:
        command: revert
    - name: WLAN-Gerät radio0 konfigurieren
      uci:
        command: set
        key: wireless.radio0
        value:
          phy: phy0
          type: mac80211
          hwmode: 11g
          channel: auto
    - name: WLAN-Schnittstelle konfigurieren
      uci:
        command: section
        config: wireless
        type: wifi-iface
        find_by:
          device: radio0
          mode: ap
        value:
          ssid: MeinSSID
          encryption: psk2+ccmp
          key: sehr geheim
    - name: Änderungen übernehmen
      uci:
        command: commit
      notify: WLAN neu laden

Die Module außerhalb eines Playbooks auszuführen, ist so möglich:

$ export ANSIBLE_LIBRARY=~/.ansible/roles/gekmihesg.openwrt/library
$ export ANSIBLE_VARS_PLUGINS=~/.ansible/roles/gekmihesg.openwrt/vars_plugins
$ ansible -i openwrt-hosts -m setup all

Lizenz

GNU General Public License v3.0 (siehe https://www.gnu.org/licenses/gpl-3.0.txt)

Entwicklung

Das Schreiben eigener Module für dieses Framework ist nicht schwer. Die Module sind in ein Wrapper-Skript eingebettet, das einige gemeinsame Funktionen für Parameteranalyse, JSON-Verarbeitung, Antwortgenerierung und mehr bereitstellt. Alle Module müssen dem Muster openwrt_<modul_name>.sh entsprechen. Wenn modul_name nicht eines der Kernmodule von Ansible ist, muss auch eine <modul_name>.py vorhanden sein. Diese muss keine Funktionalität haben (sie kann einige für Nicht-OpenWRT-Systeme haben) und kann die Dokumentation enthalten.

Stelle sicher, dass du die Pakete aus requirements.txt in deiner virtuellen Umgebung installierst und, mit aktivierter venv, führe Folgendes aus:

$ molecule test

bevor du deine Änderungen committest und einreichst.

Es wird auch dringend empfohlen, Tests für dein neues Modul zu schreiben.

Über das Projekt

Manage OpenWRT without python

Installieren
ansible-galaxy install gekmihesg.openwrt
Lizenz
gpl-3.0
Downloads
35.5k
Besitzer