95 lines
2.3 KiB
PHP
95 lines
2.3 KiB
PHP
<?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;
|
|
}
|
|
}
|