diff --git a/library/Director/Core/CoreApi.php b/library/Director/Core/CoreApi.php index 08568b906..b64e9cefd 100644 --- a/library/Director/Core/CoreApi.php +++ b/library/Director/Core/CoreApi.php @@ -5,11 +5,13 @@ use Exception; use Icinga\Exception\NotFoundError; use Icinga\Module\Director\Db; +use Icinga\Module\Director\Hook\DeploymentHook; use Icinga\Module\Director\IcingaConfig\IcingaConfig; use Icinga\Module\Director\Objects\IcingaObject; use Icinga\Module\Director\Objects\IcingaCommand; use Icinga\Module\Director\Objects\DirectorDeploymentLog; use Icinga\Module\Director\Objects\IcingaZone; +use Icinga\Web\Hook; use RuntimeException; class CoreApi implements DeploymentApiInterface @@ -816,6 +818,12 @@ public function dumpConfig(IcingaConfig $config, Db $db, $packageName = null) // 'module_name' => $moduleName, )); + /** @var DeploymentHook[] $hooks */ + $hooks = Hook::all('director/Deployment'); + foreach ($hooks as $hook) { + $hook->beforeDeploy($deployment); + } + $this->assertPackageExists($packageName); $response = $this->client()->post('config/stages/' . urlencode($packageName), [ @@ -826,20 +834,23 @@ public function dumpConfig(IcingaConfig $config, Db $db, $packageName = null) // $deployment->duration_ms = $duration; $deployment->set('duration_dump', $duration); + $succeeded = 'n'; if ($response->succeeded()) { if ($stage = $response->getResult('stage', ['package' => $packageName])) { // Status? $deployment->set('stage_name', key($stage)); - $deployment->set('dump_succeeded', 'y'); - } else { - $deployment->set('dump_succeeded', 'n'); + $succeeded = 'y'; } - } else { - $deployment->set('dump_succeeded', 'n'); } - + $deployment->set('dump_succeeded', $succeeded); $deployment->store($db); - return $deployment->set('dump_succeeded', 'y'); + if ($succeeded === 'y') { + foreach ($hooks as $hook) { + $hook->onSuccessfullDump($deployment); + } + } + + return $deployment; } protected function shortenStartupLog($log) diff --git a/library/Director/Hook/DeploymentHook.php b/library/Director/Hook/DeploymentHook.php new file mode 100644 index 000000000..aff29aeb9 --- /dev/null +++ b/library/Director/Hook/DeploymentHook.php @@ -0,0 +1,28 @@ +