gekmihesg.openwrt

Ansible Role: openwrt

Zarządzaj OpenWRT i jego pochodnymi za pomocą Ansible, ale bez Pythona.

Dodając hosta do grupy inwentarza openwrt, niektóre moduły są zastępowane wersjami działającymi w powłoce na standardowej instalacji OpenWRT, starając się zachować większość oryginalnej funkcjonalności. Hosty, które nie są w tej grupie, nie są dotknięte. Umożliwia to mieszanie zadań z OpenWRT i innymi platformami. Są również dostępne pewne nowe moduły specyficzne dla OpenWRT (takie jak uci). Nie wszystkie kombinacje argumentów zostały przetestowane! Niektóre przypadki zostały jedynie przetłumaczone z Pythona dla pełności.

Obecnie zaimplementowano następujące moduły:

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

Aby to osiągnąć, użyto pewnego "monkey patching" (w przypadku gdy zastanawiasz się nad vars_plugins).

Kompatybilność

Ten rola została pomyślnie przetestowana z:

  • LEDE 17.01 (ręcznie)
  • OpenWRT 18.06
  • OpenWRT 19.07
  • OpenWRT 21.02
  • OpenWRT 22.03

Wymagania

Niektóre moduły opcjonalnie wymagają sposobu generowania skrótów SHA1 lub kodowania danych w Base64. W przypadku Base64, dołączono bardzo wolną implementację hexdump | awk. Nie ma obejścia dla SHA1. Moduły spróbują znaleźć dostępne polecenia systemowe dla SHA1 (sha1sum, openssl) i Base64 (base64, openssl, obejście) w razie potrzeby. Jeśli nie znajdą użytecznych poleceń, większość zadań i tak będzie działać, ale moduł fetch na przykład musi być uruchomiony z validate_checksum: no, zawsze pobierze plik i zwróci changed: yes. Zaleca się zainstalowanie coreutils-sha1sum i coreutils-base64, jeśli polecenia te nie są już dostarczane przez busybox. Rola robi to automatycznie domyślnie (zobacz poniżej).

Zmienne roli

openwrt_install_recommended_packages:
    Sprawdza pewne polecenia i instaluje odpowiednie pakiety, jeśli są
    brakujące. Patrz wymagania powyżej. (domyślnie: tak)

openwrt_scp_if_ssh:
    Czy używać scp zamiast sftp dla systemów OpenWRT. Możliwe wartości to `yes`,
    `no` lub `smart`. Ansible domyślnie ustawia na `smart`, ale ta rola domyślnie ustawia na `yes`
    ponieważ OpenWRT nie oferuje sftp domyślnie. (domyślnie: tak)

openwrt_remote_tmp:
    Ustawienie remote_tmp Ansible dla systemów OpenWRT. Domyślnie /tmp, aby uniknąć
    zużycia pamięci flash na docelowym urządzeniu. (domyślnie: /tmp)

openwrt_wait_for_connection, openwrt_wait_for_connection_timeout:
    Czy czekać na hosta (domyślnie: tak) i jak długo (300) po
    restarcie sieci lub wifi (patrz handlers).

openwrt_ssh, openwrt_scp, openwrt_ssh_host, openwrt_ssh_user, openwrt_user_host:
    Skróty pomocnicze, aby robić rzeczy takie jak
    "command: {{ openwrt_scp }} {{ openwrt_user_host|quote }}:/etc/rc.local /tmp"

Przykładowy Playbook

Inwentarz:

[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: skopiuj obraz openwrt
      command: "{{ openwrt_scp }} image.bin {{ openwrt_user_host|quote }}:/tmp/sysupgrade.bin"
      delegate_to: localhost
    - name: rozpocznij sysupgrade
      nohup:
        command: sysupgrade -q /tmp/sysupgrade.bin
    - name: czekaj na reboot
      wait_for_connection:
        timeout: 300
        delay: 60
    - name: zainstaluj mdns
      opkg:
        name: mdns
        state: present
    - name: włącz i uruchom mdns
      service:
        name: mdns
        state: started
        enabled: yes
    - name: skopiuj klucze autoryzacyjne
      copy:
        src: authorized_keys
        dest: /etc/dropbear/authorized_keys
    - name: cofnij oczekujące zmiany
      uci:
        command: revert
    - name: skonfiguruj radio0 urządzenia wifi
      uci:
        command: set
        key: wireless.radio0
        value:
          phy: phy0
          type: mac80211
          hwmode: 11g
          channel: auto
    - name: skonfiguruj interfejs wifi
      uci:
        command: section
        config: wireless
        type: wifi-iface
        find_by:
          device: radio0
          mode: ap
        value:
          ssid: MySSID
          encryption: psk2+ccmp
          key: very secret
    - name: zatwierdź zmiany
      uci:
        command: commit
      notify: przeładuj wifi

Uruchomienie modułów poza playbookiem jest możliwe w ten sposób:

$ 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

Licencja

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

Rozwój

Pisanie własnych modułów dla tego frameworka nie jest trudne. Moduły są zapakowane w skrypt powłoki, który zapewnia pewne wspólne funkcje dla analizy parametrów, obsługi json, generowania odpowiedzi i więcej. Wszystkie moduły muszą mieć nazwę openwrt_<module_name>.sh. Jeśli module_name nie jest jednym z podstawowych modułów Ansible, musi również istnieć <module_name>.py. Nie musi to mieć żadnej funkcji (może mieć ją dla systemów niezwiązanych z OpenWRT) i może zawierać dokumentację.

Upewnij się, że zainstalowałeś pakiety z requirements.txt w swoim wirtualnym środowisku i, po aktywacji venv, uruchom:

$ molecule test

przed zatwierdzeniem i przesłaniem swojego PR.

Pisanie testów dla nowego modułu jest również zdecydowanie zalecane.

O projekcie

Manage OpenWRT without python

Zainstaluj
ansible-galaxy install gekmihesg.openwrt
Licencja
gpl-3.0
Pobrania
35.5k
Właściciel