Hallo,
ich versuche seit einigen Tagen mit Ansible und Git einige Playbooks umzusetzen. Einstellungen setzen und Standards definieren, ist soweit kein Problem.
Am meisten hänge ich bei dem Modulen rule und rule_multi. Es geht im Prinzip darum das Git als einzige Quelle der Wahrheit zu bauen. Vor allem die Funktion purge_all ist eigentlich interessant. Wenn ich es richtig verstanden habe, kann man damit alle Regeln im Zusammenspiel mit purge_filter von definierten Interfaces löschen und mit dem Stand abgleichen den man pushen möchte.
https://ansible-opnsense.oxl.app/modules/rule_multi.html
Bisher sieht es bei mir so hier aus:
---
tasks:
- name: Purge and Apply
oxlorg.opnsense.rule_multi:
multi_control:
fail_verify: true
purge_all: true
purge_filter:
interface: "lan,opt1,opt2,opt3,opt4"
rules: >
{{
[
(global_multi_interface_rules | default([])), (custom_multi_interface_rules | default([])),
(global_server_rules | default([])), (custom_server_rules | default([])),
(global_client_rules | default([])), (custom_client_rules | default([])),
(global_voip_rules | default([])), (custom_voip_rules | default([])),
(global_management_rules | default([])), (custom_management_rules | default([])),
] | flatten
}}
register: rule_sync
- name: Trigger Firewall Filter Reload
oxlorg.opnsense.reload:
target: rule
when: rule_sync.changed
Das Problem: Er schreibt die Regeln und macht auch einen Reload. Aber wenn eine manuell erstellte Regel oder eine Regel im Git nicht mehr existent ist, dann löscht er diese nicht.
Bisher konnte ich das nur erreichen wenn ich eine vorher vorhandene Regel im Git auf
state: absent setze. Das löst aber mein Problem mit manuell erstellten Regeln nicht. Und ja, ganz bewusst will ich alles purgen und dann die Regeln drüber ziehen. Deshalb ich den filter auf bestimmte Interfaces gesetzt und nicht auf alle.
Wie funktioniert die purge Funktion? Hat das mal jemand versucht?
Grüße