mirror of
https://github.com/Icinga/icingaweb2-module-businessprocess.git
synced 2025-12-20 23:00:16 -05:00
Internally non-process children are only instantiated once. This means when applying state overrides directly they're used everywhere and do not differ between the containing process. State overrides are now applied explicitly and on demand, decoupling them from children.
75 lines
1.9 KiB
PHP
75 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace Icinga\Module\Businessprocess\Modification;
|
|
|
|
use Icinga\Module\Businessprocess\BpConfig;
|
|
|
|
class NodeAddChildrenAction extends NodeAction
|
|
{
|
|
protected $children = array();
|
|
|
|
protected $preserveProperties = array('children');
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function appliesTo(BpConfig $config)
|
|
{
|
|
$name = $this->getNodeName();
|
|
|
|
if (! $config->hasBpNode($name)) {
|
|
$this->error('Process "%s" not found', $name);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @inheritdoc
|
|
*/
|
|
public function applyTo(BpConfig $config)
|
|
{
|
|
$node = $config->getBpNode($this->getNodeName());
|
|
|
|
foreach ($this->children as $name) {
|
|
if (! $config->hasNode($name) || $config->getNode($name)->getBpConfig()->getName() !== $config->getName()) {
|
|
if (strpos($name, ';') !== false) {
|
|
list($host, $service) = preg_split('/;/', $name, 2);
|
|
|
|
if ($service === 'Hoststatus') {
|
|
$config->createHost($host);
|
|
} else {
|
|
$config->createService($host, $service);
|
|
}
|
|
} elseif ($name[0] === '@' && strpos($name, ':') !== false) {
|
|
list($configName, $nodeName) = preg_split('~:\s*~', substr($name, 1), 2);
|
|
$config->createImportedNode($configName, $nodeName);
|
|
}
|
|
}
|
|
$node->addChild($config->getNode($name));
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @param array|string $children
|
|
* @return $this
|
|
*/
|
|
public function setChildren($children)
|
|
{
|
|
if (is_string($children)) {
|
|
$children = array($children);
|
|
}
|
|
$this->children = $children;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function getChildren()
|
|
{
|
|
return $this->children;
|
|
}
|
|
}
|