Skip to main content

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.