SelfService: various changes
* Allow to enable NSClient++ * Allow to fetch global settings with the template key * Restructure some methods
This commit is contained in:
parent
e566d32ccf
commit
91e9cec1e0
|
@ -195,11 +195,57 @@ class SelfServiceController extends ActionController
|
||||||
$db = $this->db();
|
$db = $this->db();
|
||||||
$key = $this->params->getRequired('key');
|
$key = $this->params->getRequired('key');
|
||||||
$host = IcingaHost::loadWithApiKey($key, $db);
|
$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') {
|
if ($host->getSingleResolvedProperty('has_agent') !== 'y') {
|
||||||
$this->sendPowerShellError(sprintf(
|
$this->sendPowerShellError(sprintf(
|
||||||
'%s is not configured for Icinga Agent usage',
|
'%s is not configured for Icinga Agent usage',
|
||||||
|
@ -220,32 +266,26 @@ class SelfServiceController extends ActionController
|
||||||
|
|
||||||
$zone = IcingaZone::load($zoneName, $db);
|
$zone = IcingaZone::load($zoneName, $db);
|
||||||
$master = $db->getDeploymentEndpoint();
|
$master = $db->getDeploymentEndpoint();
|
||||||
$settings = new Settings($db);
|
$params['parent_zone'] = $zoneName;
|
||||||
$params = [
|
$params['ca_server'] = $master->getObjectName();
|
||||||
'fetch_agent_name' => $settings->get('self-service/agent_name') === 'host',
|
$params['parent_endpoints'] = $zone->listEndpoints();
|
||||||
'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'
|
|
||||||
];
|
|
||||||
|
|
||||||
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';
|
$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') {
|
protected function addBooleanSettingsToParams(Settings $settings, array $keys, array & $params)
|
||||||
echo $this->makePlainTextPowerShellArray($params);
|
{
|
||||||
} else {
|
foreach ($keys as $key) {
|
||||||
$this->sendJson($this->getResponse(), $params);
|
$params[$key] = $settings->get("self-service/$key") === 'y';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,6 +161,21 @@ class SelfServiceSettingsForm extends DirectorForm
|
||||||
'value' => $settings->getStoredOrDefaultValue('self-service/allow_updates'),
|
'value' => $settings->getStoredOrDefaultValue('self-service/allow_updates'),
|
||||||
'required' => true,
|
'required' => true,
|
||||||
], 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)
|
public static function create(Db $db, Settings $settings)
|
||||||
|
|
Loading…
Reference in New Issue