Strona 1 z 1

Ansible vs Netmiko / YAML vs Python

: 22 mar 2019, 12:11
autor: qligowski
Witam,

Zaczynam bawic sie w programowanie sieci i z tego co zdazylem wyczytac Ansible (w duzym ogolnieniu 'wciska; skrypty) uzywa YAML, Netmiko mozna uzywac Pythona do skryptow. JA kw takim razie uzywac Ansible i Pythona albo zwykle warunki, petle itp w YAML.
Nie bardzo rozumiem gdzie zaczac ale zalozmy ze chce popchac konfiguracje do 20 switchy ktore maja rozne VLAN/ addresacje zeby zmienil Access listy bazujac na interfejsach jakie maja. Probowalem uzyc Ansible ale z tego co widzie YAML nie ma conditionals, czy w takim razie mozna uzyc Pythona w srodku YAML?

Re: Ansible vs Netmiko / YAML vs Python

: 22 mar 2019, 12:42
autor: peper
Bo YAML to nie jest język programowania a język pozwalający na ustrukturyzowaną prezentację różnego rodzaju danych. W Ansible w YAML pisane są playbooki, czyli scenariusze wykonywania działań, są konstrukcje warunkowe w postaci choćby when, które zastępuje if, lecz nie korzytasz z nich w taki typowy sposób znany z C, Javy czy Pythona.
W Ansible moduły pisane są w Pythonie, i to one wykonują odpowiednie operacje, do których dane ty podajesz w playbooku. To tak w uproszczeniu oczywiście.

Re: Ansible vs Netmiko / YAML vs Python

: 22 mar 2019, 14:55
autor: konradrz
Albo może taki przykład pętli (to dla ACI, ale na zwykłego IOS/NXOS będzie podobnie).

Fragment "tworzący" (playbook):

Kod: Zaznacz cały

    - name: Create those EPgs
      aci_epg:
        <<: *aci_login
        state: "present"
        tenant: "{{ tenant }}"
        ap: "{{ ap }}"
        epg: "{{ item.epg }}"
        bd: "{{ item.bd }}"
        descr: "EPG Created Using Ansible"
      with_items: "{{ epgs }}"
      tags: epg 
Fragment "ze zmiennymi":

Kod: Zaznacz cały

epgs:
  - epg: "GOLD"
    bd: "ROUTED"
  - epg: "SILVER"
    bd: "ROUTED"
  - epg: "MIGRATION"
    bd: "LEGACY" 

A co do "każdy słicz ma inne interfejsy, i co teraz" - w Ansible masz coś o nazwie gather_facts. Zbiera toto informację z pudełka i zapisuje sobie w ansible_facts (możesz to drzewko później przejrzeć, chociażby przy użyciu tasku debug, i używać w swoich zmiennych).