Skip to content

Commit

Permalink
cli cfg: Make sure to pass config definitions to conversion hooks (WIP)
Browse files Browse the repository at this point in the history
refs #5929
  • Loading branch information
Michael Friedrich committed May 23, 2014
1 parent 97122cb commit afc494b
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 47 deletions.
18 changes: 9 additions & 9 deletions modules/conftool/application/clicommands/ParseCommand.php
Expand Up @@ -15,40 +15,40 @@ public function v1Action()

//objects
foreach ($config->getDefinitions('command') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();
}
foreach ($config->getDefinitions('host') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();

//direct host->service relation
foreach($object->getServices() as $service) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($service)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($service, $config)->dump();
}
}
foreach ($config->getDefinitions('service') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();
}
foreach ($config->getDefinitions('contact') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();
}
foreach ($config->getDefinitions('hostgroup') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();

//indirect hostgroup->service relation
foreach($object->getServices() as $service) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($service)->dump();
}
}
foreach ($config->getDefinitions('servicegroup') as $object) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();
}
foreach ($config->getDefinitions('contactgroup') as $object) { // TODO: Find a better way than hardcoded
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($object, $config)->dump();
}

//templates
foreach($config->getTemplates() as $template) {
Icinga2ObjectDefinition::fromIcingaObjectDefinition($template)->dump();
Icinga2ObjectDefinition::fromIcingaObjectDefinition($template, $config)->dump();
}
}
}
21 changes: 21 additions & 0 deletions modules/conftool/library/Conftool/Icinga/IcingaConfig.php
Expand Up @@ -454,6 +454,27 @@ public function getHost($search)
return false;
}

public function hasObject($search)
{
if (! is_array($search)) $search = array($search);
foreach ($search as $s) {
if (array_key_exists(strtolower($s), $this->definitions)) {
return true;
}
}
return false;
}

public function getObject($search, $type)
{
if (! is_array($search)) $search = array($search);
foreach ($search as $s) {
if (! $this->hasHost($s)) continue;
return $this->definitions[$type][strtolower($s)];
}
return false;
}

protected function discoverDefinitionFiles($dir)
{
$files = array();
Expand Down
19 changes: 6 additions & 13 deletions modules/conftool/library/Conftool/Icinga2/Icinga2Host.php
Expand Up @@ -62,42 +62,35 @@ class Icinga2Host extends Icinga2ObjectDefinition
'notification_interval',
'first_notification_delay',
'notification_period',
'notification_options',
'contacts',
'contact_groups'
'notification_options'
);

// TODO: Figure out how to handle
// - notification_interval, first_notification_delay, notification_period, notification_options
// in a new notification object

