parent
bd5e33ab11
commit
f49276372a
|
@ -61,7 +61,7 @@ class ImportsourceCommand extends Command
|
|||
{
|
||||
$source = $this->getImportSource();
|
||||
$source->checkForChanges();
|
||||
$this->showImportStateDetailsAndExit($source);
|
||||
$this->showImportStateDetails($source);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -86,7 +86,7 @@ class ImportsourceCommand extends Command
|
|||
|
||||
if ($source->runImport()) {
|
||||
print "New data has been imported\n";
|
||||
$this->showImportStateDetailsAndExit($source);
|
||||
$this->showImportStateDetails($source);
|
||||
} else {
|
||||
print "Nothing has been changed, imported data is still up to date\n";
|
||||
}
|
||||
|
@ -104,14 +104,9 @@ class ImportsourceCommand extends Command
|
|||
* @param ImportSource $source
|
||||
* @throws \Icinga\Exception\IcingaException
|
||||
*/
|
||||
protected function showImportStateDetailsAndExit(ImportSource $source)
|
||||
protected function showImportStateDetails(ImportSource $source)
|
||||
{
|
||||
echo $this->getImportStateDescription($source) . "\n";
|
||||
if ($source->get('import_state') === 'failing') {
|
||||
exit(1);
|
||||
} else {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,130 @@
|
|||
<?php
|
||||
|
||||
namespace Icinga\Module\Director\Clicommands;
|
||||
|
||||
use Icinga\Module\Director\Cli\Command;
|
||||
use Icinga\Module\Director\Objects\SyncRule;
|
||||
|
||||
/**
|
||||
* Deal with Director Sync Rules
|
||||
*
|
||||
* Use this command to check or trigger your defined Sync Rules
|
||||
*/
|
||||
class SyncruleCommand extends Command
|
||||
{
|
||||
/**
|
||||
* List defined Sync Rules
|
||||
*
|
||||
* This shows a table with your defined Sync Rules, their IDs and
|
||||
* current state. As triggering a Sync requires an ID, this is where
|
||||
* you can look up the desired ID.
|
||||
*
|
||||
* USAGE
|
||||
*
|
||||
* icingacli director syncrule list
|
||||
*/
|
||||
public function listAction()
|
||||
{
|
||||
$rules = SyncRule::loadAll($this->db());
|
||||
if (empty($rules)) {
|
||||
echo "No Sync Rule has been defined\n";
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
printf("%4s | %s\n", 'ID', 'Sync Rule name');
|
||||
printf("-----+%s\n", str_repeat('-', 64));
|
||||
|
||||
foreach ($rules as $rule) {
|
||||
$state = $rule->get('sync_state');
|
||||
printf("%4d | %s\n", $rule->get('id'), $rule->get('rule_name'));
|
||||
printf(" | -> %s%s\n", $state, $state === 'failing' ? ': ' . $rule->get('last_error_message') : '');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check a given Sync Rule for changes
|
||||
*
|
||||
* This command runs a complete Sync in memory but doesn't persist eventual changes.
|
||||
*
|
||||
* USAGE
|
||||
*
|
||||
* icingacli director syncrule check --id <id>
|
||||
*
|
||||
* OPTIONS
|
||||
*
|
||||
* --id <id> A Sync Rule ID. Use the list command to figure out
|
||||
* --benchmark Show timing and memory usage details
|
||||
*/
|
||||
public function checkAction()
|
||||
{
|
||||
$rule = $this->getSyncRule();
|
||||
$rule->checkForChanges();
|
||||
$this->showSyncStateDetails($rule);
|
||||
}
|
||||
|
||||
/**
|
||||
* Trigger a Sync Run for a given Sync Rule
|
||||
*
|
||||
* This command builds new objects according your Sync Rule, compares them
|
||||
* with existing ones and persists eventual changes.
|
||||
*
|
||||
* USAGE
|
||||
*
|
||||
* icingacli director syncrule run --id <id>
|
||||
*
|
||||
* OPTIONS
|
||||
*
|
||||
* --id <id> A Sync Rule ID. Use the list command to figure out
|
||||
* --benchmark Show timing and memory usage details
|
||||
*/
|
||||
public function runAction()
|
||||
{
|
||||
$rule = $this->getSyncRule();
|
||||
|
||||
if ($rule->applyChanges()) {
|
||||
print "New data has been imported\n";
|
||||
$this->showSyncStateDetails($rule);
|
||||
} else {
|
||||
print "Nothing has been changed, imported data is still up to date\n";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return SyncRule
|
||||
*/
|
||||
protected function getSyncRule()
|
||||
{
|
||||
return SyncRule::load($this->params->getRequired('id'), $this->db());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SyncRule $rule
|
||||
* @throws \Icinga\Exception\IcingaException
|
||||
*/
|
||||
protected function showSyncStateDetails(SyncRule $rule)
|
||||
{
|
||||
echo $this->getSyncStateDescription($rule) . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SyncRule $rule
|
||||
* @return string
|
||||
* @throws \Icinga\Exception\IcingaException
|
||||
*/
|
||||
protected function getSyncStateDescription(SyncRule $rule)
|
||||
{
|
||||
switch ($rule->get('sync_state')) {
|
||||
case 'unknown':
|
||||
return "It's currently unknown whether we are in sync with this rule."
|
||||
. ' You should either check for changes or trigger a new Sync Run.';
|
||||
case 'in-sync':
|
||||
return 'This Sync Rule is in sync';
|
||||
case 'pending-changes':
|
||||
return 'There are pending changes for this Sync Rule. You should'
|
||||
. ' trigger a new Sync Run.';
|
||||
case 'failing':
|
||||
return 'This Sync Rule failed: '. $rule->get('last_error_message');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -461,13 +461,51 @@ fresh data. In case data didn't change, nothing is going to be stored.
|
|||
|
||||
`icingacli director importsource run --id <id>`
|
||||
|
||||
#### Options
|
||||
##### Options
|
||||
|
||||
| Option | Description |
|
||||
|---------------|---------------------------------------------------------|
|
||||
| `--id <id>` | An Import Source ID. Use the list command to figure out |
|
||||
| `--benchmark` | Show timing and memory usage details |
|
||||
|
||||
### Sync Rules
|
||||
|
||||
#### List defined Sync Rules
|
||||
|
||||
This shows a table with your defined Sync Rules, their IDs and current
|
||||
state. As triggering a Sync requires an ID, this is where you can look
|
||||
up the desired ID.
|
||||
|
||||
`icingacli director syncrule list`
|
||||
|
||||
#### Check a given Sync Rule for changes
|
||||
|
||||
This command runs a complete Sync in memory but doesn't persist eventual
|
||||
changes.
|
||||
|
||||
`icingacli director syncrule check --id <id>`
|
||||
|
||||
##### Options
|
||||
|
||||
| Option | Description |
|
||||
|---------------|----------------------------------------------------|
|
||||
| `--id <id>` | A Sync Rule ID. Use the list command to figure out |
|
||||
| `--benchmark` | Show timing and memory usage details |
|
||||
|
||||
#### Trigger a Sync Run for a given Sync Rule
|
||||
|
||||
This command builds new objects according your Sync Rule, compares them
|
||||
with existing ones and persists eventual changes.
|
||||
|
||||
`icingacli director syncrule run --id <id>`
|
||||
|
||||
##### Options
|
||||
|
||||
| Option | Description |
|
||||
|---------------|----------------------------------------------------|
|
||||
| `--id <id>` | A Sync Rule ID. Use the list command to figure out |
|
||||
| `--benchmark` | Show timing and memory usage details |
|
||||
|
||||
### Running Jobs
|
||||
The `jobs` command runs pending Import and Sync jobs. Please note that we have
|
||||
planned a scheduler configurable through the Icinga Director web interface, but
|
||||
|
|
|
@ -23,6 +23,7 @@ before switching to a new version.
|
|||
### CLI
|
||||
* FEATURE: Director Health Check Plugin (#1278)
|
||||
* FEATURE: Show and trigger Import Sources (#1474)
|
||||
* FEATURE: Show and trigger Sync Rules ( #1476)
|
||||
|
||||
### Import and Sync
|
||||
* FIX: Sync is very powerful and allows for actions not available in the GUI. It
|
||||
|
|
Loading…
Reference in New Issue