ansible: egy ip adott subnetben van-e?

 ( gyuri2012 | 2019. május 9., csütörtök - 20:49 )

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?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

.

.

https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters_ipaddr.html

# 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']

Köszönöm!
(...pedig át is tekertem ma rajta)

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?