From f66ab8dae2f3d0418759f81a3a64dc9517a62449 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 14 Apr 2024 15:17:31 +0200 Subject: Adding upstream version 1.10.2. Signed-off-by: Daniel Baumann --- application/forms/SettingsForm.php | 238 +++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 application/forms/SettingsForm.php (limited to 'application/forms/SettingsForm.php') diff --git a/application/forms/SettingsForm.php b/application/forms/SettingsForm.php new file mode 100644 index 0000000..f6ba654 --- /dev/null +++ b/application/forms/SettingsForm.php @@ -0,0 +1,238 @@ +settings; + + $this->addHtmlHint( + $this->translate( + 'Please only change those settings in case you are really sure' + . ' that you are required to do so. Usually the defaults chosen' + . ' by the Icinga Director should make a good fit for your' + . ' environment.' + ) + ); + $globalZones = $this->eventuallyConfiguredEnum('default_global_zone', $this->enumGlobalZones()); + + $this->addElement('select', 'default_global_zone', array( + 'label' => $this->translate('Default global zone'), + 'multiOptions' => $globalZones, + 'description' => $this->translate( + 'Icinga Director decides to deploy objects like CheckCommands' + . ' to a global zone. This defaults to "director-global" but' + . ' might be adjusted to a custom Zone name' + ), + 'value' => $settings->getStoredValue('default_global_zone') + )); + + $this->addElement('text', 'icinga_package_name', array( + 'label' => $this->translate('Icinga Package Name'), + 'description' => $this->translate( + 'The Icinga Package name Director uses to deploy it\'s configuration.' + . ' This defaults to "director" and should not be changed unless' + . ' you really know what you\'re doing' + ), + 'placeholder' => $settings->get('icinga_package_name'), + 'value' => $settings->getStoredValue('icinga_package_name') + )); + + $this->addElement('select', 'disable_all_jobs', array( + 'label' => $this->translate('Disable all Jobs'), + 'multiOptions' => $this->eventuallyConfiguredEnum( + 'disable_all_jobs', + array( + 'n' => $this->translate('No'), + 'y' => $this->translate('Yes'), + ) + ), + 'description' => $this->translate( + 'Whether all configured Jobs should be disabled' + ), + 'value' => $settings->getStoredValue('disable_all_jobs') + )); + + $this->addElement('select', 'enable_audit_log', array( + 'label' => $this->translate('Enable audit log'), + 'multiOptions' => $this->eventuallyConfiguredEnum( + 'enable_audit_log', + array( + 'n' => $this->translate('No'), + 'y' => $this->translate('Yes'), + ) + ), + 'description' => $this->translate( + 'All changes are tracked in the Director database. In addition' + . ' you might also want to send an audit log through the Icinga' + . " Web 2 logging mechanism. That way all changes would be" + . ' written to either Syslog or the configured log file. When' + . ' enabling this please make sure that you configured Icinga' + . ' Web 2 to log at least at "informational" level.' + ), + 'value' => $settings->getStoredValue('enable_audit_log') + )); + + if ($settings->getStoredValue('ignore_bug7530')) { + // Show this only for those who touched this setting + $this->addElement('select', 'ignore_bug7530', array( + 'label' => $this->translate('Ignore Bug #7530'), + 'multiOptions' => $this->eventuallyConfiguredEnum( + 'ignore_bug7530', + array( + 'n' => $this->translate('No'), + 'y' => $this->translate('Yes'), + ) + ), + 'description' => $this->translate( + 'Icinga v2.11.0 breaks some configurations, the Director will' + . ' warn you before every deployment in case your config is' + . ' affected. This setting allows to hide this warning.' + ), + 'value' => $settings->getStoredValue('ignore_bug7530') + )); + } + + $this->addBoolean('feature_custom_endpoint', [ + 'label' => $this->translate('Feature: Custom Endpoint Name'), + 'description' => $this->translate( + 'Enabled the feature for custom endpoint names,' + . ' where you can choose a different name for the generated endpoint object.' + . ' This uses some Icinga config snippets and a special custom variable.' + . ' Please do NOT enable this, unless you really need divergent endpoint names!' + ), + 'value' => $settings->getStoredValue('feature_custom_endpoint') + ]); + + + $this->addElement('select', 'config_format', array( + 'label' => $this->translate('Configuration format'), + 'multiOptions' => $this->eventuallyConfiguredEnum( + 'config_format', + array( + 'v2' => $this->translate('Icinga v2.x'), + 'v1' => $this->translate('Icinga v1.x'), + ) + ), + 'description' => $this->translate( + 'Default configuration format. Please note that v1.x is for' + . ' special transitional projects only and completely' + . ' unsupported. There are no plans to make Director a first-' + . 'class configuration backends for Icinga 1.x' + ), + 'class' => 'autosubmit', + 'value' => $settings->getStoredValue('config_format') + )); + + $this->setSubmitLabel($this->translate('Store')); + + if ($this->hasBeenSent()) { + if ($this->getSentValue('config_format') !== 'v1') { + return; + } + } elseif ($settings->getStoredValue('config_format') !== 'v1') { + return; + } + + $this->addElement('select', 'deployment_mode_v1', array( + 'label' => $this->translate('Deployment mode'), + 'multiOptions' => $this->eventuallyConfiguredEnum( + 'deployment_mode_v1', + array( + 'active-passive' => $this->translate('Active-Passive'), + 'masterless' => $this->translate('Master-less'), + ) + ), + 'description' => $this->translate( + 'Deployment mode for Icinga 1 configuration' + ), + 'value' => $settings->getStoredValue('deployment_mode_v1') + )); + + $this->addElement('text', 'deployment_path_v1', array( + 'label' => $this->translate('Deployment Path'), + 'description' => $this->translate( + 'Local directory to deploy Icinga 1.x configuration.' + . ' Must be writable by icingaweb2.' + . ' (e.g. /etc/icinga/director)' + ), + 'value' => $settings->getStoredValue('deployment_path_v1') + )); + + $this->addElement('text', 'activation_script_v1', array( + 'label' => $this->translate('Activation Tool'), + 'description' => $this->translate( + 'Script or tool to call when activating a new configuration stage.' + . ' (e.g. sudo /usr/local/bin/icinga-director-activate)' + . ' (name of the stage will be the argument for the script)' + ), + 'value' => $settings->getStoredValue('activation_script_v1') + )); + } + + protected function eventuallyConfiguredEnum($name, $enum) + { + if (array_key_exists($name, $enum)) { + $default = sprintf( + $this->translate('%s (default)'), + $enum[$this->settings->getDefaultValue($name)] + ); + } else { + $default = $this->translate('- please choose -'); + } + + return [null => $default] + $enum; + } + + public function setSettings(Settings $settings) + { + $this->settings = $settings; + return $this; + } + + protected function enumGlobalZones() + { + $db = $this->settings->getDb(); + $zones = $db->fetchCol( + $db->select()->from('icinga_zone', 'object_name') + ->where('disabled = ?', 'n') + ->where('is_global = ?', 'y') + ->order('object_name') + ); + + return array_combine($zones, $zones); + } + + public function onSuccess() + { + try { + foreach ($this->getValues() as $key => $value) { + if ($value === '') { + $value = null; + } + + $this->settings->set($key, $value); + } + + $this->setSuccessMessage($this->translate( + 'Settings have been stored' + )); + + parent::onSuccess(); + } catch (Exception $e) { + $this->addError($e->getMessage()); + } + } +} -- cgit v1.2.3