2019. december 19., csütörtök

Cisco config Ansible-lel

A Cisco nem csak fizetős, de ingyenes termékekkel is lehetővé teszi az eszközök felügyeletét. Ilyen program az ansible, amit config management célokra tudunk használni. Sok leírás és fórum bejegyzés van ebben a témában, de még így is sok kisérletezés kellett, hogy használható legyen. Ezeket szeretném megosztani veletek.

Software verzió függő parancs végrehajtás

  - name: SYS | Define provider
    set_fact:
      provider:
        host: "{{ inventory_hostname }}"
        username: "{{ mgmt_username }}"
        password: "{{ mgmt_password }}"
        authorize: yes
        auth_pass: "{{ mgmt_enable }}"
        timeout: 120
  - name: Get IOS parameters
    ios_facts:
      provider: "{{ provider }}"
      gather_subset: hardware
    register: response
  - name: delete radius server
    ios_config:
      provider: "{{ provider }}"
      commands:
        - no radius-server host 1.2.3.4 auth-port 1812 acct-port 1813
    when: ansible_net_version is search("15.2")

Az első blokk betölti az inventory file-ból az ssh usernevet, jelszót illetve az enable jelszót. Itt lehet a timeout-ot is állítani - a nagyobb, lassabb switch-eknél ezt meg kellett emelni.
A második blokk letölti az IOS verziót és eltárolja a response nevű változatban.
A harmadik blokk csak akkor hajtódik végre, ha az ISO verzió tartalmazza a 15.2 szöveget.

Hardware típustól függő végrehajtás

  - name: check SNMP
    local_action: command snmpwalk -Ov -v3 -l authPriv -u <SNMPUSER> -a SHA -A "<SNMPPASS>" -x AES -X "<SNMPPASS>" {{ inventory_hostname }} sysobjectid
    register: response
  - set_fact:
         filter1: "{{ response.stdout }}"
  - name: set syslog level
    ios_config:
      provider: "{{ provider }}"
      lines:
        - logging trap error
      save_when: modified
    when: filter1 is search(".9.1.1745")

Az első blokk lefuttatja az snmpwalk linux parancsot, ami lekérdezi a hardware típusát és eltárolja a response változóban. Az <SNMPUSER> és <SNMPPASS> helyére írjuk be a megfelelő értékeket.
A második blokk beírja a filter1-be a kimenetet, hogy keresni tudjunk benne
A harmadik blokk végzi el a config módosítást, ha a switch típusa 1745-ös (ez a 3850-es switch-ek Cisco-s kódja)

Több soros kimenet kezelése

Ha egy Cisco parancs kimenete több soros, az ansible azt egy sorba írja ki. Az alábbi trükkel ezt visszaalakíthatjuk:

ansible-playbook showver.yml | awk '{gsub(/\\n/,"\n")}1'|egrep -v "\[$|\]$"
ok: [1.2.3.4] => {
        "*    1 56    WS-C3850-48P       16.6.5            CAT3K_CAA-UNIVERSALK9 INSTALL
     2 56    WS-C3850-48P       16.6.5            CAT3K_CAA-UNIVERSALK9 INSTALL
     3 56    WS-C3850-48P       16.6.5            CAT3K_CAA-UNIVERSALK9 INSTALL
     4 56    WS-C3850-48P       16.6.5            CAT3K_CAA-UNIVERSALK9 INSTALL"
}

Nincsenek megjegyzések:

Megjegyzés küldése