mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-27 15:44:11 +02:00
configconvert: lookup host check_command in template tree for hostcheck magic
requires recursive template tree lookup in order to create the new service linked as hostcheck directly on the host object. refs #2743
This commit is contained in:
parent
2dc7cd20c8
commit
6b649b8d4c
@ -635,6 +635,58 @@ sub obj_1x_get_service_attr {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# get service_description from object
|
||||||
|
sub obj_1x_get_host_attr {
|
||||||
|
my $objs_1x = shift;
|
||||||
|
my $obj_1x = shift;
|
||||||
|
my $host_name = shift;
|
||||||
|
my $search_attr = shift;
|
||||||
|
my $host_attr = "";
|
||||||
|
|
||||||
|
# if this object is invalid, bail early
|
||||||
|
return undef if !defined($obj_1x);
|
||||||
|
|
||||||
|
# first, check if we already got a service_description here in our struct (recursion safety)
|
||||||
|
return $obj_1x->{'__I2CONVERT_SEARCH_ATTR'} if defined($obj_1x->{'__I2CONVERT_SEARCH_ATTR'});
|
||||||
|
delete $obj_1x->{'__I2CONVERT_SEARCH_ATTR'};
|
||||||
|
|
||||||
|
# if this object got what we want, return (it can be recursion and a template!)
|
||||||
|
if(defined($obj_1x->{$search_attr})) {
|
||||||
|
$obj_1x->{'__I2CONVERT_SEARCH_ATTR'} = $obj_1x->{$search_attr};
|
||||||
|
return $obj_1x->{$search_attr};
|
||||||
|
#return $obj_1x->{'__I2CONVERT_SEARCH_ATTR'};
|
||||||
|
}
|
||||||
|
|
||||||
|
# we don't have the attribute, should we look into a template?
|
||||||
|
# make sure _not_ to use
|
||||||
|
if (defined($obj_1x->{'__I2CONVERT_USES_TEMPLATE'}) && $obj_1x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
||||||
|
# get the object referenced as template - this is an array of templates, loop (funny recursion here)
|
||||||
|
foreach my $obj_1x_template (@{$obj_1x->{'__I2CONVERT_TEMPLATE_NAMES'}}) {
|
||||||
|
|
||||||
|
# get the template object associated with by its unique 'name' attr
|
||||||
|
my $obj_1x_tmpl = obj_get_tmpl_obj_by_tmpl_name($objs_1x, 'host', $obj_1x_template);
|
||||||
|
|
||||||
|
# now recurse into ourselves and look for a possible service_description
|
||||||
|
$host_attr = obj_1x_get_host_attr($objs_1x,$obj_1x_tmpl,$host_name,$search_attr); # we must pass the host_name and search_attr
|
||||||
|
#say Dumper($service_attr);
|
||||||
|
# bail here if search did not unveil anything
|
||||||
|
next if(!defined($host_attr));
|
||||||
|
|
||||||
|
# get the service attr and return - first template wins
|
||||||
|
$obj_1x->{'__I2CONVERT_SEARCH_ATTR'} = $host_attr;
|
||||||
|
return $host_attr;
|
||||||
|
#return $obj_1x->{'__I2CONVERT_SEARCH_ATTR'};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# no template used, and not service description - broken object, ignore it
|
||||||
|
else {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
# we should never hit here
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
|
||||||
# get service_description from object
|
# get service_description from object
|
||||||
sub obj_1x_get_contact_attr {
|
sub obj_1x_get_contact_attr {
|
||||||
my $objs_1x = shift;
|
my $objs_1x = shift;
|
||||||
@ -2468,6 +2520,13 @@ sub convert_2x {
|
|||||||
#say Dumper(@$cfg_obj_2x{'host'}->{$host_obj_2x_key});
|
#say Dumper(@$cfg_obj_2x{'host'}->{$host_obj_2x_key});
|
||||||
my $obj_2x_host = @$cfg_obj_2x{'host'}->{$host_obj_2x_key};
|
my $obj_2x_host = @$cfg_obj_2x{'host'}->{$host_obj_2x_key};
|
||||||
|
|
||||||
|
# if there's no host check_command, we must look it up in the tree
|
||||||
|
if(!defined($obj_2x_host->{'check_command'})) {
|
||||||
|
@$cfg_obj_2x{'host'}->{$host_obj_2x_key}->{'check_command'} = obj_1x_get_host_attr($cfg_obj_1x, $obj_2x_host, $obj_2x_host->{'__I2CONVERT_HOSTNAME'}, 'check_command');
|
||||||
|
say Dumper("found check_command in ".$obj_2x_host->{'check_command'});
|
||||||
|
say Dumper(@$cfg_obj_2x{'host'}->{$host_obj_2x_key});
|
||||||
|
}
|
||||||
|
|
||||||
####################################################
|
####################################################
|
||||||
# Create Host->Service Relation for later dumping
|
# Create Host->Service Relation for later dumping
|
||||||
# we use the prep'ed 2x service hashref already
|
# we use the prep'ed 2x service hashref already
|
||||||
|
Loading…
x
Reference in New Issue
Block a user