Support the rendering of service custom variable in Dependencies form
This commit is contained in:
parent
c65369602f
commit
1b74177d6d
|
@ -5,6 +5,7 @@ namespace Icinga\Module\Director\Forms;
|
||||||
use Icinga\Module\Director\Data\Db\DbObject;
|
use Icinga\Module\Director\Data\Db\DbObject;
|
||||||
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
|
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
|
||||||
use Icinga\Module\Director\Objects\IcingaDependency;
|
use Icinga\Module\Director\Objects\IcingaDependency;
|
||||||
|
use Zend_Validate_Callback;
|
||||||
|
|
||||||
class IcingaDependencyForm extends DirectorObjectForm
|
class IcingaDependencyForm extends DirectorObjectForm
|
||||||
{
|
{
|
||||||
|
@ -196,34 +197,79 @@ class IcingaDependencyForm extends DirectorObjectForm
|
||||||
$parentHost = '$' . $dependency->get('parent_host_var') . '$';
|
$parentHost = '$' . $dependency->get('parent_host_var') . '$';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$parentHostDescription = $this->translate('Optional. The parent host.');
|
||||||
|
$applyTo = $this->getSentOrObjectValue('apply_to');
|
||||||
|
$parentHostValidator = new Zend_Validate_Callback(function ($value) use ($applyTo) {
|
||||||
|
if ($applyTo === 'host' && $this->isCustomVar($value)) {
|
||||||
|
return explode('.', trim($value, '$'))[0] === 'host';
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
|
||||||
|
$parentHostValidator->setMessage(
|
||||||
|
$this->translate('The parent host cannot be a service custom variable for a host dependency'),
|
||||||
|
Zend_Validate_Callback::INVALID_VALUE
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($applyTo === 'service') {
|
||||||
|
$additionalDescription = $this->translate(
|
||||||
|
'You might want to refer to Host or Service Custom Variables via $host|service.vars.varname$'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$additionalDescription = $this->translate(
|
||||||
|
'You might want to refer to Host Custom Variables via $host.vars.varname$'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$parentHostDescription .= ' ' . $additionalDescription;
|
||||||
|
|
||||||
$this->addElement('text', 'parent_host', [
|
$this->addElement('text', 'parent_host', [
|
||||||
'label' => $this->translate('Parent Host'),
|
'label' => $this->translate('Parent Host'),
|
||||||
'description' => $this->translate(
|
'description' => $parentHostDescription,
|
||||||
'The parent host. You might want to refer Host Custom Variables'
|
'class' => "autosubmit director-suggest",
|
||||||
. ' via $host.vars.varname$'
|
|
||||||
),
|
|
||||||
'class' => "autosubmit director-suggest",
|
|
||||||
'data-suggestion-context' => 'hostnames',
|
'data-suggestion-context' => 'hostnames',
|
||||||
'order' => 10,
|
'order' => 10,
|
||||||
'required' => $this->isObject(),
|
'required' => $this->isObject(),
|
||||||
'value' => $parentHost
|
'value' => $parentHost,
|
||||||
|
'validators' => [$parentHostValidator]
|
||||||
]);
|
]);
|
||||||
$sentParent = $this->getSentOrObjectValue('parent_host');
|
$sentParent = $this->getSentOrObjectValue('parent_host');
|
||||||
|
|
||||||
if (!empty($sentParent) || $dependency->isApplyRule()) {
|
if (!empty($sentParent) || $dependency->isApplyRule()) {
|
||||||
$parentService = $dependency->get('parent_service');
|
$parentService = $dependency->get('parent_service');
|
||||||
|
if ($parentService === null) {
|
||||||
|
$parentServiceVar = $dependency->get('parent_service_by_name');
|
||||||
|
if ($parentServiceVar) {
|
||||||
|
$parentService = '$' . $parentServiceVar . '$';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$parentServiceDescription = $this->translate(
|
||||||
|
'Optional. The parent service. If omitted this dependency'
|
||||||
|
. ' object is treated as host dependency.'
|
||||||
|
);
|
||||||
|
|
||||||
|
$parentServiceDescription .= ' ' . $additionalDescription;
|
||||||
|
|
||||||
|
$parentServiceValidator = clone $parentHostValidator;
|
||||||
|
|
||||||
|
$parentServiceValidator->setMessage(
|
||||||
|
$this->translate('The parent service cannot be a service custom variable for a host dependency'),
|
||||||
|
Zend_Validate_Callback::INVALID_VALUE
|
||||||
|
);
|
||||||
|
|
||||||
$this->addElement('text', 'parent_service', [
|
$this->addElement('text', 'parent_service', [
|
||||||
'label' => $this->translate('Parent Service'),
|
'label' => $this->translate('Parent Service'),
|
||||||
'description' => $this->translate(
|
'description' => $parentServiceDescription,
|
||||||
'Optional. The parent service. If omitted this dependency'
|
'class' => "autosubmit director-suggest",
|
||||||
. ' object is treated as host dependency.'
|
'data-suggestion-context' => 'servicenames',
|
||||||
),
|
'data-suggestion-for-host' => $sentParent,
|
||||||
'class' => "autosubmit director-suggest",
|
'order' => 20,
|
||||||
'data-suggestion-context' => 'servicenames',
|
'value' => $parentService,
|
||||||
'data-suggestion-for-host' => $sentParent,
|
'validators' => [$parentServiceValidator]
|
||||||
'order' => 20,
|
]);
|
||||||
'value' => $parentService
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If configuring Object, allow selection of child host and/or service,
|
// If configuring Object, allow selection of child host and/or service,
|
||||||
|
@ -296,6 +342,13 @@ class IcingaDependencyForm extends DirectorObjectForm
|
||||||
$values['parent_host_var'] = \trim($values['parent_host'], '$');
|
$values['parent_host_var'] = \trim($values['parent_host'], '$');
|
||||||
$values['parent_host'] = '';
|
$values['parent_host'] = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($values['parent_service'])
|
||||||
|
&& $this->isCustomVar($values['parent_service'])
|
||||||
|
) {
|
||||||
|
$values['parent_service_by_name'] = trim($values['parent_service'], '$');
|
||||||
|
$values['parent_service'] = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
parent::handleProperties($object, $values);
|
parent::handleProperties($object, $values);
|
||||||
|
@ -303,7 +356,6 @@ class IcingaDependencyForm extends DirectorObjectForm
|
||||||
|
|
||||||
protected function isCustomVar($string)
|
protected function isCustomVar($string)
|
||||||
{
|
{
|
||||||
return \preg_match('/^\$(?:host)\.vars\..+\$$/', $string);
|
return preg_match('/^\$(?:host|service)\.vars\..+\$$/', $string);
|
||||||
// Eventually: return \preg_match('/^\$(?:host|service)\.vars\..+\$$/', $string);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,6 +83,18 @@ class IcingaDependency extends IcingaObject implements ExportInterface
|
||||||
return $this->get('parent_host_var') !== null;
|
return $this->get('parent_host_var') !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given string is a custom variable
|
||||||
|
*
|
||||||
|
* @param $string string
|
||||||
|
*
|
||||||
|
* @return false|int
|
||||||
|
*/
|
||||||
|
protected function isCustomVar(string $string)
|
||||||
|
{
|
||||||
|
return preg_match('/^(?:host|service)\.vars\..+$/', $string);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
* @throws ConfigurationError
|
* @throws ConfigurationError
|
||||||
|
@ -440,9 +452,16 @@ class IcingaDependency extends IcingaObject implements ExportInterface
|
||||||
public function renderParent_service_by_name()
|
public function renderParent_service_by_name()
|
||||||
{
|
{
|
||||||
// @codingStandardsIgnoreEnd
|
// @codingStandardsIgnoreEnd
|
||||||
|
$var = $this->get('parent_service_by_name');
|
||||||
|
if ($this->isCustomVar($var)) {
|
||||||
|
return c::renderKeyValue(
|
||||||
|
'parent_service_name',
|
||||||
|
$var
|
||||||
|
);
|
||||||
|
}
|
||||||
return c::renderKeyValue(
|
return c::renderKeyValue(
|
||||||
'parent_service_name',
|
'parent_service_name',
|
||||||
c::renderString($this->get('parent_service_by_name'))
|
c::renderString($var)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -593,8 +612,12 @@ class IcingaDependency extends IcingaObject implements ExportInterface
|
||||||
$related = parent::getRelatedProperty($key);
|
$related = parent::getRelatedProperty($key);
|
||||||
// handle special case for plain string parent service on Dependency
|
// handle special case for plain string parent service on Dependency
|
||||||
// Apply rules
|
// Apply rules
|
||||||
if ($related === null && $key === 'parent_service'
|
if ($related === null
|
||||||
&& null !== $this->get('parent_service_by_name')
|
&& $key === 'parent_service'
|
||||||
|
&& (
|
||||||
|
$this->get('parent_service_by_name')
|
||||||
|
&& ! $this->isCustomVar($this->get('parent_service_by_name'))
|
||||||
|
)
|
||||||
) {
|
) {
|
||||||
return $this->get('parent_service_by_name');
|
return $this->get('parent_service_by_name');
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue