aboutsummaryrefslogtreecommitdiff
path: root/example/extract_addresses.py
blob: 0975ea94ab90c3b33e667ffe71ac9a110cef820c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/env python3
#
# example/extract_addresses.py
# (c) 2021 Jonas Gunz <himself@jonasgunz.de>
# License: MIT
#

import phpipam_api
import re

phpipam_url="https://phpipam.example.com/"
appid="appid"
user="apiuser"
passw="P45sw0rd"

tag='Used'
domain='sub.example.com.'
cidrs=['10.1.0.0/16','192.168.42.0/24']

ipam = phpipam_api.PhpipamAPI(phpipam_url, appid, user, passw)

tags = ipam.addresses.getTags()
for _tag in tags:
    if _tag['type'] == tag:
        tag_id=_tag['id']
if len(tag_id) == 0:
    raise Exception(f'tag "{tag}" was not found.')

print(f'tag "{tag}" has id {tag_id}')

selected_addresses = {}

for _cidr in cidrs:
    subnets = ipam.subnets.search(search=_cidr)

    if not len(subnets) == 1:
        print(f'CIDR {_cidr} has no or no exact match. Ignoring.')
        continue
    subnet = subnets[0]

    addresses = ipam.subnets.getAddresses(subnet_id=subnet['id'])
    for _address in addresses:
        hostname = _address['hostname']
        ip = _address['ip']

        if not _address['tag'] == tag_id:
            continue
        if not hostname.endswith(domain.strip('.')):
            continue

        if hostname in selected_addresses:
            selected_addresses[hostname].append(ip)
        else:
            selected_addresses[hostname]=[ip]

for _selected_address in selected_addresses:
    print(_selected_address + '::' + str(selected_addresses[_selected_address]))