De Playbook-Laf endet gréng, d'WireGuard-Unit ass aktiv, den Handshake funktionéiert, an den neie Peer erreecht trotzdem näischt. E Playbook mat Erfollegsmeldung ze gesinn, trong de Server mat der Konfiguratioun vun gëschter leeft, ass besonnesch frustréierend, well an der Ausgab näischt falsch ass. Ansible huet genau dat gemaach, wat gefrot gouf: et huet séchergestallt, datt d'Unit gestart ass, an d'Unit war schonn gestart. Eng nei geschriwwe Konfiguratiounsdatei unzewennen ass eng aner Aufgab, an dat geschitt nëmme wann eppes dem Service seet, se nach eng Kéier ze liesen.

Kuckt wat en zweeten Laf tatsächlech mellt

Start de Playbook zweemol mat der geännerter Konfiguratioun a vergläich d'Zesummefaassung. Den zweeten Laf sollt d'Unit-Aufgab als ok weisen, net als changed, well en Service dee schonn leeft bewosst an Rou gelooss gëtt. Dat ass Idempotenz déi richteg funktionéiert, an dat ass och de Grond firwat déi nei Datei ni an de Kernel kënnt.

Füügt en Iwwerpréiwungslaf mat diff-Ausgab dobäi, fir ze gesinn wéi eng Aufgaben iwwerhaapt eppes beréieren.

ansible-playbook -i inventory site.yml --check --diff
systemctl show wg-quick@wg0 -p ActiveEnterTimestamp -p NRestarts
stat -c '%y %n' /etc/wireguard/wg0.conf

Déi dräi Zäitstempel erzielen d'Geschicht éier Dir eng eenzeg Logzeil liest. Wann d'Konfiguratiounsdatei méi nei ass wéi de Moment wou d'Unit aktiv gouf, ass de lafenden Interface aus enger méi aler Datei gebaut, an all weider Symptomer kommen dohier.

Dat ass kee Feeler vun Ansible. Datselwecht Verhalen erschéngt bei all Konfiguratiounsmanagement-Werkzeug, dat «sécherstellen datt et leeft» vun «sécherstellen datt et dëst leeft» trennt. Den Ënnerscheed schéngt pedantesch bis en Iech en Nomëtteg kascht.

Gestart ass en Zoustand, keen Neiliischen

state: started behaapt eng Bedingung iwwer d'Unit. Et versprécht net, datt de Service seng Inpute nees liest, an et kann net wëssen, datt eng Datei déi et ni opgemaach huet sech geännert huet. Bei enger wg-quick-Bereitstellung enthalen d'Inputen d'Interface-Konfiguratioun, d'Adressen, d'Routen, d'DNS-Andräg an all post-up-Hooks.

Dofir kann eng aktualiséiert Datei en neie Peer, eng aner Adress oder eng geännert Routing-Direktiv enthalen, während de liewegen Interface weider deen ale Set servéiert. Den Handshake geléngt nach well d'Schlësselen an d'Endpunkten déi geluede goufen nach gülteg sinn. Genau dat mécht de Feeler schwéier ze gesinn, an dofir jage Leit eng Stonn DNS nodréier ier se en Zäitstempel préiwen.

Zwee aner Moduloptiounen ginn dacks fir eng Léisung gehal. daemon_reload bréngt systemd dozou, Unit-Dateien nees ze liesen, wat fir eng WireGuard-Konfiguratiounsdatei irrelevant ass. state: reloaded freet d'Unit hir Reload-Aktioun auszeféieren, an ob déi dat mécht wat Dir braucht hänkt komplett vun der Unit of. Keng vun deenen zwou ersetzt d'Wëssen, wéi eng Inputen de lafende Prozess tatsächlech gelies huet.

Installéiert d'Datei, da benotzt en Handler

D'Muster dat Idempotenz erhält an trotzdem Ännerungen uwënnt ass dat gewéinlecht: d'Aufgab déi d'Datei schreift benotzt en Handler, an den Handler leeft nëmme wann d'Datei wierklech geännert huet. En zweeten Laf ouni Ännerungen mécht näischt, an dat ass wat Dir wëllt.

