tripleo-image-elements/elements/nagios3/bin/refresh-nagios-from-nova

91 lines
2.7 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright 2014 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import subprocess
import sys
from novaclient.v1_1 import client
from pynag import Model
conn = client.Client(os.environ['OS_USERNAME'],
os.environ['OS_PASSWORD'],
os.environ['OS_TENANT_NAME'],
os.environ['OS_AUTH_URL'])
if len(sys.argv):
target_nets = [unicode(x) for x in sys.argv[1:]]
else:
target_net = [u'default-net']
errors = 0
reload_nagios = False
for net in target_nets:
try:
Model.Hostgroup.objects.get_by_name(net)
except Exception as e:
sys.stderr.write("INFO: creating hostgroup %s\n" % net)
hg = Model.Hostgroup()
hg.name = net
hg.hostgroup_name = net
if hg.is_dirty():
try:
if hg.save():
reload_nagios = True
except Exception as e:
sys.stderr.write("ERROR: %s\n" % e)
errors += 1
print(hg)
for server in conn.servers.list():
server.get()
monitor_nets = set(target_nets) & set(server.networks.keys())
if not monitor_nets:
continue
# Prefer first net, and IPv6
for net in target_nets:
if net in server.networks:
addrs = server.networks[net]
break
# If there is a floating IP, thats what we want.
addr = addrs[-1]
try:
host = Model.Host.objects.get_by_name(server.name)
except Exception as e:
host = Model.Host()
sys.stderr.write("INFO: creating host %s\n" % server.name)
host.use = 'generic-host'
host.name = server.name
host.host_name = server.name
host.alias = server.name
host.hostgroups = '%s,ssh-servers' % (','.join(monitor_nets),)
host.address = addr
try:
if host.save():
reload_nagios = True
except Exception as e:
sys.stderr.write("ERROR: %s\n" % e)
errors += 1
print(host)
if errors:
sys.stderr.write("ERROR: %d error(s).\n" % errors)
sys.exit(1)
if reload_nagios:
sys.stderr.write("INFO: reloading nagios.")
subprocess.call(["service", "nagios3", "reload"])