LegacyDeploymentApi: Call activation tool to deploy a new stage

refs #13049
This commit is contained in:
Markus Frosch 2016-11-04 16:38:08 +01:00
parent 37f3d1a3e8
commit 660f41f94d
1 changed files with 39 additions and 2 deletions

View File

@ -17,11 +17,14 @@ class LegacyDeploymentApi implements DeploymentApiInterface
{
protected $db;
protected $deploymentPath;
protected $activationScript;
public function __construct(Db $db)
{
$this->db = $db;
$this->deploymentPath = $this->db->settings()->deployment_path_v1;
$settings = $this->db->settings();
$this->deploymentPath = $settings->deployment_path_v1;
$this->activationScript = $settings->activation_script_v1;
}
/**
@ -207,9 +210,13 @@ class LegacyDeploymentApi implements DeploymentApiInterface
try {
$succeeded = $this->deployStage($stage_name, $config->getFileContents());
# TODO: call deployment tool
if ($succeeded === true) {
$succeeded = $this->activateStage($stage_name);
}
} catch (Exception $e) {
$deployment->set('dump_succeeded', 'n');
$deployment->set('startup_log', $e->getMessage());
$deployment->set('startup_succeeded', 'n');
$deployment->store($db);
throw $e;
}
@ -271,6 +278,36 @@ class LegacyDeploymentApi implements DeploymentApiInterface
}
}
/**
* Starts activation of
*
* Note: script should probably fork to background?
*
* @param string $stage Stage to activate
*
* @return bool
*
* @throws IcingaException For an execution error
*/
protected function activateStage($stage)
{
if ($this->activationScript === null || trim($this->activationScript === null) === '') {
// skip activation, could be done by external cron worker
return true;
}
else {
$command = sprintf('%s %s 2>&1', escapeshellcmd($this->activationScript), escapeshellarg($stage));
$output = null;
$rc = null;
exec($command, $output, $rc);
$output = join("\n", $output);
if ($rc !== 0) {
throw new IcingaException("Activation script did exit with return code %d:\n\n%s", $rc, $output);
}
return true;
}
}
/**
* Recursively dump directory contents, with relative path
*