protected function convertAddress($string) {
protected function convertAddress($string, IcingaConfig $config = null) {
$this->address = $this->migrateLegacyString($string);
}

protected function convertAddress6($string) {
protected function convertAddress6($string, IcingaConfig $config = null) {
$this->address6 = $this->migrateLegacyString($string);
}

// TODO
protected function convertCheck_interval($check_interval)
{

}

protected function convertParents($parents)
protected function convertParents($parents, IcingaConfig $config = null)
{
foreach ($this->splitComma($parents) as $parent) {
// TODO: create a new host dependency
}
}

protected function convertContacts($contacts)
protected function convertContacts($contacts, IcingaConfig $config)
{
// TODO: create notification objects and commands
}

protected function convertContactgroups($contactgroups)
protected function convertContact_groups($contactgroups, IcingaConfig $config)
{
// TODO: create notification objects and commands
}
Expand Down
Expand Up @@ -18,7 +18,7 @@ class Icinga2Hostgroup extends Icinga2ObjectDefinition
'hostgroup_members' => 'groups',
);

protected function convertMembers($members)
protected function convertMembers($members, IcingaConfig $config = null)
{
foreach ($this->splitComma($members) as $member) {
if (substr($member, 0, 1) === '!') {
Expand Down
Expand Up @@ -2,6 +2,7 @@

namespace Icinga\Module\Conftool\Icinga2;

use Icinga\Module\Conftool\Icinga\IcingaConfig;
use Icinga\Module\Conftool\Icinga\IcingaObjectDefinition;

class Icinga2ObjectDefinition
Expand Down Expand Up @@ -49,7 +50,7 @@ protected function imports($import)
$this->imports[] = $import;
}

protected function setAttributesFromIcingaObjectDefinition(IcingaObjectDefinition $object)
protected function setAttributesFromIcingaObjectDefinition(IcingaObjectDefinition $object, IcingaConfig $config)
{
foreach ($object->getAttributes() as $key => $value) {

Expand Down Expand Up @@ -79,7 +80,7 @@ protected function setAttributesFromIcingaObjectDefinition(IcingaObjectDefinitio
//conversion of different attributes
$func = 'convert' . ucfirst($key);
if (method_exists($this, $func)) {
$this->$func($value);
$this->$func($value, $config);
continue;
}

Expand All @@ -100,12 +101,12 @@ protected function setAttributesFromIcingaObjectDefinition(IcingaObjectDefinitio
}

//generic conversion functions
protected function convertCheck_interval($value)
protected function convertCheck_interval($value, IcingaConfig $config = null)
{
$this->check_interval = $value.'m';
}

protected function convertRetry_interval($value)
protected function convertRetry_interval($value, IcingaConfig $config = null)
{
$this->retry_interval = $value.'m';
}
Expand Down Expand Up @@ -137,51 +138,48 @@ protected function migrateValue($value, $key = null)
}

if (preg_match('/^\d+/', $value)) {
if (preg_match('/check_interval/', $key)) { //different handling for *_interval
return $value."m";
}
return $value;
}
return $this->migrateLegacyString($value);
}

public static function fromIcingaObjectDefinition(IcingaObjectDefinition $object)
public static function fromIcingaObjectDefinition(IcingaObjectDefinition $object, IcingaConfig $config)
{
switch ($object->getDefinitionType()) {
case 'command':
$new = new Icinga2Command((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'host':
$new = new Icinga2Host((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'service':
//print "Found service ".$object;
$new = new Icinga2Service((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'contact':
$new = new Icinga2User((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'hostgroup':
$new = new Icinga2Hostgroup((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'servicegroup':
$new = new Icinga2Servicegroup((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

case 'contactgroup': // TODO: find a better rename way
$new = new Icinga2Usergroup((string) $object);
$new->setAttributesFromIcingaObjectDefinition($object);
$new->setAttributesFromIcingaObjectDefinition($object, $config);
break;

default:
Expand Down
28 changes: 21 additions & 7 deletions modules/conftool/library/Conftool/Icinga2/Icinga2Service.php
Expand Up @@ -59,27 +59,41 @@ class Icinga2Service extends Icinga2ObjectDefinition
'notification_interval',
'first_notification_delay',
'notification_period',
'notification_options',
'contacts',
'contact_groups'
'notification_options'
);

// TODO: Figure out how to handle
// - notification_interval, first_notification_delay, notification_period, notification_options
// in a new notification object

// TODO
protected function convertContacts($contacts)
protected function convertContacts($contacts, IcingaConfig $config)
{
if ($config === null) {
throw new Icinga2ConfigMigrationException("Cannot convert contacts. No configuration hive provided.");
}

// TODO: create notification objects and commands
$arr = $this->splitComma($contacts);

foreach ($arr as $contact) {
$object = $config->GetObject($contact, 'contact');

print "Converting contact " . $contact . " " . var_dump($object);
}
}

protected function convertContactgroups($contactgroups)
protected function convertContact_groups($contactgroups, IcingaConfig $config = null)
{
// TODO: create notification objects and commands
$arr = $this->splitComma($contactgroups);

//get all group members (make them unique contacts)

//same story as for a single contact
}

protected function convertHost_name($name)
protected function convertHost_name($name, IcingaConfig $config = null)
{
$arr = $this->splitComma($name);
$this->is_apply = true;
Expand All @@ -94,7 +108,7 @@ protected function convertHost_name($name)
}
}

protected function convertHostgroup_name($name)
protected function convertHostgroup_name($name, IcingaConfig $config = null)
{
$arr = $this->splitComma($name);
$this->is_apply = true;
Expand Down
Expand Up @@ -18,7 +18,7 @@ class Icinga2Servicegroup extends Icinga2ObjectDefinition
'servicegroup_members' => 'groups',
);

protected function convertMembers($members)
protected function convertMembers($members, IcingaConfig $config = null)
{
$count = 0;
$sg_members = $this->splitComma($members);
Expand Down
Expand Up @@ -15,7 +15,7 @@ class Icinga2Usergroup extends Icinga2ObjectDefinition
'contactgroup_members' => 'groups',
);

protected function convertMembers($members)
protected function convertMembers($members, IcingaConfig $config = null)
{
foreach ($this->splitComma($members) as $member) {
if (substr($member, 0, 1) === '!') {
Expand Down

0 comments on commit afc494b

Please sign in to comment.