run: require PHP 5.6, move/modernize hooks

This commit is contained in:
Thomas Gelf 2019-09-19 16:32:36 +02:00
parent 1fa52e5c14
commit 6aed0a2097
3 changed files with 120 additions and 59 deletions

112
register-hooks.php Normal file
View File

@ -0,0 +1,112 @@
<?php
use Icinga\Application\Modules\Module;
use Icinga\Module\Director\DataType\DataTypeArray;
use Icinga\Module\Director\DataType\DataTypeBoolean;
use Icinga\Module\Director\DataType\DataTypeDatalist;
use Icinga\Module\Director\DataType\DataTypeDirectorObject;
use Icinga\Module\Director\DataType\DataTypeNumber;
use Icinga\Module\Director\DataType\DataTypeSqlQuery;
use Icinga\Module\Director\DataType\DataTypeString;
use Icinga\Module\Director\Import\ImportSourceCoreApi;
use Icinga\Module\Director\Import\ImportSourceLdap;
use Icinga\Module\Director\Import\ImportSourceRestApi;
use Icinga\Module\Director\Import\ImportSourceSql;
use Icinga\Module\Director\Job\ConfigJob;
use Icinga\Module\Director\Job\HousekeepingJob;
use Icinga\Module\Director\Job\ImportJob;
use Icinga\Module\Director\Job\SyncJob;
use Icinga\Module\Director\PropertyModifier\PropertyModifierArrayElementByPosition;
use Icinga\Module\Director\PropertyModifier\PropertyModifierArrayFilter;
use Icinga\Module\Director\PropertyModifier\PropertyModifierBitmask;
use Icinga\Module\Director\PropertyModifier\PropertyModifierCombine;
use Icinga\Module\Director\PropertyModifier\PropertyModifierDnsRecords;
use Icinga\Module\Director\PropertyModifier\PropertyModifierExtractFromDN;
use Icinga\Module\Director\PropertyModifier\PropertyModifierFromAdSid;
use Icinga\Module\Director\PropertyModifier\PropertyModifierFromLatin1;
use Icinga\Module\Director\PropertyModifier\PropertyModifierGetHostByName;
use Icinga\Module\Director\PropertyModifier\PropertyModifierJoin;
use Icinga\Module\Director\PropertyModifier\PropertyModifierJsonDecode;
use Icinga\Module\Director\PropertyModifier\PropertyModifierLConfCustomVar;
use Icinga\Module\Director\PropertyModifier\PropertyModifierLowercase;
use Icinga\Module\Director\PropertyModifier\PropertyModifierMakeBoolean;
use Icinga\Module\Director\PropertyModifier\PropertyModifierMap;
use Icinga\Module\Director\PropertyModifier\PropertyModifierParseURL;
use Icinga\Module\Director\PropertyModifier\PropertyModifierRegexReplace;
use Icinga\Module\Director\PropertyModifier\PropertyModifierRegexSplit;
use Icinga\Module\Director\PropertyModifier\PropertyModifierRejectOrSelect;
use Icinga\Module\Director\PropertyModifier\PropertyModifierReplace;
use Icinga\Module\Director\PropertyModifier\PropertyModifierSplit;
use Icinga\Module\Director\PropertyModifier\PropertyModifierStripDomain;
use Icinga\Module\Director\PropertyModifier\PropertyModifierSubstring;
use Icinga\Module\Director\PropertyModifier\PropertyModifierToInt;
use Icinga\Module\Director\PropertyModifier\PropertyModifierUppercase;
use Icinga\Module\Director\PropertyModifier\PropertyModifierUpperCaseFirst;
use Icinga\Module\Director\PropertyModifier\PropertyModifierURLEncode;
use Icinga\Module\Director\PropertyModifier\PropertyModifierXlsNumericIp;
use Icinga\Module\Director\ProvidedHook\CubeLinks;
/** @var Module $this */
$this->provideHook('monitoring/HostActions');
$this->provideHook('monitoring/ServiceActions');
$this->provideHook('cube/Actions', CubeLinks::class);
$directorHooks = [
'director/DataType' => [
DataTypeArray::class,
DataTypeBoolean::class,
DataTypeDatalist::class,
DataTypeNumber::class,
DataTypeDirectorObject::class,
DataTypeSqlQuery::class,
DataTypeString::class
],
'director/ImportSource' => [
ImportSourceSql::class,
ImportSourceLdap::class,
ImportSourceCoreApi::class,
ImportSourceRestApi::class
],
'director/Job' => [
ConfigJob::class,
HousekeepingJob::class,
ImportJob::class,
SyncJob::class,
],
'director/PropertyModifier' => [
PropertyModifierArrayElementByPosition::class,
PropertyModifierArrayFilter::class,
PropertyModifierBitmask::class,
PropertyModifierCombine::class,
PropertyModifierDnsRecords::class,
PropertyModifierExtractFromDN::class,
PropertyModifierFromAdSid::class,
PropertyModifierFromLatin1::class,
PropertyModifierGetHostByName::class,
PropertyModifierJoin::class,
PropertyModifierJsonDecode::class,
PropertyModifierLConfCustomVar::class,
PropertyModifierLowercase::class,
PropertyModifierMakeBoolean::class,
PropertyModifierMap::class,
PropertyModifierParseURL::class,
PropertyModifierRegexReplace::class,
PropertyModifierRegexSplit::class,
PropertyModifierRejectOrSelect::class,
PropertyModifierReplace::class,
PropertyModifierSplit::class,
PropertyModifierStripDomain::class,
PropertyModifierSubstring::class,
PropertyModifierToInt::class,
PropertyModifierUppercase::class,
PropertyModifierUpperCaseFirst::class,
PropertyModifierURLEncode::class,
PropertyModifierXlsNumericIp::class,
]
];
foreach ($directorHooks as $type => $classNames) {
foreach ($classNames as $className) {
$this->provideHook($type, $className);
}
}

