Ik ben op dit moment als hobby project bezig om mijn Fortigate firewall te automatiseren. Bijna alles werkt al. Ik loop alleen tegen een issue aan waarbij ik nieuwe firewall policies moet aanmaken. Dit werkt voor 99% goed maar de uitdaging waar ik tegenaan loop is gerelateerd aan het genereren van een unieke policyID per firewall policy object. Dit is namelijk noodzakelijk.
Om het probleem even terug te brengen naar de kern heb ik het volgende ook even bij ChatGPT neergelegd
Ik heb een directory met variables in de vorm van yaml bestanden. Deze zijn opgeslagen in de directory /vars. Deze hebben dezelfde structuur en ik heb onderstaand een tweetal voorbeelden geplaatst (met de relevante zaken)
Voorbeeld 1
Voorbeeld 2
In totaal heb ik dus een drietal firewall objecten:
Mijn playbook
Nu had ik eigenlijk op onderstaande uitkomst gehoopt:
Policy: StepStone->RODC, Policy ID: 1000
Policy: RODC->RWDC, Policy ID: 1001
Policy: RWDC->RODC, Policy ID: 1002
Maar helaas krijgen alle objecten hetzelfde ID: 1000
Relevante software en hardware die ik gebruik
- Ansible op WSL (Ubuntu)
Wat ik al gevonden of geprobeerd heb
Heel veel ChatGPT :-) Helaas komt ChatGPT er ook niet meer uit. Ik verwacht zelf dat er ergens een loop verkeerd staat.
Wie o wie kan mij een duwtje in de juiste richting geven?
Om het probleem even terug te brengen naar de kern heb ik het volgende ook even bij ChatGPT neergelegd
Ik heb een directory met variables in de vorm van yaml bestanden. Deze zijn opgeslagen in de directory /vars. Deze hebben dezelfde structuur en ik heb onderstaand een tweetal voorbeelden geplaatst (met de relevante zaken)
Voorbeeld 1
code:
1
2
3
4
5
| policies: - name: "RODC->RWDC" action: "accept" - name: "RWDC->RODC" action: "accept" |
Voorbeeld 2
code:
1
2
3
| policies: - name: "STEPSTONE->RODC" action: "accept" |
In totaal heb ik dus een drietal firewall objecten:
- RODC->RWDC
- RWDC->RODC
- STEPSTONE->RODC
Mijn playbook
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| --- - name: Generate unique policy IDs from YAML files hosts: localhost gather_facts: no tasks: - name: Find all YAML files in the /vars folder find: paths: ../vars patterns: "*.yml" register: yaml_files - name: Load all YAML files include_vars: file: "{{ item.path }}" with_items: "{{ yaml_files.files }}" register: loaded_vars - name: Initialize policy ID counter set_fact: policy_id_counter: 1000 - name: Generate unique policy IDs for all policies set_fact: policies_with_ids: "{{ policies_with_ids | default([]) + [{'name': item.name, 'policy_id': policy_id_counter}] }}" loop: "{{ loaded_vars.results | selectattr('ansible_facts.policies', 'defined') | map(attribute='ansible_facts.policies') | flatten }}" vars: policy_id_counter: "{{ policy_id_counter + loop.index }}" # Increment based on loop index - name: Output policies with their unique policy IDs debug: msg: "Policy: {{ item.name }}, Policy ID: {{ item.policy_id }}" loop: "{{ policies_with_ids }}" |
Nu had ik eigenlijk op onderstaande uitkomst gehoopt:
Policy: StepStone->RODC, Policy ID: 1000
Policy: RODC->RWDC, Policy ID: 1001
Policy: RWDC->RODC, Policy ID: 1002
Maar helaas krijgen alle objecten hetzelfde ID: 1000
code:
1
2
3
4
5
6
7
8
9
| ok: [localhost] => (item={'name': 'StepStone->RODC', 'policy_id': 1000}) => { "msg": "Policy: StepStone->RODC, Policy ID: 1000" } ok: [localhost] => (item={'name': 'RODC->RWDC', 'policy_id': 1000}) => { "msg": "Policy: RODC->RWDC, Policy ID: 1000" } ok: [localhost] => (item={'name': 'RWDC->RODC', 'policy_id': 1000}) => { "msg": "Policy: RWDC->RODC, Policy ID: 1000" } |
Relevante software en hardware die ik gebruik
- Ansible op WSL (Ubuntu)
Wat ik al gevonden of geprobeerd heb
Heel veel ChatGPT :-) Helaas komt ChatGPT er ook niet meer uit. Ik verwacht zelf dat er ergens een loop verkeerd staat.
Wie o wie kan mij een duwtje in de juiste richting geven?
[ Voor 16% gewijzigd door pizzaboertje op 11-09-2024 17:25 ]