91 lines
2.7 KiB
Python
Executable File
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"])
|