diff options
Diffstat (limited to '')
-rw-r--r-- | application/clicommands/KickstartCommand.php | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/application/clicommands/KickstartCommand.php b/application/clicommands/KickstartCommand.php new file mode 100644 index 0000000..80aa183 --- /dev/null +++ b/application/clicommands/KickstartCommand.php @@ -0,0 +1,88 @@ +<?php + +namespace Icinga\Module\Director\Clicommands; + +use Icinga\Module\Director\Cli\Command; +use Icinga\Module\Director\KickstartHelper; + +/** + * Kickstart a Director installation + * + * Once you prepared your DB resource this command retrieves information about + * unapplied database migration and helps applying them. + */ +class KickstartCommand extends Command +{ + /** + * Check whether a kickstart run is required + * + * This is the case when there is a kickstart.ini in your Directors config + * directory and no ApiUser in your Director DB. + * + * This is mostly for automation, so one could create a Puppet manifest + * as follows: + * + * exec { 'Icinga Director Kickstart': + * path => '/usr/local/bin:/usr/bin:/bin', + * command => 'icingacli director kickstart run', + * onlyif => 'icingacli director kickstart required', + * require => Exec['Icinga Director DB migration'], + * } + * + * Exit code 0 means that a kickstart run is required, code 2 that it is + * not. + */ + public function requiredAction() + { + if ($this->kickstart()->isConfigured()) { + if ($this->kickstart()->isRequired()) { + if ($this->isVerbose) { + echo "Kickstart has been configured and should be triggered\n"; + } + + exit(0); + } else { + echo "Kickstart configured, execution is not required\n"; + exit(1); + } + } else { + echo "Kickstart has not been configured\n"; + exit(2); + } + } + + /** + * Trigger the kickstart helper + * + * This will connect to the endpoint configured in your kickstart.ini, + * store the given API user and import existing objects like zones, + * endpoints and commands. + * + * /etc/icingaweb2/modules/director/kickstart.ini could look as follows: + * + * [config] + * endpoint = "master-node.example.com" + * + * ; Host can be an IP address or a hostname. Equals to endpoint name + * ; if not set: + * host = "127.0.0.1" + * + * ; Port is 5665 if none given + * port = 5665 + * + * username = "director" + * password = "***" + * + */ + public function runAction() + { + $this->raiseLimits(); + $this->kickstart()->loadConfigFromFile()->run(); + exit(0); + } + + protected function kickstart() + { + return new KickstartHelper($this->db()); + } +} |