From 95df1c35880d8a4611fc4ee149c08f817d44ad2b Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 13 Apr 2014 09:45:14 +0200 Subject: [PATCH] Write peer info to the agent inventory. Refs #6002 --- contrib/make-agent-config.py | 52 ++++++++++++++++++++++++++++++ tools/icinga2-discover-agent.cmake | 6 ++++ tools/icinga2-list-agents.cmake | 17 +++++++++- 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100755 contrib/make-agent-config.py diff --git a/contrib/make-agent-config.py b/contrib/make-agent-config.py new file mode 100755 index 000000000..8524b8a78 --- /dev/null +++ b/contrib/make-agent-config.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +# Icinga 2 +# Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org) +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +# This script assumes that you have the following templates: +# +# template Host "agent-host" { +# check_command = "agent" +# vars.agent_host = "$address$" +# vars.agent_port = 7000 +# } +# +# template Service "agent-service" { +# check_command = "agent" +#} + +import subprocess, json + +inventory_json = subprocess.check_output(["icinga2-list-agents"]) +inventory = json.loads(inventory_json) + +for host, hostinfo in inventory.items(): + print "object Host \"%s\" {" % (host) + print " import \"agent-host\"" + + if "peer" in hostinfo: + print " vars.agent_host = \"%s\"" % (hostinfo["peer"]["agent_host"]) + print " vars.agent_host = \"%s\"" % (hostinfo["peer"]["agent_port"]) + + print "}" + print "" + + for service in hostinfo["services"]: + print "object Service \"%s\" {" % (service) + print " import \"agent-service\"" + print " host_name = \"%s\"" % (host) + print "}" + print "" diff --git a/tools/icinga2-discover-agent.cmake b/tools/icinga2-discover-agent.cmake index af7761887..197172a6f 100644 --- a/tools/icinga2-discover-agent.cmake +++ b/tools/icinga2-discover-agent.cmake @@ -188,5 +188,11 @@ inventory_info = { "identity": cn, "crs": params } json.dump(inventory_info, fp) fp.close() +peer_file = "@CMAKE_INSTALL_FULL_LOCALSTATEDIR@/lib/icinga2/agent/inventory/" + hashlib.sha256(cn).hexdigest() + ".peer" +fp = open(peer_file, "w") +peer_info = { "agent_host": host, "agent_port": port } +json.dump(peer_info, fp) +fp.close() + print("Inventory information has been updated for agent '%s'." % (cn)) sys.exit(0) diff --git a/tools/icinga2-list-agents.cmake b/tools/icinga2-list-agents.cmake index 6f289ac2f..8c9c42753 100644 --- a/tools/icinga2-list-agents.cmake +++ b/tools/icinga2-list-agents.cmake @@ -28,9 +28,24 @@ inventory = {} for root, dirs, files in os.walk(inventory_dir): for file in files: + if len(file) != 64: + continue + fp = open(root + file, "r") inventory_info = json.load(fp) - inventory[inventory_info["identity"]] = inventory_info["crs"]["services"].keys() + fp.close() + + inventory[inventory_info["identity"]] = {} + inventory[inventory_info["identity"]]["services"] = inventory_info["crs"]["services"].keys() + + try: + fp = open(root + file + ".peer", "r") + peer_info = json.load(fp) + fp.close() + + inventory[inventory_info["identity"]]["peer"] = peer_info + except: + pass json.dump(inventory, sys.stdout) sys.exit(0) -- 2.40.0