Strona 1 z 1
Ansible playbook
: 03 kwie 2019, 17:29
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 ?
) 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 }}"
Re: Ansible playbook
: 03 kwie 2019, 22:03
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}})?
Re: Ansible playbook
: 03 kwie 2019, 22:11
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.
Re: Ansible playbook
: 04 kwie 2019, 08:19
autor: qligowski
Wielkie dzieki! Sproboje to dzisiaj, a moglbys tylko wytlumaczyc co [3] znaczy w tej linii?
- {{ansible_host.split('.')[3]}}
Re: Ansible playbook
: 04 kwie 2019, 10:23
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 )
Re: Ansible playbook
: 04 kwie 2019, 14:02
autor: martino76
ogolnie
nie powinno byc uzywane zostalo zastapione przez funkcje
Re: Ansible playbook
: 05 kwie 2019, 13:33
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] }}"
Re: Ansible playbook
: 06 kwie 2019, 14:04
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.
Re: Ansible playbook
: 06 kwie 2019, 22:08
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)