diff options
Diffstat (limited to 'application/forms/SyncRuleForm.php')
-rw-r--r-- | application/forms/SyncRuleForm.php | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/application/forms/SyncRuleForm.php b/application/forms/SyncRuleForm.php new file mode 100644 index 0000000..d88e493 --- /dev/null +++ b/application/forms/SyncRuleForm.php @@ -0,0 +1,112 @@ +<?php + +namespace Icinga\Module\Director\Forms; + +use Icinga\Module\Director\Web\Form\DirectorObjectForm; + +class SyncRuleForm extends DirectorObjectForm +{ + public function setup() + { + $availableTypes = [ + 'host' => $this->translate('Host'), + 'hostgroup' => $this->translate('Host Group'), + 'service' => $this->translate('Service'), + 'servicegroup' => $this->translate('Service Group'), + 'serviceSet' => $this->translate('Service Set'), + 'user' => $this->translate('User'), + 'usergroup' => $this->translate('User Group'), + 'datalistEntry' => $this->translate('Data List Entry'), + 'command' => $this->translate('Command'), + 'timePeriod' => $this->translate('Time Period'), + 'notification' => $this->translate('Notification'), + 'scheduledDowntime' => $this->translate('Scheduled Downtime'), + 'dependency' => $this->translate('Dependency'), + 'endpoint' => $this->translate('Endpoint'), + 'zone' => $this->translate('Zone'), + ]; + + $this->addElement('text', 'rule_name', [ + 'label' => $this->translate('Rule name'), + 'description' => $this->translate('Please provide a rule name'), + 'required' => true, + ]); + + $this->addElement('textarea', 'description', [ + 'label' => $this->translate('Description'), + 'description' => $this->translate( + 'An extended description for this Sync Rule. This should explain' + . ' what this Rule is going to accomplish.' + ), + 'rows' => '3', + ]); + + $this->addElement('select', 'object_type', [ + 'label' => $this->translate('Object Type'), + 'description' => $this->translate('Choose an object type'), + 'required' => true, + 'multiOptions' => $this->optionalEnum($availableTypes) + ]); + + $this->addElement('select', 'update_policy', [ + 'label' => $this->translate('Update Policy'), + 'description' => $this->translate( + 'Define what should happen when an object with a matching key' + . " already exists. You could merge its properties (import source" + . ' wins), replace it completely with the imported object or ignore' + . ' it (helpful for one-time imports). "Update only" means that this' + . ' Rule would never create (or delete) full Objects.' + ), + 'required' => true, + 'multiOptions' => $this->optionalEnum([ + 'merge' => $this->translate('Merge'), + 'override' => $this->translate('Replace'), + 'ignore' => $this->translate('Ignore'), + 'update-only' => $this->translate('Update only'), + ]) + ]); + + $this->addBoolean('purge_existing', [ + 'label' => $this->translate('Purge'), + 'description' => $this->translate( + 'Whether to purge existing objects. This means that objects of' + . ' the same type will be removed from Director in case they no' + . ' longer exist at your import source.' + ), + 'required' => true, + 'class' => 'autosubmit', + ]); + + if ($this->getSentOrObjectValue('purge_existing') === 'y') { + $this->addElement('select', 'purge_action', [ + 'label' => $this->translate('Purge Action'), + 'description' => $this->translate( + 'Whether to delete or to disable objects subject to purge' + ), + 'multiOptions' => $this->optionalEnum([ + 'delete' => $this->translate('Delete'), + 'disable' => $this->translate('Disable'), + ]), + 'required' => true, + ]); + } + + $this->addElement('text', 'filter_expression', [ + 'label' => $this->translate('Filter Expression'), + 'description' => sprintf( + $this->translate( + 'Sync only part of your imported objects with this rule. Icinga Web 2' + . ' filter syntax is allowed, so this could look as follows: %s' + ), + '(host=a|host=b)&!ip=127.*' + ) . ' ' . $this->translate( + 'Be careful: this is usually NOT what you want, as it makes Sync "blind"' + . ' for objects matching this filter. This means that "Purge" will not' + . ' work as expected. The "Black/Whitelist" Import Property Modifier' + . ' is probably what you\'re looking for.' + ), + ]); + + $this->setButtons(); + } +} |