Labels gebruiken in Ansible loops
loop_control.label om de Ansible loop output kort en leesbaar te houden wanneer een loop over dictionaries of andere grote waarden itereert.Categories:
loop_control.label wanneer de standaard loop output grote of rommelige
waarden zou afdrukken, vooral dictionaries. Kies een kort label dat het loop
item duidelijk identificeert zonder het volledige object weer te geven.Probleem
Wanneer een Ansible taak over dictionaries of andere gestructureerde waarden loopt, drukt de standaard output vaak het volledige loop item af.
Dit maakt de taakoutput moeilijker scanbaar en te beoordelen. Het voegt ook ruis toe aan logs, vooral wanneer het loop item geneste data bevat zoals bindings, opties of statusdetails.
Voor operators kan dit soort output het vertrouwen in de taakrun verminderen, omdat technische en rommelige logging kan lijken op een teken dat er iets misgaat. Het kan ook de waargenomen implementatiekwaliteit verlagen door een correcte taak rommelig, ongestructureerd of onvoldoende doordacht te laten lijken.
Bijvoorbeeld, output zoals dit is technisch correct maar onnodig uitgebreid:
TASK [c2platform.mw.iis : Create website] *****************************************
ok: [c2d-iis1] => (item={'name': 'HelloWorld', 'physical_path':
'D:/inetpub/wwwroot/HelloWorld', 'application_pool': 'HelloWorld',
'bindings': {'add': [{'ip': '192.168.3.100', 'hostname': 'helloworld.c2platform.org',
'port': 80, 'protocol': 'http'}]}, 'state': 'started'})
In de meeste gevallen heeft de operator alleen een korte identificatie nodig, zoals de websitenaam en de beoogde status.
Context
Ansible ondersteunt loop_control.label om te beperken wat voor elk loop item
in de taakoutput wordt getoond.
Dit is vooral nuttig wanneer de loop over dictionaries itereert en de taak
slechts een paar velden benadert, bijvoorbeeld item['name'] en
item['state']. In die gevallen voegt het herhalen van de volledige dictionary
in de log weinig waarde toe.
loop_control.label verbetert de leesbaarheid, maar moet eenvoudig blijven. Een
label is het meest nuttig wanneer het de velden benadrukt die een operator
helpen om snel te herkennen wat de taak verwerkt.
Deze richtlijn vormt een aanvulling op
Item en loop_var gebruiken in Ansible
loops
. Als een taak een
aangepaste loop_control.loop_var gebruikt, gebruik diezelfde variabele
consistent binnen label.
Oplossing
- Gebruik
loop_control.labelwanneer de standaard loop output grote of afleidende waarden zou afdrukken. - Kies bij voorkeur een korte, stabiele identificatie zoals een naam, sleutel, pad of naam plus status.
- Herhaal niet de hele dictionary binnen het label.
- Houd het label gericht op wat operators helpt om de taakoutput snel te lezen.
- Wanneer de taak een aangepaste
loop_control.loop_vargebruikt, gebruik die variabelenaam ook in het label. - Voeg bij eenvoudige loops over korte scalaire waarden geen
labeltoe, tenzij het de output verbetert.
Voordelen
- Maakt taakoutput gemakkelijker scanbaar.
- Vermindert logruis bij loops over dictionaries en geneste data.
- Helpt operators het huidige loop item snel te identificeren.
- Houdt de loop output gericht op de velden die het belangrijkst zijn.
Voorbeelden en implementatie
Gebruik label om output voor dictionaries te verkorten
- name: Create website
microsoft.iis.website:
name: "{{ item['name'] }}"
site_id: "{{ item['site_id'] | default(omit) }}"
state: "{{ item['state'] | default(iis_websites_state) }}"
physical_path: "{{ item['physical_path'] }}"
application_pool: "{{ item['application_pool'] }}"
bindings: "{{ item['website_bindings'] | default(omit) }}"
loop: "{{ iis_websites }}"
loop_control:
label: >-
{{ item['name'] }} →
{{ item['state'] | default(iis_websites_state) }}
Dit houdt de taakoutput gericht op de websitenaam en de effectieve status.
In plaats van de volledige dictionary te loggen, kan Ansible nu een korter resultaat tonen zoals:
TASK [c2platform.mw.iis : Create website] *****************************************
ok: [c2d-iis1] => (item=HelloWorld → started)
Houd labels kort en betekenisvol
Een label moet het loop item identificeren, niet elk veld herhalen.
- name: Configure Apache vhost
ansible.builtin.debug:
msg: "Configuring {{ item['servername'] }}"
loop: "{{ apache_vhosts }}"
loop_control:
label: "{{ item['servername'] }}"
Hier is de hostnaam voldoende om het huidige item te herkennen.
Vermijd labels die te uitgebreid blijven
Het volgende patroon wordt niet aanbevolen omdat het nog steeds te veel data logt:
- name: Create website
microsoft.iis.website:
name: "{{ item['name'] }}"
state: "{{ item['state'] | default(iis_websites_state) }}"
loop: "{{ iis_websites }}"
loop_control:
label: "{{ item }}"
Dit ondermijnt het doel van label, omdat het nog steeds het hele loop item
weergeeft in plaats van een korte identificatie.
Aanvullende informatie
Feedback
Was deze pagina nuttig?
Fijn om te horen! Vertel ons alstublieft hoe we kunnen verbeteren.
Jammer om dat te horen. Vertel ons alstublieft hoe we kunnen verbeteren.