SelfService: various changes

* Allow to enable NSClient++
* Allow to fetch global settings with the template key
* Restructure some methods
This commit is contained in:
Thomas Gelf 2017-07-07 08:34:21 +02:00
parent e566d32ccf
commit 91e9cec1e0
2 changed files with 81 additions and 26 deletions

View File

@ -195,11 +195,57 @@ class SelfServiceController extends ActionController
$db = $this->db();
$key = $this->params->getRequired('key');
$host = IcingaHost::loadWithApiKey($key, $db);
if ($host->isTemplate()) {
throw new NotFoundError('Got invalid API key "%s"', $key);
}
$name = $host->getObjectName();
$settings = new Settings($db);
$params = [
'fetch_agent_name' => $settings->get('self-service/agent_name') === 'hostname',
'fetch_agent_fqdn' => $settings->get('self-service/agent_name') === 'fqdn',
'transform_hostname' => $settings->get('self-service/transform_hostname'),
'flush_api_directory' => $settings->get('self-service/flush_api_dir') === 'y'
];
if ($settings->get('self-service/download_type')) {
$params['download_url'] = $settings->get('self-service/download_url');
$params['agent_version'] = $settings->get('self-service/agent_version');
$params['allow_updates'] = $settings->get('self-service/allow_updates') === 'y';
if ($hashes = $settings->get('self-service/installer_hashes')) {
$params['installer_hashes'] = json_decode($hashes);
}
if ($settings->get('self-service/install_nsclient') === 'y') {
$params['install_nsclient'] = true;
$this->addBooleanSettingsToParams($settings, [
'nsclient_add_defaults',
'nsclient_firewall',
'nsclient_service',
], $params);
$this->addStringSettingsToParams($settings, [
'nsclient_directory',
'nsclient_installer_path'
], $params);
}
}
$this->addHostToParams($host, $params);
if ($this->getRequest()->getHeader('X-Director-Accept') === 'text/plain') {
echo $this->makePlainTextPowerShellArray($params);
} else {
$this->sendJson($this->getResponse(), $params);
}
}
protected function addHostToParams(IcingaHost $host, array & $params)
{
if (! $host->isObject()) {
return;
}
$db = $this->db();
$name = $host->getObjectName();
if ($host->getSingleResolvedProperty('has_agent') !== 'y') {
$this->sendPowerShellError(sprintf(
'%s is not configured for Icinga Agent usage',
@ -220,32 +266,26 @@ class SelfServiceController extends ActionController
$zone = IcingaZone::load($zoneName, $db);
$master = $db->getDeploymentEndpoint();
$settings = new Settings($db);
$params = [
'fetch_agent_name' => $settings->get('self-service/agent_name') === 'host',
'fetch_agent_fqdn' => $settings->get('self-service/agent_name') === 'fqdn',
'transform_hostname' => $settings->get('self-service/transform_hostname'),
'parent_zone' => $zoneName,
'ca_server' => $master->getObjectName(),
'parent_endpoints' => $zone->listEndpoints(),
'flush_api_directory' => $settings->get('self-service/flush_api_dir') === 'y'
];
$params['parent_zone'] = $zoneName;
$params['ca_server'] = $master->getObjectName();
$params['parent_endpoints'] = $zone->listEndpoints();
$params['accept_config'] = $host->getSingleResolvedProperty('accept_config')=== 'y';
}
if ($settings->get('self-service/download_type')) {
$params['download_url'] = $settings->get('self-service/download_url');
$params['agent_version'] = $settings->get('self-service/agent_version');
$params['allow_updates'] = $settings->get('self-service/allow_updates') === 'y';
$params['accept_config'] = $host->getSingleResolvedProperty('accept_config')=== 'y';
if ($hashes = $settings->get('self-service/installer_hashes')) {
$params['installer_hashes'] = json_decode($hashes);
protected function addStringSettingsToParams(Settings $settings, array $keys, array & $params)
{
foreach ($keys as $key) {
$value = $settings->get("self-service/$key");
if (strlen($key)) {
$params[$key] = $value;
}
}
}
if ($this->getRequest()->getHeader('X-Director-Accept') === 'text/plain') {
echo $this->makePlainTextPowerShellArray($params);
} else {
$this->sendJson($this->getResponse(), $params);
protected function addBooleanSettingsToParams(Settings $settings, array $keys, array & $params)
{
foreach ($keys as $key) {
$params[$key] = $settings->get("self-service/$key") === 'y';
}
}
}

View File

@ -161,6 +161,21 @@ class SelfServiceSettingsForm extends DirectorForm
'value' => $settings->getStoredOrDefaultValue('self-service/allow_updates'),
'required' => true,
], true);
$this->addNscpSettings($settings);
}
protected function addNscpSettings(Settings $settings)
{
$this->addBoolean('install_nsclient', [
'label' => $this->translate('Install NSClient++'),
'description' => $this->translate(
'Also install NSClient++. It can be used through the Icinga Agent'
. ' and comes with a bunch of additional Check Plugins'
),
'value' => $settings->getStoredOrDefaultValue('self-service/allow_updates'),
'required' => true,
], true);
}
public static function create(Db $db, Settings $settings)