Ansible playbook

Wszystko o automatyzacji w sieciach i DC
Wiadomość
Autor
Awatar użytkownika
qligowski
wannabe
wannabe
Posty: 262
Rejestracja: 16 maja 2014, 18:35

Ansible playbook

#1

#1 Post autor: qligowski »

Witam, od dwoch tygodni bawie sie w Ansible i trafilem na sciane. Chce stworzyc prosty playbook ktory ustawia hostname z predefiniowanej (jest takie slowo ? :lol: ) zmiennej. Czyli mam zalozmy 100 switchy w hosts file (same IP) i chce zeby mialy ta sama nazwe poza koncowka - np. 660-SW-1, 660-SW-2 etc az do konca petli (czyli az ustawi wszystkie).
KTos wie jak to ugryzc ? PRobowalem ale bez skutku.
---
- hosts: test
gather_facts: no
connection: local


vars:

hostname:
- 660-SW-



tasks:

- name: set hostname
with_items: "{{ hostname }}"
ios_config:
commands:
- hostname "{{ item }}"

Awatar użytkownika
drozdov
CCIE
CCIE
Posty: 511
Rejestracja: 13 sie 2005, 23:34
Lokalizacja: Zurych

Re: Ansible playbook

#2

#2 Post autor: drozdov »

Hej

Generalnie skladnia byla by taka:

Kod: Zaznacz cały

- hosts: jakas_grupa_hostow
  gather_facts: no
  vars:
    hostname: 660-SW-
  tasks:
  - name: set hostname
     iso_config:
        commands: hostname {{hostname}}-{{item}}
     with_items:
       - {{tu_lista_z_tym_co_chcesz_dodac}}

Pytanie jak te dane wygladaja ({{tu_lista_z_tym_co_chcesz_dodac}})?
Zdobywanie certów jest jak zbieranie pokemonów: Wszystkie są fajne ale każdy chce mieć Pikachu :)

Awatar użytkownika
drozdov
CCIE
CCIE
Posty: 511
Rejestracja: 13 sie 2005, 23:34
Lokalizacja: Zurych

Re: Ansible playbook

#3

#3 Post autor: drozdov »

A ok kumam mniej wiecej ( nie wczytalem sie )

Kod: Zaznacz cały

- hosts: grupa_z_twoimi_ip # to robisz przez inventory
  gather_facts: no
  vars:
    hostname: 660-SW-
  tasks:
  - name: set hostname
     iso_config:
        commands: hostname {{hostname}}-{{item}}
     with_items:
       - {{ansible_host.split('.')[3]}}
Cos takiego powinno byc ok.
Zdobywanie certów jest jak zbieranie pokemonów: Wszystkie są fajne ale każdy chce mieć Pikachu :)

Awatar użytkownika
qligowski
wannabe
wannabe
Posty: 262
Rejestracja: 16 maja 2014, 18:35

Re: Ansible playbook

#4

#4 Post autor: qligowski »

Wielkie dzieki! Sproboje to dzisiaj, a moglbys tylko wytlumaczyc co [3] znaczy w tej linii?
- {{ansible_host.split('.')[3]}}

Awatar użytkownika
drozdov
CCIE
CCIE
Posty: 511
Rejestracja: 13 sie 2005, 23:34
Lokalizacja: Zurych

Re: Ansible playbook

#5

#5 Post autor: drozdov »

ansible_host to zmienna ktora trzyma twój IP, funkcja split rozdzieli Ci adres ip na 4 częsci majac '.' jako rozdzielacz ( :) ) a [3] oznacza pole indeksowane od 0 ( czyli x.x.x.X )
Zdobywanie certów jest jak zbieranie pokemonów: Wszystkie są fajne ale każdy chce mieć Pikachu :)

martino76
CCIE
CCIE
Posty: 883
Rejestracja: 17 gru 2010, 15:23
Lokalizacja: Barczewo

Re: Ansible playbook

#6

#6 Post autor: martino76 »

ogolnie

Kod: Zaznacz cały

with_items
nie powinno byc uzywane zostalo zastapione przez funkcje

Kod: Zaznacz cały

loop

Awatar użytkownika
qligowski
wannabe
wannabe
Posty: 262
Rejestracja: 16 maja 2014, 18:35

Re: Ansible playbook

#7

#7 Post autor: qligowski »

Dzieki wszystkim, w koncu udalo sie to ugryzc wylaczajac gather_facts: false i zmieniajac ansible_hostname na inventory_hostname.
Oto dzialajacy skrypt:

Kod: Zaznacz cały

---
- hosts: test
  connection: local

  vars:
    hostname: 660-SW
  tasks:

  - name: set hostname
    ios_config:
      commands:
      - hostname {{hostname}}-{{item}}
    loop:
      - "{{ inventory_hostname.split('.')[3] }}"

Awatar użytkownika
peper
CCIE / Site Admin
CCIE / Site Admin
Posty: 5005
Rejestracja: 13 sie 2004, 12:19
Lokalizacja: Warsaw, PL
Kontakt:

Re: Ansible playbook

#8

#8 Post autor: peper »

qligowski pisze: 05 kwie 2019, 13:33 Dzieki wszystkim, w koncu udalo sie to ugryzc wylaczajac gather_facts: false i zmieniajac ansible_hostname na inventory_hostname.
W przypadku urządzeń sieciowych generalnie gather_facts przeszkadza a nie pomaga. Pamiętaj, że z punktu widzenie tego jak Ansible działa jest pewna zasadnicza różnica dt. sposobu wykonania modułu. W przypadku "tradycyjnych" modułów odnoszących sie do operacji związanych z systemem operacyjnym uruchamiasz playbook lokalnie lecz to co się dzieje w tle to połączenie SSH do hosta z inventory, ewentualne podniesienie uprawnień i wykonanie operacji bezpośrednio na hoście opisanym w inventory. Czyli tam musisz mieć odpowiednie narzędzia zainstalowane wymagane przez moduły Ansible. Moduły dla urządzeń sieciowych działają nieco inaczej, gdyż hostem wykonywania modułu jest w większości przypadków localhost, lub ewentuanie inny serwer z dostępem do urządzenia sieciowego, i łączy się on za pomocą SSH, REST API etc. do urządzenia sieciowego aby wykonać operacje. Dlatego inventory jako takie jest traktowane trochę inaczej w tym przypadku.
Szkoła DevNet: https://szkoladevnet.pl


Facebook: https://www.facebook.com/Piotr.Wojciechowski.CCIE
LinkedIn: https://www.linkedin.com/in/peper
Twitter: https://www.twitter.com/PiotrW_CCIE

"Zapomniałem że od kilku lat wszyscy giną jakby nigdy ich nie miało być
w stu tysiącach jednakowych miast giną jak psy"

Awatar użytkownika
qligowski
wannabe
wannabe
Posty: 262
Rejestracja: 16 maja 2014, 18:35

Re: Ansible playbook

#9

#9 Post autor: qligowski »

Warto jeszcze dopisac ze hostname_inventory jest zmienna ustawiona w hosts file a ansible_hostname jest ta ktora jest wykrywana przez Ansible bezposrednio na urzadzeniu (dlatego gather facts musi byc true) :D

ODPOWIEDZ