Pre & post tasks
I main.yml kan man använda pre och post tasks som sker innan jobben som är i roles. Det kan vara bra att slänga på tagen always på dessa så att de körs oavsett vilken tag man använder för resten av jobbet.
Exempel:
! Bra pre och post tasks för Cisco IOS-XE
pre_tasks:
- name: Gather facts
cisco.ios.ios_facts:
gather_subset: all
register: cisco_ios_facts
tags: always
- name: Configure archive function
cisco.ios.ios_config:
lines:
- logging enable
- logging size 200
- notify syslog contenttype plaintext
parents: [archive, log config]
tags: always
- name: Set path for archive
cisco.ios.ios_config:
lines:
- "path flash:"
parents: [archive]
tags: always
- name: Revert configuration in 30 minutes if script failure
cisco.ios.ios_command:
commands: configure terminal revert timer 30
tags: always
post_tasks:
- name: Configure confirm!
cisco.ios.ios_command:
commands: configure confirm
tags: always
- name: Save running-configuration to startup-configuration when modified
cisco.ios.ios_config:
save_when: modified
tags: always
- name: Pause and continue
pause:
prompt: "Complete, press enter to continue with , Ctrl+C to exit"
tags: always
Här har vi ett annat bra exempel på hur man kan skriva sin main.yml med felhantering, som backar Cisco-konfen vid fel:
---
- name: Configure labb-switch
hosts: labb
gather_facts: false
pre_tasks:
- name: Gather facts
cisco.ios.ios_facts:
gather_subset: all
register: cisco_ios_facts
tags: always
- name: Configure archive function
cisco.ios.ios_config:
lines:
- logging enable
- logging size 200
- notify syslog contenttype plaintext
parents: [archive, log config]
tags: always
- name: Set path for archive
cisco.ios.ios_config:
lines:
- "path flash:"
parents: [archive]
tags: always
- name: Revert configuration in 30 minutes if script failure
cisco.ios.ios_command:
commands: configure terminal revert timer 30
tags: always
tasks:
- block:
- import_role:
name: common
- import_role:
name: vlans
- import_role:
name: security
- import_role:
name: qos
- import_role:
name: templates
- import_role:
name: interfaces
- import_role:
name: routing
- import_role:
name: aaa
- import_role:
name: management
- import_role:
name: telemetry
rescue:
- name: Backa konfiguration vid problem
cisco.ios.ios_command:
commands: configure revert now
ignore_errors: yes
tags: always
post_tasks:
- name: Configure confirm!
cisco.ios.ios_command:
commands: configure confirm
tags: always
- name: Save running-configuration to startup-configuration when modified
cisco.ios.ios_config:
save_when: modified
tags: always
- name: Pause and continue
pause:
prompt: "LABB complete, press enter to continue with next hosts, Ctrl+C to exit"
tags: always
Det är då rescue som ser till att configure revert now slås vid fel i Ansible-jobbet. Rescue måste finnas i ett block, därför finns alla tasks i ett block.