2019-12-04 12:36:47 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Icinga\Module\Director\Resolver;
|
|
|
|
|
2021-01-19 01:47:31 +01:00
|
|
|
use Icinga\Module\Director\Core\Json;
|
2019-12-04 12:36:47 +01:00
|
|
|
use Icinga\Module\Director\Db;
|
|
|
|
use Icinga\Module\Director\Objects\IcingaHost;
|
|
|
|
|
|
|
|
class OverriddenVarsResolver
|
|
|
|
{
|
|
|
|
/** @var \Zend_Db_Adapter_Abstract */
|
|
|
|
protected $db;
|
|
|
|
|
|
|
|
/** @var string */
|
2021-01-19 01:47:31 +01:00
|
|
|
protected $overrideVarName;
|
2019-12-04 12:36:47 +01:00
|
|
|
|
|
|
|
public function __construct(Db $connection)
|
|
|
|
{
|
2021-01-19 01:47:31 +01:00
|
|
|
$this->overrideVarName = $connection->settings()->get('override_services_varname');
|
2019-12-04 12:36:47 +01:00
|
|
|
$this->db = $connection->getDbAdapter();
|
|
|
|
}
|
|
|
|
|
2021-01-19 01:47:31 +01:00
|
|
|
public function fetchForHost(IcingaHost $host)
|
2019-12-04 12:36:47 +01:00
|
|
|
{
|
2021-05-28 10:36:31 +02:00
|
|
|
$overrides = [];
|
2019-12-04 12:36:47 +01:00
|
|
|
$parents = $host->listFlatResolvedImportNames();
|
2021-05-28 10:36:31 +02:00
|
|
|
if (empty($parents)) {
|
|
|
|
return $overrides;
|
|
|
|
}
|
2021-01-19 01:47:31 +01:00
|
|
|
$query = $this->db->select()
|
|
|
|
->from(['hv' => 'icinga_host_var'], [
|
|
|
|
'host_name' => 'h.object_name',
|
|
|
|
'varvalue' => 'hv.varvalue',
|
|
|
|
])
|
|
|
|
->join(
|
|
|
|
['h' => 'icinga_host'],
|
|
|
|
'h.id = hv.host_id',
|
|
|
|
[]
|
|
|
|
)
|
|
|
|
->where('hv.varname = ?', $this->overrideVarName)
|
|
|
|
->where('h.object_name IN (?)', $parents);
|
|
|
|
|
2019-12-04 12:36:47 +01:00
|
|
|
foreach ($this->db->fetchAll($query) as $row) {
|
|
|
|
if ($row->varvalue === null) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
foreach (Json::decode($row->varvalue) as $serviceName => $vars) {
|
|
|
|
$overrides[$serviceName][$row->host_name] = $vars;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-01-19 01:47:31 +01:00
|
|
|
return $overrides;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function fetchForServiceName(IcingaHost $host, $serviceName)
|
|
|
|
{
|
|
|
|
$overrides = $this->fetchForHost($host);
|
|
|
|
if (isset($overrides[$serviceName])) {
|
|
|
|
return $overrides[$serviceName];
|
2019-12-04 12:36:47 +01:00
|
|
|
}
|
|
|
|
|
2021-01-19 01:47:31 +01:00
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
|
|
|
public function fetchVarForServiceName(IcingaHost $host, $serviceName, $varName)
|
|
|
|
{
|
|
|
|
$overrides = $this->fetchForHost($host);
|
|
|
|
if (isset($overrides[$serviceName][$varName])) {
|
|
|
|
return $overrides[$serviceName][$varName];
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
2019-12-04 12:36:47 +01:00
|
|
|
}
|
|
|
|
}
|