Hogy lehetne ellenőrizni ansible-el, hogy egy ip adott alhálózatban van-e?
pl ip: 192.168.3.4
subnets: 192.168.3.0/24, 192.168.4.0/24, 192.168.4.0/16
=> true, false, true
Van rá valami beépített módszer, filter, (elsősorban jinja nélküli megoldás) vagy külső proggal? (ha külsővel, akkor van a célra prog? (saját scriptel ok))
Egy ciklus (alhálózatok tömbben) és közben az eredménytől függő műveletek lennének.
Hogy csinálnátok?
- 1021 megtekintés
Hozzászólások
.
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters_ip…
# Example list of values
test_list = ['192.24.2.1', 'host.fqdn', '::1', '192.168.32.0/24', 'fe80::100/10', True, '', '42540766412265424405338506004571095040/64']
By specifying a network range as a query, you can check if a given value is in that range:
# {{ test_list | ipaddr('192.0.0.0/8') }}
['192.24.2.1', '192.168.32.0/24']
- A hozzászóláshoz be kell jelentkezni
Köszönöm!
(...pedig át is tekertem ma rajta)
- A hozzászóláshoz be kell jelentkezni
További segítségeteket kérném..., ugyanaz a feladat, de további része, így a cím már nem az igazi.
Ez így:
- hosts: localhost
vars:
subnet_list: ['192.168.1.0/24', '192.168.2.0/24', '192.168.0.0/31', '192.168.3.0/24']
ipm_addom: '192.168.2.5'
subn: ''
- name: kiki
debug:
msg: "{{ myvar2 }}"
vars:
myvar2: "{{ ipm_addom | ipaddr('192.168.2.0/24') }}"
működik. Ha az ipm_addom része az ipaddr-nak megadott alhálózatnak, visszaadja az ipaddom értékét, ha nem, akkor üres string.
Viszont... :)
1. nem egy konkrét értéket szeretnék beírni az ipaddr-nak, hanem egy ciklusra lenne szükség, ami a subnet_list elemein végigmegy. (vagy addig megy, amíg egyszer myvar2 nem üres)
2. a subnet_list egy hosthoz tartozó változó. Végig kellene menni egy inventory group elemein egy újabb ciklussal (ezt importal még sikerül talán megcsinálnom) és mindig adott hosthoz tartozó subnet_list-en kellene végigmenni az 1.-ben leírt ciklusnak.
3. Egy külső változóban, egy stringben azokat a hostokat (hostoknak az ip-it) kellene összegyűjteni a 2.-ban írt inventory groupból, amelyekhez tartózó subnet_list-jének esetén a myvar2 nem volt mindig üres.
A dolog arról szól hogy vannak kliensek és szerverek.
Végigmegyek a klienseken és ha az ip-je része egy szerver subnet_list-jében felsorolt valamelyik subnetek (szerverek egy inventory group), akkor a kliens egy konfig file-jának egy sorába be kell írni a szerver ip-jét.
"servers: elso_szerver_ipje, szerver_masodik_szerver_ipje,..."
Ezekkel a szerverekkel kell hogy kommunikáljon ezt a kliens.
Ill. ilyen esetben az adott szerveren is regisztrálni kell ezt a klienst.
Igen sokat lehetne tanulni egy ilyen példából! Egy scriptel egyszerű lenne, de ansible-el...
Már ott elbuktam hogy a fenti példában a "192.168.2.0/24" helyett egy ciklus a fenti subnet_list értékein.
Hogy lehet ilyen ciklust?
- A hozzászóláshoz be kell jelentkezni
Ha meg aktuális akkor erre gondoltál?
---
- name: IP filter
hosts: localhost
vars:
subnet_list:
- 192.168.1.0/24
- 192.168.2.0/24
- 192.168.0.0/24
- 192.168.3.0/24
ipaddr_list:
- 192.168.0.2
- 192.168.1.2
- 192.168.2.2
- 192.168.3.2
tasks:
- name: Loop over elements of two list
debug:
msg: "Ip: {{ item[0] }} Network: {{ item[1] }} Result: {{ item[0] | ipaddr(item[1]) | default('False', true) }}"
loop: "{{ ipaddr_list | product(subnet_list) | list }}"
...
- A hozzászóláshoz be kell jelentkezni