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.
ansible-galaxy install gekmihesg.openwrt