Skip to content

Does not work with Python 3.6 #12

@bmccorkle

Description

@bmccorkle

This script doesn't seem to work with python 3.6. Mainly, print statements now need parenthesis and it seems a 'list' function needed added when getting the host, service, and notifications. I seemed to be able to get it running with the following changes. Not a coding expert but thought I'd post what I had here for you to review...

#!/usr/bin/env python

# pip install icinga2api
# https://github.com/tobiasvdk/icinga2api
import os
import argparse

from icinga2api.client import Client

# use a helper to fetch our cut down object names
def getObjects(client, type_name):
    if 'Notification' == type_name:
        return client.objects.list(type_name, attrs=['__name'])
    else:
        return client.objects.list(type_name, attrs=['__name', 'groups'])

# use a helper to convert the full blown object dictionary into a list of __name elements
def getNameList(objects, group = ''):
    if group:
        return map(lambda x : x['attrs']['__name'], filter(lambda y : group in y['attrs']['groups'], objects))
    else:
        return map(lambda x : x['attrs']['__name'], objects)

def diffList(l1,l2):
    l2 = set(l2)
    return [x for x in l1 if x not in l2]

# add connection details
parser = argparse.ArgumentParser()
parser.add_argument("-H", "--hosturi", help="URL to icinga2 API", required=True)
parser.add_argument("-u", "--username", help="Username to connect to API", required=True)
parser.add_argument("-p", "--password", help="Password to connect to API", required=True)
parser.add_argument("-g", "--group", help="Group to filter", required=False)
args = parser.parse_args()

client = Client(args.hosturi, args.username, args.password)

hosts = getObjects(client, 'Host')
services = getObjects(client, 'Service')
notifications = getObjects(client, 'Notification')

#debug
#print (hosts)
#print (services)
#print (notifications)


if not args.group:
    h_names = list(getNameList(hosts, False))
    s_names = list(getNameList(services, False))
else:
    h_names = list(getNameList(hosts, args.group))
    s_names = list(getNameList(services, args.group))

n_names = list(getNameList(notifications))

found_h_names = []
found_s_names = []

for n in n_names:
    split_arr = n.split("!")
    if len(split_arr) == 2:
        for h in h_names:
            # debug
            # print (n + " " + h)
            if h in split_arr[0]:
                found_h_names.append(h)

    if len(split_arr) == 3:
        for s in s_names:
            # debug
            # print (n + " " + s)

            # rebuild the matched full service name with host!service
            split_s_full_name = split_arr[0] + "!" + split_arr[1]

            if s in split_s_full_name:
                found_s_names.append(s)


print("Hosts without notification")
print (", ".join(diffList(h_names, found_h_names)))
print ("")
print("Services without notification")
print (", ".join(diffList(s_names, found_s_names)))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions