From 6e83a4fd5b6b56dd84c5e364285abf153d89591f Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Mon, 24 Oct 2016 21:55:02 +0000 Subject: [PATCH] IcingaObjectGroup: provide groups for assign rules --- library/Director/Objects/IcingaHost.php | 2 ++ .../Director/Objects/IcingaObjectGroup.php | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/library/Director/Objects/IcingaHost.php b/library/Director/Objects/IcingaHost.php index 81633e26..8b8765da 100644 --- a/library/Director/Objects/IcingaHost.php +++ b/library/Director/Objects/IcingaHost.php @@ -139,6 +139,8 @@ class IcingaHost extends IcingaObject $properties[$props] = $hostProperties; } + $properties['groups'] = 'Groups'; + if (!empty($hostVars)) { $properties[$vars] = $hostVars; } diff --git a/library/Director/Objects/IcingaObjectGroup.php b/library/Director/Objects/IcingaObjectGroup.php index a8a92260..b92a31ef 100644 --- a/library/Director/Objects/IcingaObjectGroup.php +++ b/library/Director/Objects/IcingaObjectGroup.php @@ -2,6 +2,9 @@ namespace Icinga\Module\Director\Objects; +use Icinga\Application\Config; +use Icinga\Exception\IcingaException; +use Icinga\Module\Director\Db; use Icinga\Module\Director\IcingaConfig\IcingaConfig; abstract class IcingaObjectGroup extends IcingaObject @@ -21,4 +24,32 @@ abstract class IcingaObjectGroup extends IcingaObject { return $this->connection->getDefaultGlobalZoneName(); } + + public static function enumForType($type, Db $connection = null) + { + if ($connection === null) { + // TODO: not nice :( + $connection = Db::fromResourceName( + Config::module('director')->get('db', 'resource') + ); + } + + // Last resort defense against potentiall lousy checks: + if (! ctype_alpha($type)) { + throw new IcingaException( + 'Holy shit, you should never have reached this' + ); + } + + $db = $connection->getDbAdapter(); + $select = $db->select()->from( + 'icinga_' . $type . 'group', + array( + 'name' => 'object_name', + 'display' => 'COALESCE(display_name, object_name)' + ) + )->where('object_type = ?', 'object')->order('display'); + + return $db->fetchPairs($select); + } }