1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
<?php
namespace Icinga\Module\Director\Forms;
use Icinga\Module\Director\Web\Form\DirectorObjectForm;
class IcingaCommandForm extends DirectorObjectForm
{
public function setup()
{
$this->addObjectTypeElement();
if (! $this->hasObjectType()) {
return;
}
$this->addElement('select', 'methods_execute', array(
'label' => $this->translate('Command type'),
'multiOptions' => array(
null => '- please choose -',
$this->translate('Plugin commands') => array(
'PluginCheck' => 'Plugin Check Command',
'PluginNotification' => 'Notification Plugin Command',
'PluginEvent' => 'Event Plugin Command',
),
$this->translate('Internal commands') => array(
'IcingaCheck' => 'Icinga Check Command',
'ClusterCheck' => 'Icinga Cluster Check Command',
'ClusterZoneCheck' => 'Icinga Cluster Zone Check Command',
'IdoCheck' => 'Ido Check Command',
'RandomCheck' => 'Random Check Command',
)
),
'required' => ! $this->isTemplate(),
'description' => $this->translate(
'Plugin Check commands are what you need when running checks agains'
. ' your infrastructure. Notification commands will be used when it'
. ' comes to notify your users. Event commands allow you to trigger'
. ' specific actions when problems occur. Some people use them for'
. ' auto-healing mechanisms, like restarting services or rebooting'
. ' systems at specific thresholds'
),
'class' => 'autosubmit'
));
$nameLabel = $this->isTemplate()
? $this->translate('Name')
: $this->translate('Command name');
$this->addElement('text', 'object_name', array(
'label' => $nameLabel,
'required' => true,
'description' => $this->translate('Identifier for the Icinga command you are going to create')
));
$this->addImportsElement(false);
$this->addElement('text', 'command', array(
'label' => $this->translate('Command'),
'required' => ! $this->isTemplate(),
'description' => $this->translate(
'The command Icinga should run. Absolute paths are accepted as provided,'
. ' relative paths are prefixed with "PluginDir + ", similar Constant prefixes are allowed.'
. ' Spaces will lead to separation of command path and standalone arguments. Please note that'
. ' this means that we do not support spaces in plugin names and paths right now.'
)
));
$this->addElement('text', 'timeout', array(
'label' => $this->translate('Timeout'),
'description' => $this->translate(
'Optional command timeout. Allowed values are seconds or durations postfixed with a'
. ' specific unit (e.g. 1m or also 3m 30s).'
)
));
$descIsString = [
$this->translate('Render the command as a plain string instead of an array.'),
$this->translate('If enabled you can not define arguments.'),
$this->translate('Disabled by default, and should only be used in rare cases.'),
$this->translate('WARNING, this can allow shell script injection via custom variables used in command.'),
];
$this->addBoolean(
'is_string',
array(
'label' => $this->translate('Render as string'),
'description' => join(' ', $descIsString),
)
);
$this->addDisabledElement();
$this->addZoneSection();
$this->setButtons();
}
protected function addZoneSection()
{
$this->addZoneElement(true);
$elements = array(
'zone_id',
);
$this->addDisplayGroup($elements, 'clustering', array(
'decorators' => array(
'FormElements',
array('HtmlTag', array('tag' => 'dl')),
'Fieldset',
),
'order' => self::GROUP_ORDER_CLUSTERING,
'legend' => $this->translate('Zone settings')
));
return $this;
}
protected function enumAllowedTemplates()
{
$object = $this->object();
$tpl = $this->db->enum($object->getTableName());
if (empty($tpl)) {
return array();
}
$id = $object->get('id');
if (array_key_exists($id, $tpl)) {
unset($tpl[$id]);
}
if (empty($tpl)) {
return array();
}
$tpl = array_combine($tpl, $tpl);
return $tpl;
}
}
|