summaryrefslogtreecommitdiffstats
path: root/library/Director/DirectorObject/Lookup/InheritedServiceInfo.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/Director/DirectorObject/Lookup/InheritedServiceInfo.php94
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;
+ }
+}