mirror of https://github.com/Icinga/icinga2.git
1129 lines
47 KiB
Perl
1129 lines
47 KiB
Perl
|
|
=pod
|
|
/******************************************************************************
|
|
* Icinga 2 *
|
|
* Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public License *
|
|
* as published by the Free Software Foundation; either version 2 *
|
|
* of the License, or (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program; if not, write to the Free Software Foundation *
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
|
|
******************************************************************************/
|
|
=cut
|
|
|
|
|
|
package Icinga2::ExportIcinga2Cfg;
|
|
|
|
use strict;
|
|
|
|
use Data::Dumper;
|
|
use File::Find;
|
|
use Storable qw(dclone);
|
|
use POSIX qw/strftime/;
|
|
|
|
use feature 'say';
|
|
|
|
#use Icinga2;
|
|
use Icinga2::Utils;
|
|
|
|
#our $dbg_lvl = 1;
|
|
|
|
# XXX figure a better way for \t count printing, making dumps more modular
|
|
# XXX sort macros and linked hostservices by name
|
|
|
|
################################################################################
|
|
# Helpers
|
|
################################################################################
|
|
|
|
sub open_cfg_file {
|
|
my $file = shift;
|
|
my $FH;
|
|
|
|
say "writing file '$file'...\n";
|
|
open($FH, ">".$file);
|
|
|
|
if (!-w $FH) {
|
|
print "ERROR: cannot write file '$file'. Check permissions!\n";
|
|
}
|
|
|
|
return $FH;
|
|
}
|
|
|
|
sub close_cfg_file {
|
|
my $FH = shift;
|
|
|
|
close($FH);
|
|
}
|
|
|
|
sub add_header {
|
|
my $icinga2_cfg = shift;
|
|
|
|
dump_config_line($icinga2_cfg, "/******************************************************************************");
|
|
dump_config_line($icinga2_cfg, " * GENERATED BY ICINGA2 CONVERSION SCRIPT");
|
|
dump_config_line($icinga2_cfg, " * " . strftime('%Y-%m-%d %H:%M:%S',localtime));
|
|
dump_config_line($icinga2_cfg, " ******************************************************************************/");
|
|
}
|
|
|
|
sub dump_config_line {
|
|
my $icinga2_cfg = shift;
|
|
my $line = shift;
|
|
my $dbg_lvl = $icinga2_cfg->{'__I2EXPORT_DEBUG'};
|
|
|
|
if ($dbg_lvl) {
|
|
print $line. "\n";
|
|
}
|
|
|
|
print { $icinga2_cfg->{'__I2EXPORT_FH'} } "$line\n";
|
|
}
|
|
|
|
sub start_object_type_config_dump {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_type = shift;
|
|
|
|
$icinga2_cfg->{'__I2EXPORT_FH'} = open_cfg_file($icinga2_cfg->{$cfg_type});
|
|
add_header($icinga2_cfg);
|
|
}
|
|
|
|
sub end_object_type_config_dump {
|
|
my $icinga2_cfg = shift;
|
|
|
|
close_cfg_file($icinga2_cfg->{'__I2EXPORT_FH'});
|
|
}
|
|
|
|
################################################################################
|
|
# DUMP ALL OBJECTS 2.x
|
|
################################################################################
|
|
|
|
sub dump_cfg_resource_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $icinga2_global_macros = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'resource');
|
|
|
|
dump_config_line($icinga2_cfg, "set IcingaMacros = {");
|
|
foreach my $global_macro_2x_key (sort keys %{$icinga2_global_macros}) {
|
|
dump_config_line($icinga2_cfg, "\t\"$global_macro_2x_key\" = \"$icinga2_global_macros->{$global_macro_2x_key}\",");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "}");
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
sub dump_cfg_obj_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
dump_hosts_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_services_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_users_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_notifications_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_timeperiods_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_groups_2x($icinga2_cfg, $cfg_obj_2x);
|
|
dump_commands_2x($icinga2_cfg, $cfg_obj_2x);
|
|
|
|
}
|
|
sub dump_hosts_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'hosts');
|
|
#say Dumper($icinga2_cfg);
|
|
|
|
foreach my $host_2x_key (keys %{@$cfg_obj_2x{'host'}}) {
|
|
my $host_2x = @$cfg_obj_2x{'host'}->{$host_2x_key};
|
|
#say Dumper($host_2x);
|
|
#say "==============\n";
|
|
# function decides itsself if object or template
|
|
Icinga2::ExportIcinga2Cfg::dump_host_2x($icinga2_cfg, $host_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
sub dump_services_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'services');
|
|
|
|
foreach my $service_2x_key (keys %{@$cfg_obj_2x{'service'}}) {
|
|
my $service_2x = @$cfg_obj_2x{'service'}->{$service_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_service_2x($icinga2_cfg, $service_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
sub dump_users_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'users');
|
|
|
|
foreach my $user_2x_key (keys %{@$cfg_obj_2x{'user'}}) {
|
|
my $user_2x = @$cfg_obj_2x{'user'}->{$user_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_user_2x($icinga2_cfg, $user_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
sub dump_notifications_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'notifications');
|
|
|
|
foreach my $notification_2x_key (keys %{@$cfg_obj_2x{'notification'}}) {
|
|
my $notification_2x = @$cfg_obj_2x{'notification'}->{$notification_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_notification_2x($icinga2_cfg, $notification_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
|
|
sub dump_timeperiods_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'timeperiods');
|
|
|
|
foreach my $timeperiod_2x_key (keys %{@$cfg_obj_2x{'timeperiod'}}) {
|
|
my $timeperiod_2x = @$cfg_obj_2x{'timeperiod'}->{$timeperiod_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_timeperiod_2x($icinga2_cfg, $timeperiod_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
# XXX maybe split later
|
|
sub dump_groups_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'groups');
|
|
|
|
if (!@$cfg_obj_2x{'hostgroup'}) {
|
|
goto SKIP_HOSTGROUPS;
|
|
}
|
|
|
|
foreach my $hostgroup_2x_key (keys %{@$cfg_obj_2x{'hostgroup'}}) {
|
|
my $hostgroup_2x = @$cfg_obj_2x{'hostgroup'}->{$hostgroup_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_group_2x($icinga2_cfg, $hostgroup_2x);
|
|
}
|
|
|
|
SKIP_HOSTGROUPS:
|
|
|
|
if (!@$cfg_obj_2x{'servicegroup'}) {
|
|
goto SKIP_SERVICEGROUPS;
|
|
}
|
|
|
|
foreach my $servicegroup_2x_key (keys %{@$cfg_obj_2x{'servicegroup'}}) {
|
|
my $servicegroup_2x = @$cfg_obj_2x{'servicegroup'}->{$servicegroup_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_group_2x($icinga2_cfg, $servicegroup_2x);
|
|
}
|
|
|
|
SKIP_SERVICEGROUPS:
|
|
|
|
if (!@$cfg_obj_2x{'usergroup'}) {
|
|
goto SKIP_USERGROUPS;
|
|
}
|
|
|
|
foreach my $usergroup_2x_key (keys %{@$cfg_obj_2x{'usergroup'}}) {
|
|
my $usergroup_2x = @$cfg_obj_2x{'usergroup'}->{$usergroup_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_group_2x($icinga2_cfg, $usergroup_2x);
|
|
}
|
|
|
|
SKIP_USERGROUPS:
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
sub dump_commands_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $cfg_obj_2x = shift;
|
|
|
|
start_object_type_config_dump($icinga2_cfg, 'commands');
|
|
|
|
foreach my $command_2x_key (keys %{@$cfg_obj_2x{'command'}}) {
|
|
my $command_2x = @$cfg_obj_2x{'command'}->{$command_2x_key};
|
|
|
|
Icinga2::ExportIcinga2Cfg::dump_command_2x($icinga2_cfg, $command_2x);
|
|
}
|
|
|
|
end_object_type_config_dump($icinga2_cfg);
|
|
}
|
|
|
|
################################################################################
|
|
# DUMP OBJECT 2.x
|
|
################################################################################
|
|
|
|
|
|
sub dump_service_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $service_2x = shift;
|
|
my $object_type = "object"; # object or template
|
|
my $service_description = $service_2x->{__I2CONVERT_SERVICEDESCRIPTION};
|
|
|
|
# only dump templates, the objects will be directly created in host objects
|
|
if ($service_2x->{__I2CONVERT_IS_TEMPLATE} == 0) {
|
|
return;
|
|
}
|
|
#say Dumper($host_2x);
|
|
if ($service_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$service_description = $service_2x->{'__I2CONVERT_TEMPLATE_NAME'};
|
|
}
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($service_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $service_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $service_2x_templates = join '", "', @{$service_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type Service \"$service_description\" inherits \"$service_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type Service \"$service_description\" {");
|
|
}
|
|
|
|
####################################################
|
|
# display_name
|
|
####################################################
|
|
if(defined($service_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$service_2x->{'display_name'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# macros
|
|
####################################################
|
|
|
|
if(defined($service_2x->{'__I2CONVERT_MACROS'}) && $service_2x->{'__I2CONVERT_MACROS'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tmacros = {");
|
|
foreach my $macro_key (keys %{$service_2x->{'__I2CONVERT_MACROS'}}) {
|
|
next if $macro_key =~ /USER/;
|
|
dump_config_line($icinga2_cfg, "\t\t$macro_key = \"$service_2x->{'__I2CONVERT_MACROS'}->{$macro_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
####################################################
|
|
# check command
|
|
####################################################
|
|
if(defined($service_2x->{'__I2_CONVERT_CHECKCOMMAND_NAME'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_command = \"$service_2x->{'__I2_CONVERT_CHECKCOMMAND_NAME'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# event command
|
|
####################################################
|
|
if(defined($service_2x->{'__I2_CONVERT_EVENTCOMMAND_NAME'})) {
|
|
dump_config_line($icinga2_cfg, "\tevent_command = \"$service_2x->{'__I2_CONVERT_EVENTCOMMAND_NAME'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# servicegroups
|
|
####################################################
|
|
if(defined($service_2x->{'servicegroups'}) && scalar(@{$service_2x->{'servicegroups'}}) > 0) {
|
|
#say Dumper($service_2x->{'servicegroups'});
|
|
my $servicegroups = join '", "', @{$service_2x->{'servicegroups'}};
|
|
if ($service_2x->{'__I2_CONVERT_SG_ADD'} == 1) {
|
|
dump_config_line($icinga2_cfg, "\tservicegroups += [ \"$servicegroups\" ],");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "\tservicegroups = [ \"$servicegroups\" ],");
|
|
}
|
|
#say Dumper($service_description);
|
|
#say Dumper($service_2x->{'servicegroups'});
|
|
}
|
|
|
|
####################################################
|
|
# servicedependencies (1.x deps)
|
|
####################################################
|
|
if(defined($service_2x->{'__I2CONVERT_PARENT_SERVICES'})) {
|
|
dump_config_line($icinga2_cfg, "\tservicedependencies = [");
|
|
|
|
#say Dumper($service_2x);
|
|
# this is a hash with keys
|
|
foreach my $servicedep_key (keys %{$service_2x->{'__I2CONVERT_PARENT_SERVICES'}}) {
|
|
my $servicedep = $service_2x->{'__I2CONVERT_PARENT_SERVICES'}->{$servicedep_key};
|
|
dump_config_line($icinga2_cfg, "\t\t{ host = \"$servicedep->{'host'}\", service = \"$servicedep->{'service'}\" },");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t],");
|
|
}
|
|
|
|
####################################################
|
|
# notifications
|
|
####################################################
|
|
if(defined($service_2x->{'__I2CONVERT_NOTIFICATIONS'})) {
|
|
#say Dumper ($service_2x->{'__I2CONVERT_NOTIFICATIONS'});
|
|
# this is an array of notification objects
|
|
foreach my $service_notification_hash (@{$service_2x->{'__I2CONVERT_NOTIFICATIONS'}}) {
|
|
|
|
#say Dumper($service_notification_hash);
|
|
|
|
# this is a hash by unique key of the notification template, but all further attributes are seperatedly available too
|
|
foreach my $service_notification_key (keys %{$service_notification_hash}) {
|
|
my $service_notification = $service_notification_hash->{$service_notification_key};
|
|
#say Dumper($service_notification);
|
|
|
|
# skip everything not related to service notifications
|
|
next if ($service_notification->{'type'} ne 'service');
|
|
|
|
dump_config_line($icinga2_cfg, "\tnotifications[\"$service_notification->{'name'}\"] = {");
|
|
|
|
if (defined ($service_notification->{'templates'}) && @{$service_notification->{'templates'}} > 0) {
|
|
my $service_notification_templates = join '", "', @{$service_notification->{'templates'}};
|
|
dump_config_line($icinga2_cfg, "\t\ttemplates = [ \"$service_notification_templates\" ],");
|
|
}
|
|
|
|
if(defined($service_notification->{'users'}) && @{$service_notification->{'users'}} > 0) {
|
|
my $service_users = join '", "', @{$service_notification->{'users'}};
|
|
dump_config_line($icinga2_cfg, "\t\tusers = [ \"$service_users\" ],");
|
|
}
|
|
|
|
# this is set for escalations
|
|
if(defined($service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}) && $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\t\ttimes = {");
|
|
dump_config_line($icinga2_cfg, "\t\t\tbegin = $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'begin'},");
|
|
dump_config_line($icinga2_cfg, "\t\t\tend = $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'end'}");
|
|
dump_config_line($icinga2_cfg, "\t\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
}
|
|
}
|
|
|
|
if(defined($service_2x->{'notification_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tnotification_period = \"$service_2x->{'notification_period'}\",");
|
|
}
|
|
if(defined($service_2x->{'notification_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tnotification_interval = $service_2x->{'notification_interval'},");
|
|
}
|
|
if(defined($service_2x->{'notifications_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_notifications = $service_2x->{'notifications_enabled'},");
|
|
}
|
|
|
|
if(defined($service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'})) {
|
|
#say Dumper($service_2x);
|
|
foreach my $by (keys %{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}}) {
|
|
next if !@{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}};
|
|
my $notification_filter;
|
|
if (grep /0/, @{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) {
|
|
$notification_filter = 0;
|
|
} else {
|
|
$notification_filter = "(". (join ' | ', @{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) .")";
|
|
}
|
|
dump_config_line($icinga2_cfg, "\tnotification_".$by."_filter = $notification_filter,");
|
|
}
|
|
}
|
|
|
|
####################################################
|
|
# other service attributes, if set
|
|
####################################################
|
|
if(defined($service_2x->{'check_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_interval = $service_2x->{'check_interval'},");
|
|
}
|
|
if(defined($service_2x->{'retry_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tretry_interval = $service_2x->{'retry_interval'},");
|
|
}
|
|
if(defined($service_2x->{'max_check_attempts'})) {
|
|
dump_config_line($icinga2_cfg, "\tmax_check_attempts = $service_2x->{'max_check_attempts'},");
|
|
}
|
|
|
|
if(defined($service_2x->{'check_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_period = \"$service_2x->{'check_period'}\",");
|
|
}
|
|
|
|
if(defined($service_2x->{'volatile'})) {
|
|
dump_config_line($icinga2_cfg, "\tvolatile = $service_2x->{'volatile'},");
|
|
}
|
|
|
|
if(defined($service_2x->{'active_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_active_checks = $service_2x->{'active_checks_enabled'},");
|
|
}
|
|
if(defined($service_2x->{'passive_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_passive_checks = $service_2x->{'passive_checks_enabled'},");
|
|
}
|
|
if(defined($service_2x->{'flap_detection_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_flapping = $service_2x->{'flap_detection_enabled'},");
|
|
}
|
|
|
|
####################################################
|
|
# custom attr
|
|
####################################################
|
|
if(defined($service_2x->{'__I2CONVERT_CUSTOM_ATTR'}) && $service_2x->{'__I2CONVERT_CUSTOM_ATTR'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tcustom = {");
|
|
foreach my $custom_key (keys %{$service_2x->{'__I2CONVERT_CUSTOM_ATTR'}}) {
|
|
dump_config_line($icinga2_cfg, "\t\t$custom_key = \"$service_2x->{'__I2CONVERT_CUSTOM_ATTR'}->{$custom_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
sub dump_host_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $host_2x = shift;
|
|
my $object_type = "object"; # object or template
|
|
my $host_name = $host_2x->{'host_name'}; # default, may be changed for templates
|
|
|
|
#say Dumper($host_2x);
|
|
if ($host_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$host_name = $host_2x->{'__I2CONVERT_TEMPLATE_NAME'};
|
|
}
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($host_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $host_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $host_2x_templates = join '", "', @{$host_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type Host \"$host_name\" inherits \"$host_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type Host \"$host_name\" {");
|
|
}
|
|
|
|
####################################################
|
|
# display_name
|
|
####################################################
|
|
if(defined($host_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$host_2x->{'display_name'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# macros
|
|
####################################################
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
if(defined($host_2x->{'__I2CONVERT_MACROS'}) && $host_2x->{'__I2CONVERT_MACROS'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tmacros = {");
|
|
foreach my $macro_key (keys %{$host_2x->{'__I2CONVERT_MACROS'}}) {
|
|
next if $macro_key =~ /USER/;
|
|
dump_config_line($icinga2_cfg, "\t\t$macro_key = \"$host_2x->{'__I2CONVERT_MACROS'}->{$macro_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
####################################################
|
|
# hostgroups
|
|
####################################################
|
|
if(defined($host_2x->{'hostgroups'})) {
|
|
my $hostgroups = join '", "', @{$host_2x->{'hostgroups'}};
|
|
if ($host_2x->{'__I2_CONVERT_HG_ADD'} == 1) {
|
|
dump_config_line($icinga2_cfg, "\thostgroups += [ \"$hostgroups\" ],");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "\thostgroups = [ \"$hostgroups\" ],");
|
|
}
|
|
}
|
|
|
|
####################################################
|
|
# hostdependencies (1.x deps and parents combined)
|
|
####################################################
|
|
if(defined($host_2x->{'__I2CONVERT_PARENT_HOSTNAMES'})) {
|
|
my $hostdependency_hosts = join '", "', @{$host_2x->{'__I2CONVERT_PARENT_HOSTNAMES'}};
|
|
dump_config_line($icinga2_cfg, "\thostdependencies = [ \"$hostdependency_hosts\" ],");
|
|
}
|
|
|
|
####################################################
|
|
# notifications
|
|
####################################################
|
|
if(defined($host_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'})) {
|
|
foreach my $by (keys %{$host_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}}) {
|
|
next if !@{$host_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}};
|
|
my $notification_filter;
|
|
if (grep /0/, @{$host_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) {
|
|
$notification_filter = 0;
|
|
} else {
|
|
$notification_filter = "(". (join ' | ', @{$host_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) .")";
|
|
}
|
|
dump_config_line($icinga2_cfg, "\tnotification_".$by."_filter = $notification_filter,");
|
|
}
|
|
}
|
|
|
|
if(defined($host_2x->{'notification_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tnotification_period = \"$host_2x->{'notification_period'}\",");
|
|
}
|
|
if(defined($host_2x->{'notification_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tnotification_interval = $host_2x->{'notification_interval'},");
|
|
}
|
|
if(defined($host_2x->{'notifications_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_notifications = $host_2x->{'notifications_enabled'},");
|
|
}
|
|
|
|
####################################################
|
|
# other host attributes, if set
|
|
####################################################
|
|
if(defined($host_2x->{'check_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_interval = $host_2x->{'check_interval'},");
|
|
}
|
|
if(defined($host_2x->{'retry_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\tretry_interval = $host_2x->{'retry_interval'},");
|
|
}
|
|
if(defined($host_2x->{'max_check_attempts'})) {
|
|
dump_config_line($icinga2_cfg, "\tmax_check_attempts = $host_2x->{'max_check_attempts'},");
|
|
}
|
|
if(defined($host_2x->{'check_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_period = \"$host_2x->{'check_period'}\",");
|
|
}
|
|
|
|
if(defined($host_2x->{'active_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_active_checks = $host_2x->{'active_checks_enabled'},");
|
|
}
|
|
if(defined($host_2x->{'passive_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_passive_checks = $host_2x->{'passive_checks_enabled'},");
|
|
}
|
|
if(defined($host_2x->{'flap_detection_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_flapping = $host_2x->{'flap_detection_enabled'},");
|
|
}
|
|
|
|
####################################################
|
|
# custom attr
|
|
####################################################
|
|
|
|
if(defined($host_2x->{'__I2CONVERT_CUSTOM_ATTR'}) && $host_2x->{'__I2CONVERT_CUSTOM_ATTR'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tcustom = {");
|
|
foreach my $custom_key (keys %{$host_2x->{'__I2CONVERT_CUSTOM_ATTR'}}) {
|
|
dump_config_line($icinga2_cfg, "\t\t$custom_key = \"$host_2x->{'__I2CONVERT_CUSTOM_ATTR'}->{$custom_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
####################################################
|
|
# hostcheck
|
|
####################################################
|
|
# this is magic, and must be set during conversion
|
|
if(defined($host_2x->{'__I2CONVERT_HOSTCHECK'})) {
|
|
dump_config_line($icinga2_cfg, "\thostcheck = \"$host_2x->{'__I2CONVERT_HOSTCHECK'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# host with no services - valid configuration
|
|
####################################################
|
|
if (!defined($host_2x->{'SERVICE'})) {
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
return;
|
|
}
|
|
|
|
#say Dumper($host_2x->{'SERVICE'});
|
|
|
|
####################################################
|
|
# now all services with templates
|
|
####################################################
|
|
foreach my $service_2x_key (keys %{$host_2x->{'SERVICE'}}) {
|
|
my $service_2x = $host_2x->{'SERVICE'}->{$service_2x_key};
|
|
|
|
dump_config_line($icinga2_cfg, "\tservices[\"$service_2x->{__I2CONVERT_SERVICEDESCRIPTION}\"] = {");
|
|
|
|
####################################################
|
|
# templates
|
|
####################################################
|
|
if (defined($service_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $service_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $service_2x_templates = join '", "', @{$service_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "\t\ttemplates = [ \"$service_2x_templates\" ],")
|
|
}
|
|
####################################################
|
|
# display_name
|
|
####################################################
|
|
if(defined($service_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tdisplay_name = \"$service_2x->{'display_name'}\",");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
####################################################
|
|
# macros
|
|
####################################################
|
|
|
|
if(defined($service_2x->{'__I2CONVERT_MACROS'}) && $service_2x->{'__I2CONVERT_MACROS'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\t\tmacros = {");
|
|
foreach my $macro_key (keys %{$service_2x->{'__I2CONVERT_MACROS'}}) {
|
|
next if $macro_key =~ /USER/;
|
|
dump_config_line($icinga2_cfg, "\t\t\t$macro_key = \"$service_2x->{'__I2CONVERT_MACROS'}->{$macro_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t\t},");
|
|
}
|
|
|
|
|
|
####################################################
|
|
# check_command
|
|
####################################################
|
|
if(defined($service_2x->{'__I2_CONVERT_CHECKCOMMAND_NAME'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tcheck_command = \"$service_2x->{'__I2_CONVERT_CHECKCOMMAND_NAME'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# servicegroups
|
|
####################################################
|
|
if(defined($service_2x->{'servicegroups'}) && scalar(@{$service_2x->{'servicegroups'}}) > 0) {
|
|
#say Dumper($service_2x->{'servicegroups'});
|
|
my $servicegroups = join '", "', @{$service_2x->{'servicegroups'}};
|
|
if ($service_2x->{'__I2_CONVERT_SG_ADD'} == 1) {
|
|
dump_config_line($icinga2_cfg, "\t\tservicegroups += [ \"$servicegroups\" ],");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "\t\tservicegroups = [ \"$servicegroups\" ],");
|
|
}
|
|
}
|
|
|
|
####################################################
|
|
# notifications
|
|
####################################################
|
|
if(defined($service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'})) {
|
|
foreach my $by (keys %{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}}) {
|
|
next if !@{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}};
|
|
my $notification_filter;
|
|
if (grep /0/, @{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) {
|
|
$notification_filter = 0;
|
|
} else {
|
|
$notification_filter = "(". (join ' | ', @{$service_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) .")";
|
|
}
|
|
dump_config_line($icinga2_cfg, "\tnotification_".$by."_filter = $notification_filter,");
|
|
}
|
|
}
|
|
|
|
if(defined($service_2x->{'__I2CONVERT_NOTIFICATIONS'})) {
|
|
#say Dumper ($service_2x->{'__I2CONVERT_NOTIFICATIONS'});
|
|
# this is an array of notification objects
|
|
foreach my $service_notification_hash (@{$service_2x->{'__I2CONVERT_NOTIFICATIONS'}}) {
|
|
|
|
#say Dumper($service_notification_hash);
|
|
|
|
# this is a hash by unique key of the notification template, but all further attributes are seperatedly available too
|
|
foreach my $service_notification_key (keys %{$service_notification_hash}) {
|
|
my $service_notification = $service_notification_hash->{$service_notification_key};
|
|
#say Dumper($service_notification);
|
|
|
|
# skip everything not related to service notifications
|
|
next if ($service_notification->{'type'} ne 'service');
|
|
|
|
dump_config_line($icinga2_cfg, "\t\tnotifications[\"$service_notification->{'name'}\"] = {");
|
|
|
|
if (defined ($service_notification->{'templates'}) && @{$service_notification->{'templates'}} > 0) {
|
|
my $service_notification_templates = join '", "', @{$service_notification->{'templates'}};
|
|
dump_config_line($icinga2_cfg, "\t\t\ttemplates = [ \"$service_notification_templates\" ],");
|
|
}
|
|
|
|
if(defined($service_notification->{'users'}) && @{$service_notification->{'users'}} > 0) {
|
|
my $service_users = join '", "', @{$service_notification->{'users'}};
|
|
dump_config_line($icinga2_cfg, "\t\t\tusers = [ \"$service_users\" ],");
|
|
}
|
|
|
|
# this is set for escalations
|
|
if(defined($service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}) && $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\t\t\ttimes = {");
|
|
dump_config_line($icinga2_cfg, "\t\t\t\tbegin = $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'begin'},");
|
|
dump_config_line($icinga2_cfg, "\t\t\t\tend = $service_notification->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'end'}");
|
|
dump_config_line($icinga2_cfg, "\t\t\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\t\t},");
|
|
}
|
|
}
|
|
}
|
|
|
|
if(defined($host_2x->{'__I2CONVERT_NOTIFICATIONS'}) && $host_2x->{'__I2CONVERT_HOSTCHECK'} eq $service_2x->{__I2CONVERT_SERVICEDESCRIPTION}) {
|
|
#say Dumper ($host_2x->{'__I2CONVERT_NOTIFICATIONS'});
|
|
# this is an array of notification objects
|
|
foreach my $host_notification_hash (@{$host_2x->{'__I2CONVERT_NOTIFICATIONS'}}) {
|
|
|
|
#say Dumper($host_notification_hash);
|
|
|
|
# this is a hash by unique key of the notification template, but all further attributes are seperatedly available too
|
|
foreach my $host_notification_key (keys %{$host_notification_hash}) {
|
|
my $host_notification = $host_notification_hash->{$host_notification_key};
|
|
#say Dumper($host_notification);
|
|
|
|
# skip everything not related to host notifications
|
|
next if ($host_notification->{'type'} ne 'host');
|
|
|
|
dump_config_line($icinga2_cfg, "\t\tnotifications[\"$host_notification->{'name'}\"] = {");
|
|
|
|
if (defined ($host_notification->{'templates'}) && @{$host_notification->{'templates'}} > 0) {
|
|
my $host_notification_templates = join '", "', @{$host_notification->{'templates'}};
|
|
dump_config_line($icinga2_cfg, "\t\t\ttemplates = [ \"$host_notification_templates\" ],");
|
|
}
|
|
|
|
if(defined($host_notification->{'users'}) && @{$host_notification->{'users'}} > 0) {
|
|
my $host_users = join '", "', @{$host_notification->{'users'}};
|
|
dump_config_line($icinga2_cfg, "\t\t\tusers = [ \"$host_users\" ],");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\t\t},");
|
|
}
|
|
}
|
|
}
|
|
|
|
if(defined($service_2x->{'notification_period'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tnotification_period = \"$service_2x->{'notification_period'}\",");
|
|
}
|
|
if(defined($service_2x->{'notification_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tnotification_interval = $service_2x->{'notification_interval'},");
|
|
}
|
|
if(defined($service_2x->{'notifications_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\tenable_notifications = $service_2x->{'notifications_enabled'},");
|
|
}
|
|
|
|
####################################################
|
|
# other service attributes, if set
|
|
####################################################
|
|
if(defined($service_2x->{'check_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tcheck_interval = $service_2x->{'check_interval'},");
|
|
}
|
|
if(defined($service_2x->{'retry_interval'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tretry_interval = $service_2x->{'retry_interval'},");
|
|
}
|
|
if(defined($service_2x->{'max_check_attempts'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tmax_check_attempts = $service_2x->{'max_check_attempts'},");
|
|
}
|
|
if(defined($service_2x->{'check_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tcheck_period = \"$service_2x->{'check_period'}\",");
|
|
}
|
|
|
|
if(defined($service_2x->{'active_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tenable_active_checks = $service_2x->{'active_checks_enabled'},");
|
|
}
|
|
if(defined($service_2x->{'passive_checks_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tenable_passive_checks = $service_2x->{'passive_checks_enabled'},");
|
|
}
|
|
if(defined($service_2x->{'flap_detection_enabled'})) {
|
|
dump_config_line($icinga2_cfg, "\t\tenable_flapping = $service_2x->{'flap_detection_enabled'},");
|
|
}
|
|
|
|
####################################################
|
|
# custom attr
|
|
####################################################
|
|
|
|
if(defined($service_2x->{'__I2CONVERT_CUSTOM_ATTR'}) && $service_2x->{'__I2CONVERT_CUSTOM_ATTR'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\t\tcustom = {");
|
|
foreach my $custom_key (keys %{$service_2x->{'__I2CONVERT_CUSTOM_ATTR'}}) {
|
|
dump_config_line($icinga2_cfg, "\t\t\t$custom_key = \"$service_2x->{'__I2CONVERT_CUSTOM_ATTR'}->{$custom_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
dump_config_line($icinga2_cfg, "");
|
|
}
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
sub dump_user_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $user_2x = shift;
|
|
my $object_type = "object"; # object or template
|
|
my $user_name = $user_2x->{'contact_name'}; # default, may be changed for templates
|
|
|
|
#say Dumper($user_2x);
|
|
if ($user_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$user_name = $user_2x->{'__I2CONVERT_TEMPLATE_NAME'};
|
|
}
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($user_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $user_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $user_2x_templates = join '", "', @{$user_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type User \"$user_name\" inherits \"$user_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type User \"$user_name\" {");
|
|
}
|
|
|
|
if(defined($user_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$user_2x->{'display_name'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# macros
|
|
####################################################
|
|
|
|
if(defined($user_2x->{'__I2CONVERT_MACROS'}) && $user_2x->{'__I2CONVERT_MACROS'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tmacros = {");
|
|
foreach my $macro_key (keys %{$user_2x->{'__I2CONVERT_MACROS'}}) {
|
|
next if $macro_key =~ /USER/;
|
|
dump_config_line($icinga2_cfg, "\t\t$macro_key = \"$user_2x->{'__I2CONVERT_MACROS'}->{$macro_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
|
|
####################################################
|
|
# notifications
|
|
####################################################
|
|
|
|
if(defined($user_2x->{'notification_period'})) {
|
|
dump_config_line($icinga2_cfg, "\tnotification_period = \"$user_2x->{'notification_period'}\",");
|
|
}
|
|
|
|
if(defined($user_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'})) {
|
|
foreach my $by (keys %{$user_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}}) {
|
|
next if !@{$user_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}};
|
|
my $notification_filter;
|
|
if (grep /0/, @{$user_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) {
|
|
$notification_filter = 0;
|
|
} else {
|
|
$notification_filter = "(". (join ' | ', @{$user_2x->{'__I2CONVERT_NOTIFICATION_FILTERS'}->{$by}}) .")";
|
|
}
|
|
dump_config_line($icinga2_cfg, "\tnotification_".$by."_filter = $notification_filter,");
|
|
}
|
|
}
|
|
|
|
####################################################
|
|
# usergroups
|
|
####################################################
|
|
if(defined($user_2x->{'usergroups'})) {
|
|
#say Dumper($user_2x->{'usergroups'});
|
|
my $usergroups = join '", "', @{$user_2x->{'usergroups'}};
|
|
if ($user_2x->{'__I2_CONVERT_UG_ADD'} == 1) {
|
|
dump_config_line($icinga2_cfg, "\tgroups += [ \"$usergroups\" ],");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "\tgroups = [ \"$usergroups\" ],");
|
|
}
|
|
}
|
|
|
|
####################################################
|
|
# custom attr
|
|
####################################################
|
|
|
|
if(defined($user_2x->{'__I2CONVERT_CUSTOM_ATTR'}) && $user_2x->{'__I2CONVERT_CUSTOM_ATTR'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tcustom = {");
|
|
foreach my $custom_key (keys %{$user_2x->{'__I2CONVERT_CUSTOM_ATTR'}}) {
|
|
dump_config_line($icinga2_cfg, "\t\t$custom_key = \"$user_2x->{'__I2CONVERT_CUSTOM_ATTR'}->{$custom_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
sub dump_notification_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $notification_2x = shift;
|
|
my $object_type = "object"; # object or template
|
|
my $notification_name = $notification_2x->{'__I2CONVERT_NOTIFICATION_NAME'}; # default, may be changed for templates
|
|
|
|
#say Dumper($notification_2x);
|
|
if ($notification_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$notification_name = $notification_2x->{'__I2CONVERT_NOTIFICATION_TEMPLATE_NAME'};
|
|
}
|
|
|
|
return if (!defined($notification_name));
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($notification_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $notification_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $notification_2x_templates = join '", "', @{$notification_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type Notification \"$notification_name\" inherits \"$notification_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type Notification \"$notification_name\" {");
|
|
}
|
|
|
|
if(defined($notification_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$notification_2x->{'display_name'}\",");
|
|
}
|
|
|
|
if(defined($notification_2x->{'__I2CONVERT_NOTIFICATION_COMMAND'})) {
|
|
#say Dumper($notifications_2x->{'notification_command'});
|
|
dump_config_line($icinga2_cfg, "\tnotification_command = \"$notification_2x->{'__I2CONVERT_NOTIFICATION_COMMAND'}\",");
|
|
}
|
|
|
|
if(defined($notification_2x->{'export_macros'})) {
|
|
#say Dumper($notification_2x->{'export_macros'});
|
|
my $export_macros = join '",\n"', @{$notification_2x->{'export_macros'}};
|
|
dump_config_line($icinga2_cfg, "\texport_macros = [ \"$export_macros\" ],");
|
|
}
|
|
|
|
if(defined($notification_2x->{'users'}) && @{$notification_2x->{'users'}} > 0) {
|
|
my $service_users = join '", "', @{$notification_2x->{'users'}};
|
|
dump_config_line($icinga2_cfg, "\tusers = [ \"$service_users\" ],");
|
|
}
|
|
|
|
# this is set for escalations
|
|
if(defined($notification_2x->{'__I2CONVERT_NOTIFICATION_TIMES'}) && $notification_2x->{'__I2CONVERT_NOTIFICATION_TIMES'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\ttimes = {");
|
|
dump_config_line($icinga2_cfg, "\t\tbegin = $notification_2x->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'begin'},");
|
|
dump_config_line($icinga2_cfg, "\t\tend = $notification_2x->{'__I2CONVERT_NOTIFICATION_TIMES'}->{'end'}");
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
|
|
sub dump_timeperiod_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $object_type = "object"; # object or template
|
|
my $timeperiod_2x = shift;
|
|
my $timeperiod_name = $timeperiod_2x->{'timeperiod_name'};
|
|
|
|
#say Dumper($timeperiod_2x);
|
|
if ($timeperiod_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$timeperiod_name = $timeperiod_2x->{'__I2CONVERT_TEMPLATE_NAME'};
|
|
}
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($timeperiod_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $timeperiod_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $timeperiod_2x_templates = join '", "', @{$timeperiod_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type TimePeriod \"$timeperiod_name\" inherits \"$timeperiod_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type TimePeriod \"$timeperiod_name\" {");
|
|
}
|
|
|
|
# display_name is seperated at first position
|
|
if(defined($timeperiod_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$timeperiod_2x->{'display_name'}\",");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\tranges = {");
|
|
|
|
# dump all possible keys (there's no fixed string attr here)
|
|
foreach my $key (sort (keys %{$timeperiod_2x})) {
|
|
if ($key !~ /__I2CONVERT/ &&
|
|
$key ne 'alias' &&
|
|
$key ne 'name' &&
|
|
$key ne 'timeperiod_name' &&
|
|
$key ne 'display_name' &&
|
|
$key ne 'use'
|
|
) {
|
|
dump_config_line($icinga2_cfg, "\t\t\"$key\" \t= \"$timeperiod_2x->{$key}\",");
|
|
}
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
dump_config_line($icinga2_cfg, "");
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
sub dump_group_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $group_2x = shift;
|
|
my $group_name_attr = $group_2x->{__I2CONVERT_TYPE} . "_name";
|
|
my $group_name = $group_2x->{$group_name_attr};
|
|
my $group_type = ucfirst("$group_2x->{__I2CONVERT_TYPE}");
|
|
$group_type =~ s/group/Group/;
|
|
|
|
#say Dumper($group_2x);
|
|
|
|
dump_config_line($icinga2_cfg, "object $group_type \"$group_name\" {");
|
|
if(defined($group_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$group_2x->{'display_name'}\",");
|
|
}
|
|
|
|
####################################################
|
|
# custom attr
|
|
####################################################
|
|
|
|
if(defined($group_2x->{'__I2CONVERT_CUSTOM_ATTR'}) && $group_2x->{'__I2CONVERT_CUSTOM_ATTR'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tcustom = {");
|
|
foreach my $custom_key (keys %{$group_2x->{'__I2CONVERT_CUSTOM_ATTR'}}) {
|
|
dump_config_line($icinga2_cfg, "\t\t$custom_key = \"$group_2x->{'__I2CONVERT_CUSTOM_ATTR'}->{$custom_key}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
sub dump_command_2x {
|
|
my $icinga2_cfg = shift;
|
|
my $command_2x = shift;
|
|
my $command_name = $command_2x->{'__I2CONVERT_COMMAND_NAME'};
|
|
my $command_line = $command_2x->{'__I2CONVERT_COMMAND_LINE'};
|
|
my $command_type = ucfirst("$command_2x->{__I2CONVERT_COMMAND_TYPE}Command");
|
|
my $object_type = "object";
|
|
|
|
#say Dumper($command_2x);
|
|
# skip used commands
|
|
if ($command_2x->{'__I2_CONVERT_NOTIFICATION_COMMAND_USED'} == 1) {
|
|
say "Skipping already processed notification command" . Dumper($command_2x);
|
|
return;
|
|
}
|
|
|
|
if ($command_2x->{__I2CONVERT_IS_TEMPLATE} == 1) {
|
|
$object_type = "template";
|
|
$command_name = $command_2x->{'__I2CONVERT_TEMPLATE_NAME'};
|
|
}
|
|
|
|
####################################################
|
|
# start, inherit from template?
|
|
####################################################
|
|
if (defined($command_2x->{'__I2CONVERT_USES_TEMPLATE'}) && $command_2x->{'__I2CONVERT_USES_TEMPLATE'} == 1) {
|
|
my $command_2x_templates = join '", "', @{$command_2x->{'__I2CONVERT_TEMPLATE_NAMES'}};
|
|
dump_config_line($icinga2_cfg, "$object_type $command_type \"$command_name\" inherits \"$command_2x_templates\" {");
|
|
} else {
|
|
dump_config_line($icinga2_cfg, "$object_type $command_type \"$command_name\" {");
|
|
}
|
|
|
|
####################################################
|
|
# attributes
|
|
####################################################
|
|
if(defined($command_2x->{'display_name'})) {
|
|
dump_config_line($icinga2_cfg, "\tdisplay_name = \"$command_2x->{'display_name'}\",");
|
|
}
|
|
|
|
if(defined($command_line)) {
|
|
dump_config_line($icinga2_cfg, "\tcommand = \"$command_line\",");
|
|
}
|
|
|
|
####################################################
|
|
# macros
|
|
####################################################
|
|
|
|
if(defined($command_2x->{'__I2CONVERT_COMMAND_MACROS'}) && $command_2x->{'__I2CONVERT_COMMAND_MACROS'} != 0) {
|
|
dump_config_line($icinga2_cfg, "\tmacros = {");
|
|
foreach my $cmd_arg (keys %{$command_2x->{'__I2CONVERT_COMMAND_MACROS'}}) {
|
|
next if $cmd_arg =~ /ARG\d+/;
|
|
dump_config_line($icinga2_cfg, "\t\t$cmd_arg = \"$command_2x->{'__I2CONVERT_COMMAND_MACROS'}->{$cmd_arg}\",");
|
|
}
|
|
dump_config_line($icinga2_cfg, "\t},");
|
|
}
|
|
|
|
dump_config_line($icinga2_cfg, "");
|
|
dump_config_line($icinga2_cfg, "}");
|
|
dump_config_line($icinga2_cfg, "\n");
|
|
}
|
|
|
|
|
|
|
|
1;
|
|
|
|
__END__
|
|
# vi: sw=4 ts=4 expandtab :
|