From 7eb7f1324cee39c2df7864c3a5c3dde9fcd11b88 Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Fri, 1 Apr 2016 17:14:59 +0200 Subject: [PATCH] cli: add config deploy command --- application/clicommands/ConfigCommand.php | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/application/clicommands/ConfigCommand.php b/application/clicommands/ConfigCommand.php index bcfe7180..b460bfef 100644 --- a/application/clicommands/ConfigCommand.php +++ b/application/clicommands/ConfigCommand.php @@ -7,8 +7,14 @@ use Icinga\Module\Director\Cli\Command; use Icinga\Module\Director\IcingaConfig\IcingaConfig; use Icinga\Module\Director\Data\Db\DbObject; +/** + * Generate, show and deploy Icinga 2 configuration + */ class ConfigCommand extends Command { + /** + * Re-render the current configuration + */ public function renderAction() { $config = new IcingaConfig($this->db()); @@ -31,6 +37,41 @@ class ConfigCommand extends Command } } + public function deployAction() + { + $api = $this->api(); + $db = $this->db(); + + $checksum = $this->params->get('checksum'); + if ($checksum) { + $config = IcingaConfig::load(Util::hex2binary($checksum), $db); + } else { + $config = IcingaConfig::generate($db); + $checksum = $config->getHexChecksum(); + } + + $api->wipeInactiveStages($db); + $current = $api->getActiveChecksum($db); + if ($current === $checksum) { + if ($this->params->get('force')) { + echo "Config matches active stage, deploying anyway\n"; + } else { + echo "Config matches active stage, nothing to do\n"; + + return; + } + + } else { + if ($api->dumpConfig($config, $db)) { + printf("Config '%s' has been deployed\n", $checksum); + } else { + $this->fail( + sprintf("Failed to deploy config '%s'\n", $checksum) + ); + } + } + } + public function filesAction() { }