IcingaObject: fix plain export with chosen...

...properties, use new template resolving repository everywhere
This commit is contained in:
Thomas Gelf 2017-08-16 08:11:08 +02:00
parent 93cb271554
commit b364165110
1 changed files with 47 additions and 14 deletions

View File

@ -18,6 +18,7 @@ use Icinga\Module\Director\IcingaConfig\IcingaConfig;
use Icinga\Module\Director\IcingaConfig\IcingaConfigRenderer; use Icinga\Module\Director\IcingaConfig\IcingaConfigRenderer;
use Icinga\Module\Director\IcingaConfig\IcingaConfigHelper as c; use Icinga\Module\Director\IcingaConfig\IcingaConfigHelper as c;
use Icinga\Module\Director\IcingaConfig\IcingaLegacyConfigHelper as c1; use Icinga\Module\Director\IcingaConfig\IcingaLegacyConfigHelper as c1;
use Icinga\Module\Director\Repository\IcingaTemplateRepository;
use Icinga\Module\Director\Resolver\TemplateTree; use Icinga\Module\Director\Resolver\TemplateTree;
abstract class IcingaObject extends DbObject implements IcingaConfigRenderer abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
@ -861,7 +862,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
public function getImports() public function getImports()
{ {
return $this->imports()->listImportNames(); return $this->listImportNames();
} }
public function templateResolver() public function templateResolver()
@ -1071,7 +1072,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
protected function triggerLoopDetection() protected function triggerLoopDetection()
{ {
$this->templateResolver()->listResolvedParentIds(); // $this->templateResolver()->listResolvedParentIds();
} }
public function getSingleResolvedProperty($key, $default = null) public function getSingleResolvedProperty($key, $default = null)
@ -1113,7 +1114,8 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
$vals['_MERGED_'] = (object) array(); $vals['_MERGED_'] = (object) array();
$vals['_INHERITED_'] = (object) array(); $vals['_INHERITED_'] = (object) array();
$vals['_ORIGINS_'] = (object) array(); $vals['_ORIGINS_'] = (object) array();
$objects = $this->imports()->getObjects(); // $objects = $this->imports()->getObjects();
$objects = IcingaTemplateRepository::instanceByObject($this)->getTemplatesFor($this);
$get = 'get' . $what; $get = 'get' . $what;
$getInherited = 'getInherited' . $what; $getInherited = 'getInherited' . $what;
@ -1598,6 +1600,17 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
protected function renderImports() protected function renderImports()
{ {
$ret = '';
foreach ($this->getImports() as $name) {
$ret .= ' import ' . c::renderString($name) . "\n";
}
if ($ret !== '') {
$ret .= "\n";
}
return $ret;
// TODO: parent_host ORDERed by weigth... // TODO: parent_host ORDERed by weigth...
if ($this->supportsImports()) { if ($this->supportsImports()) {
return $this->imports()->toConfigString(); return $this->imports()->toConfigString();
@ -2482,12 +2495,6 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
} }
} }
if ($chosenProperties !== null) {
if (! in_array($v, $chosenProperties)) {
continue;
}
}
// TODO: Do not ship null properties based on flag? // TODO: Do not ship null properties based on flag?
if (!$skipDefaults || $this->differsFromDefaultValue($k, $v)) { if (!$skipDefaults || $this->differsFromDefaultValue($k, $v)) {
if ($k === 'disabled' || $this->propertyIsBoolean($k)) { if ($k === 'disabled' || $this->propertyIsBoolean($k)) {
@ -2589,6 +2596,16 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
} }
} }
if ($chosenProperties !== null) {
$chosen = [];
foreach ($chosenProperties as $k) {
if (array_key_exists($k, $props)) {
$chosen[$k] = $props[$k];
}
}
$props = $chosen;
}
ksort($props); ksort($props);
return (object) $props; return (object) $props;
@ -2596,11 +2613,27 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
public function listImportNames() public function listImportNames()
{ {
if (PrefetchCache::shouldBeUsed()) { return $this->templateTree()->listParentNamesFor($this);
return PrefetchCache::instance()->listImportNames($this); }
} else {
return $this->imports()->listImportNames(); public function listImportIds()
} {
return $this->templateTree()->listParentIdsFor($this);
}
public function listAncestorIds()
{
return $this->templateTree()->listAncestorIdsFor($this);
}
protected function templateTree()
{
return $this->templates()->tree();
}
protected function templates()
{
return IcingaTemplateRepository::instanceByObject($this, $this->getConnection());
} }
protected function differsFromDefaultValue($key, $value) protected function differsFromDefaultValue($key, $value)