Skip to main content

Ansible

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

Filöverföring över SCP

Jag brottades med att få filöverföring över SCP att fungera i Ansible med de inbyggda modulerna. Det funkade inte.

Det som till slut fungerade var att slå Linux-kommandon med ansible.builtin.command.

    - name: Kopiera image från lokal maskin till routern via SCP
      ansible.builtin.command:
        cmd: sshpass -p "{{ ansible_ssh_pass }}" scp -O -o StrictHostKeyChecking=no {{ image_src_path }} {{ ansible_user }}@{{ inventory_hostname }}:{{ image_dest_path }}
      delegate_to: localhost
      when: image_file not in dir_out.stdout[0]

sshpass -p används här för att ta lösenordet man matar in när man kör jobbet med flaggan -k, men man kan köra utan och manuellt slå lösenord varje gång jobbet sker.