View File

@ -7,7 +7,7 @@ use Icinga\Web\Url;
if (Icinga::app()->isCli()) {
throw new IcingaException(
"PHP version 5.4.x is required for Director >= 1.4.0, you're running %s."
"PHP version 5.6.x is required for Director >= 1.7.0, you're running %s."
. ' Please either upgrade PHP or downgrade Icinga Director',
PHP_VERSION
);

65
run.php
View File

@ -3,78 +3,25 @@
use Icinga\Application\Modules\Module;
use dipl\Loader\CompatLoader;
if (version_compare(PHP_VERSION, '5.4.0') < 0) {
if (version_compare(PHP_VERSION, '5.6.0') < 0) {
include __DIR__ . '/run-php5.3.php';
return;
}
$prefix = '\\Icinga\\Module\\Director\\';
/** @var Module $this */
$this->provideHook('monitoring/HostActions');
$this->provideHook('monitoring/ServiceActions');
$this->provideHook('director/ImportSource', $prefix . 'Import\\ImportSourceSql');
$this->provideHook('director/ImportSource', $prefix . 'Import\\ImportSourceLdap');
$this->provideHook('director/ImportSource', $prefix . 'Import\\ImportSourceCoreApi');
$this->provideHook('director/ImportSource', $prefix . 'Import\\ImportSourceRestApi');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeArray');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeBoolean');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeDatalist');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeNumber');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeDirectorObject');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeSqlQuery');
$this->provideHook('director/DataType', $prefix . 'DataType\\DataTypeString');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierLowercase');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierRegexReplace');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierRegexSplit');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierReplace');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierStripDomain');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierSubstring');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierUppercase');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierMap');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierSplit');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierJoin');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierGetHostByName');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierDnsRecords');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierExtractFromDN');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierFromAdSid');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierFromLatin1');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierBitmask');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierMakeBoolean');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierJsonDecode');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierToInt');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierLConfCustomVar');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierArrayFilter');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierCombine');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierXlsNumericIp');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierURLEncode');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierUpperCaseFirst');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierRejectOrSelect');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierArrayElementByPosition');
$this->provideHook('director/PropertyModifier', $prefix . 'PropertyModifier\\PropertyModifierParseURL');
$this->provideHook('director/Job', $prefix . 'Job\\HousekeepingJob');
$this->provideHook('director/Job', $prefix . 'Job\\ConfigJob');
$this->provideHook('director/Job', $prefix . 'Job\\ImportJob');
$this->provideHook('director/Job', $prefix . 'Job\\SyncJob');
$this->provideHook('cube/Actions', 'CubeLinks');
// TODO: this is going to be removed in v1.8.0
require_once __DIR__ . '/library/vendor/ipl/Loader/CompatLoader.php';
CompatLoader::delegateLoadingToIcingaWeb($this->app);
/** @var Module $this */
$modules = $this->app->getModuleManager();
foreach ($this->getDependencies() as $module => $required) {
if ($modules->hasEnabled($module)) {
$installed = $modules->getModule($module, false)->getVersion();
$installed = \ltrim($installed, 'v'); // v0.6.0 VS 0.6.0
$installed = ltrim($installed, 'v'); // v0.6.0 VS 0.6.0
if (preg_match('/^([<>=]+)\s*v?(\d+\.\d+\.\d+)$/', $required, $match)) {
$operator = $match[1];
$vRequired = $match[2];
if (\version_compare($installed, $vRequired, $operator)) {
if (version_compare($installed, $vRequired, $operator)) {
continue;
}
}
@ -83,3 +30,5 @@ foreach ($this->getDependencies() as $module => $required) {
include __DIR__ . '/run-missingdeps.php';
return;
}
include __DIR__ . '/register-hooks.php';