- name: write the interface configuration
  ansible.builtin.template:
    src: wg0.conf.j2
    dest: /etc/wireguard/wg0.conf
    owner: root
    mode: "0600"
  notify: apply wg0

- name: ensure the interface unit is enabled
  ansible.builtin.systemd_service:
    name: wg-quick@wg0
    enabled: true
    state: started

- name: apply wg0
  listen: apply wg0
  ansible.builtin.systemd_service:
    name: wg-quick@wg0
    state: restarted

Handleren lafen um Enn vum Play, no den Aufgaben déi se benotzt hunn, dofir kann eng Aufgab méi spéit am selwechte Play nach den ale Interface gesinn. Wann d'Reiefolleg wichteg ass, läscht d'Handleren ausdrécklech mat meta: flush_handlers éier d'Aufgab déi vun der neier Konfiguratioun ofhänkt.

Benotzt restart amplaz reload, ausser Dir hutt d'Reload-Aktioun vun der Unit iwwerpréift. D'Upstream-wg-quick-Unit ënnerstëtzt eng an synchroniséiert d'WireGuard-Konfiguratioun, awer se fëmmt d'Ariichtung vun Adressen, Routen, DNS oder Hooks net nach eng Kéier aus. En reload no engem neien Route-Direktiv schéngt dofir ze geléngen an ännert näischt.

Vergläicht dat lieweg Gerät mat der Datei

D'Préiwung déi dës Klass vu Feeler zoumécht ass e Verglach tëscht deem wat de Kernel hält an deem wat d'Datei seet. Zwee Kommandoen ginn vergläichbar Ausgab, an den Ënnerscheed ass d'Ofwäichung.

sudo wg showconf wg0
sudo wg-quick strip wg0
sudo diff <(sudo wg showconf wg0) <(sudo wg-quick strip wg0)

wg showconf dréckt dat lieweg Gerät aus, inklusiv dem private Schlëssel, behandelt déi Ausgab also als Geheimnis a pecht se net an en Ticket. wg-quick strip dréckt d'Datei ouni déi wg-quick-spezifesch Schlësselen aus, an dofir sinn déi zwee iwwerhaapt vergläichbar.

En Ënnerscheed an der Peer-Lëscht bedeit, datt d'Datei ni ugewannt gouf. En Ënnerscheed nëmmen an Schlësselen oder Endpunkten déi Dir erwaart hutt, bedeit datt eppes se deelweis ugewannt huet. Kee Ënnerscheed bedeit, datt d'Konfiguratioun aktuell ass an de Feeler soss anzwousch läit, wat u sech en nëtzlech Resultat ass.

Bezuelt d'Käschte vum Neistart bewosst

En Neistart vum Interface rappt den Tunnel of, an wann deen Tunnel Är administrativ Sëtzung dréit, mécht den Neistart déi Sëtzung fäerdeg déi en ugefrot huet. Setzt den Handler hannert e Change-Fënster, oder start de Playbook vun engem Verwueltungswee deen net vum Neistart vum Interface ofhänkt.

D'Käschte sinn de Grond firwat Leit op reload gräifen. Dat ass en raisonnabel Instinkt, an en gëtt richteg wann Dir wësst wéi eng Ännerungen en reload tatsächlech uwënnt. Fir Peer- an Schlësselännerungen op der Upstream-wg-quick-Unit duet et; fir Adresséierung, Routing an Hooks net. Dat eng Kéier kloer ze maachen ass méi bëlleg wéi et während engem Change-Fënster ze entdecken.

D'Dokumentatioun vum systemd_service-Modul erkläert den Ënnerscheed tëscht started, restarted an reloaded, an et lount sech eng Kéier ze liesen amplaz se aus enger grénger Zesummefaassung ofzeleeden. Alles an dësem Duerchgang kënnt aus deem eenzegen Ënnerscheed.

Ähnlech Artikelen