Ansible en looping met vars_files

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • pizzaboertje
  • Registratie: Juni 2004
  • Laatst online: 12:01
Ik ben vrij nieuw met Ansible (meer ervaring met Terraform en Powershell). Ik probeer op dit moment tegen mijn Fortigate firewall aan te "praten". Dit gaat al vrij aardig. Nu loop ik echter tegen een uitdaging aan waar hopelijk iemand mij op weg kan helpen (kant en klaar antwoord mag, maar juiste push in de goede richting is zeker gewaardeerd).

Ik kan al individuele objecten aanmaken via Ansible op mijn firewall. Nu wil ik dit graag via vars files oplossen waarbij ik een loop opzet over de verschillende objecten in mijn yaml file.

Onderstaand mijn playbook:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- hosts: fortigate01
  connection: httpapi
  collections:
  - fortinet.fortios
  vars:
   ansible_httpapi_use_ssl: true
   ansible_httpapi_validate_certs: false
   ansible_httpapi_port: 443
  vars_files:
    - addresses.yml
  tasks:
    - name: Configure addresses.
      fortinet.fortios.fortios_firewall_address:
        vdom:  root
        state: present
        firewall_address:
          name: '{{ item.name }}'
          subnet: '{{ item.subnet }}'
        # with_items: '{{ addresses }}'
        loop: '{{ addresses | dict2items }}'


Onderstaand mijn addresses.yml:
code:
1
2
3
4
5
addresses:
  - name: win1101-001p
    subnet: 10.0.0.1/32
  - name: win1101-002p
    subnet: 10.0.0.2/32


Nu krijg ik onderstaande error:
code:
1
fatal: [fortigate01]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'item' is undefined. 'item' is undefined\n\nThe error appears to be in '/home/test/playbooks/fortiaddress.yml': line 12, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n    - name: Configure addresses.\n      ^ here\n"}


Relevante software en hardware die ik gebruik
- WSL met Ubuntu 24.04
- Laatste Ansible versie

Wat ik al gevonden of geprobeerd heb
Ik heb zelf al geprobeerd om de Yaml online te laten valideren. Hier komen geen fouten uit. Ook heb ik geprobeerd om in plaats van loop with_items te gebruiken.

Beste antwoord (via pizzaboertje op 04-09-2024 11:08)


  • swbr
  • Registratie: Maart 2009
  • Laatst online: 17:43
Er staan twee spaties teveel voor 'loop' zo te zien.

If you try and take a cat apart to see how it works, the first thing you have on your hands is a non-working cat. -DNA

Alle reacties


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • swbr
  • Registratie: Maart 2009
  • Laatst online: 17:43
Er staan twee spaties teveel voor 'loop' zo te zien.

If you try and take a cat apart to see how it works, the first thing you have on your hands is a non-working cat. -DNA


Acties:
  • +2 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
Pro-tip: Gebruik Visual Studio Code met de Ansible extension (redhat.ansible). Deze kan fouten pro-actief signaleren en ondersteunen bij het fixen ervan.

Daarnaast is ChatGPT aardig goed in Ansible, dus ook die kun je goed inzetten voor het bouwen van tasks.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Acties:
  • 0 Henk 'm!

  • pizzaboertje
  • Registratie: Juni 2004
  • Laatst online: 12:01
Bedankt voor de antwoorden, het werkt nu. Er stonden inderdaad teveel spaties voor 'loop'. Ik had dit al wel eerder geprobeerd maar toen kreeg ik een andere foutmelding gerelateerd aan dat "addresses" niet gevonden kon worden.

Als beginner had ik mijn directory structuur niet optimaal :) addresses.yml stond niet in dezelfde directory als mijn playbook.

ChatGPT is inderdaad ook een top tip. Die heeft mij op het laatste gewezen.

Acties:
  • +1 Henk 'm!

  • Room42
  • Registratie: September 2001
  • Niet online
pizzaboertje schreef op woensdag 4 september 2024 @ 11:08:
[...] Als beginner had ik mijn directory structuur niet optimaal :) addresses.yml stond niet in dezelfde directory als mijn playbook.
Dat hoeft ook niet, mag ook in ./vars/ staan. Check maar eens de output met -vvv (ik dacht 2 of 3 v's, meer v's geven meer details) als je de file niet goed plaatst. Dan krijg je te zien waar Ansible allemaal zoekt.

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron