Sync: respect 'replace' policy on vars...
...with rule policy being set to 'merge' fixes #864
This commit is contained in:
parent
7c47b5a8d1
commit
496be4fbc8
|
@ -51,7 +51,7 @@ class Sync
|
|||
/**
|
||||
* Objects to work with
|
||||
*
|
||||
* @var array
|
||||
* @var IcingaObject[]
|
||||
*/
|
||||
protected $objects;
|
||||
|
||||
|
@ -72,6 +72,8 @@ class Sync
|
|||
|
||||
protected $syncProperties;
|
||||
|
||||
protected $replaceVars = false;
|
||||
|
||||
/**
|
||||
* @var SyncRun
|
||||
*/
|
||||
|
@ -181,6 +183,10 @@ class Sync
|
|||
{
|
||||
$this->syncProperties = $this->rule->fetchSyncProperties();
|
||||
foreach ($this->syncProperties as $key => $prop) {
|
||||
if ($prop->destination_field === 'vars' && $prop->merge_policy === 'override') {
|
||||
$this->replaceVars = true;
|
||||
}
|
||||
|
||||
if (! strlen($prop->filter_expression)) {
|
||||
continue;
|
||||
}
|
||||
|
@ -247,8 +253,8 @@ class Sync
|
|||
|
||||
/**
|
||||
* Fetch latest imported data rows from all involved import sources
|
||||
*
|
||||
* @return self
|
||||
* @return Sync
|
||||
* @throws IcingaException
|
||||
*/
|
||||
protected function fetchImportedData()
|
||||
{
|
||||
|
@ -395,7 +401,7 @@ class Sync
|
|||
|
||||
// TODO: should be obsoleted by a better "loadFiltered" method
|
||||
if ($this->rule->object_type === 'datalistEntry') {
|
||||
$this->removeForeignListEntries($this->objects);
|
||||
$this->removeForeignListEntries();
|
||||
}
|
||||
|
||||
return $this;
|
||||
|
@ -500,13 +506,16 @@ class Sync
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param IcingaObject $object
|
||||
* @return $this
|
||||
*/
|
||||
protected function setResolver($object)
|
||||
{
|
||||
if (! ($object instanceof IcingaObject)) {
|
||||
if (! ($object instanceof IcingaHost || $object instanceof IcingaHostGroup)) {
|
||||
return $this;
|
||||
}
|
||||
if ($resolver = $this->gethostGroupMembershipResolver()) {
|
||||
/** @var IcingaHost|IcingaHostGroup $object */
|
||||
$object->setHostGroupMembershipResolver($resolver);
|
||||
}
|
||||
|
||||
|
@ -522,6 +531,9 @@ class Sync
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool|HostGroupMembershipResolver
|
||||
*/
|
||||
protected function gethostGroupMembershipResolver()
|
||||
{
|
||||
if ($this->hostGroupMembershipResolver === null) {
|
||||
|
@ -577,7 +589,7 @@ class Sync
|
|||
case 'merge':
|
||||
// TODO: re-evaluate merge settings. vars.x instead of
|
||||
// just "vars" might suffice.
|
||||
$this->objects[$key]->merge($object);
|
||||
$this->objects[$key]->merge($object, $this->replaceVars);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -620,8 +632,9 @@ class Sync
|
|||
|
||||
/**
|
||||
* Runs a SyncRule and applies all resulting changes
|
||||
*
|
||||
* @return int
|
||||
* @throws Exception
|
||||
* @throws IcingaException
|
||||
*/
|
||||
public function apply()
|
||||
{
|
||||
|
|
|
@ -2412,7 +2412,7 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
|
|||
}
|
||||
|
||||
// TODO: with rules? What if I want to override vars? Drop in favour of vars.x?
|
||||
public function merge(IcingaObject $object)
|
||||
public function merge(IcingaObject $object, $replaceVars = false)
|
||||
{
|
||||
$object = clone($object);
|
||||
|
||||
|
@ -2425,11 +2425,15 @@ abstract class IcingaObject extends DbObject implements IcingaConfigRenderer
|
|||
|
||||
if ($object->supportsCustomVars()) {
|
||||
$myVars = $this->vars();
|
||||
if ($replaceVars) {
|
||||
$this->set('vars', $vars);
|
||||
} else {
|
||||
/** @var CustomVariables $vars */
|
||||
foreach ($vars as $key => $var) {
|
||||
$myVars->set($key, $var);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue