diff options
Diffstat (limited to '')
-rw-r--r-- | library/Director/DirectorObject/Lookup/InheritedServiceInfo.php | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/library/Director/DirectorObject/Lookup/InheritedServiceInfo.php b/library/Director/DirectorObject/Lookup/InheritedServiceInfo.php new file mode 100644 index 0000000..875d5fb --- /dev/null +++ b/library/Director/DirectorObject/Lookup/InheritedServiceInfo.php @@ -0,0 +1,94 @@ +<?php + +namespace Icinga\Module\Director\DirectorObject\Lookup; + +use gipfl\IcingaWeb2\Url; +use Icinga\Module\Director\Objects\IcingaHost; +use Icinga\Module\Director\Objects\IcingaService; +use Icinga\Module\Director\Repository\IcingaTemplateRepository; +use Ramsey\Uuid\UuidInterface; + +/** + * A Service attached to a parent Service Template. This is a shortcut for + * 'assign where "Template Name" in templates' + */ +class InheritedServiceInfo implements ServiceInfo +{ + /** @var string */ + protected $hostName; + + /** @var string */ + protected $hostTemplateName; + + /** @var string */ + protected $serviceName; + + /** @var UuidInterface */ + protected $uuid; + + public function __construct($hostName, $hostTemplateName, $serviceName, UuidInterface $uuid) + { + $this->hostName = $hostName; + $this->hostTemplateName = $hostTemplateName; + $this->serviceName= $serviceName; + $this->uuid = $uuid; + } + + public static function find(IcingaHost $host, $serviceName) + { + $db = $host->getConnection(); + foreach (IcingaTemplateRepository::instanceByObject($host)->getTemplatesFor($host, true) as $parent) { + $key = [ + 'host_id' => $parent->get('id'), + 'object_name' => $serviceName + ]; + if (IcingaService::exists($key, $db)) { + return new static( + $host->getObjectName(), + $parent->getObjectName(), + $serviceName, + IcingaService::load($key, $db)->getUniqueId() + ); + } + } + + return false; + } + + public function getHostName() + { + return $this->hostName; + } + + public function getUuid() + { + return $this->uuid; + } + + /** + * @return string + */ + public function getHostTemplateName() + { + return $this->hostTemplateName; + } + + public function getName() + { + return $this->serviceName; + } + + public function getUrl() + { + return Url::fromPath('director/host/inheritedservice', [ + 'name' => $this->hostName, + 'service' => $this->serviceName, + 'inheritedFrom' => $this->hostTemplateName + ]); + } + + public function requiresOverrides() + { + return true; + } +} |