icinga2/tools/configconvert
Michael Friedrich 739f23f0fc config conversion: Rename dependencies.
refs #4741
2013-09-25 16:13:39 +02:00
..
Icinga2 config conversion: Rename dependencies. 2013-09-25 16:13:39 +02:00
conf configconvert: move to tools/ 2013-06-24 16:14:20 +02:00
Icinga2.pm Update copyright information. 2013-09-25 07:45:56 +02:00
README configconvert: update README 2013-06-26 16:23:33 +02:00
icinga2-conv.conf config conversion: Fix object names in test config. 2013-09-25 16:04:40 +02:00
icinga2_convert_v1_v2.pl Update copyright information. 2013-09-25 07:45:56 +02:00
run_icinga2 configconvert: move to tools/ 2013-06-24 16:14:20 +02:00

README

ICINGA 2 CONVERSION SCRIPT FOR ICINGA 1.x CONFIGURATION
=======================================================

This config conversion script provides support for basic Icinga 1.x
configuration format conversion to native Icinga 2.x configuration syntax.

It won't just compile all objects and drop them at once, but keep your
existing 1.x template structure, only adding a new host->service link relation.

The script will also detect the "attach service to hostgroup and put
hosts as members" trick from 1.x and convert that into Icinga2's template
system.

Furthermore the old "service with contacts and notification commands" logic
will be converted into Icinga2's logic with new notification objects,
allowing to define notifications directly on the service definition then.

Commands will be split by type (Check, Event, Notification) and relinked where
possible. The host's check_command is dropped, and a possible service hostcheck
looked up, if possible.

Notifications will be built based on the service->contact relations, and
escalations will also be merged into notifications, having times begin/end as
additional attributes. Notification options will be converted into the new Icinga2
logic.

Dependencies and Parents are resolved into host and service dependencies with
many objects tricks as well.

Timeperiods will be converted as is, because Icinga2's ITL provides the legacy-timeperiod
template which supports that format for compatibility reasons.

Custom attributes like custom variables, *_urls, etc will be collected into the
custom dictionary, while possible macros are automagically converted into the macro
dictionary (freely definable macros in Icinga 2.x).

All required templates will be inherited from Icinga2's Template Library (ITL).

RUN
# ./icinga2_convert_v1_v2.pl -v -o conf/

HELP
# ./icinga2_convert_v1_v2.pl -h

TEST
There's a small icinga2 conversion test config available, including conf/ folder.

# ~/i2/sbin/icinga2 -c icinga2-conv.conf

(or if icinga2 binary is located in $HOME/i2/sbin/icinga2, simply use run_icinga2)


REQUIREMENTS
- Perl:
	Data::Dumper
	File::Find
	Storable qw(dclone)
	Getopt::Long qw(:config no_ignore_case bundling)
	Pod::Usage

- Icinga2 ITL


DEBUG
Compile Icinga2 with --enable-debug=yes and start it with -x. Alternatively, define the
ConsoleLogger Object and set severity to "debug".

local object ConsoleLogger "my-debug-log" {
    severity = "debug"
}


NOTES
- Excludes (will be ignored in member lists)
- Wildcards (* means all)
- additive + to += logic (only for the current object, does not work with users)
- Dependencies (host deps and parents are merged)
- Commands will be split into Check|Event|Notification Commands
- null (disable inheritance) only works non-converted values (not on contacts, commands, etc) being 0
- notification_options string w,u,f is converted to
  notification_{state,type}_filter = (StateFilterWarning | StateFilterUnknown | NotificationFilterFlapping)
- service escalations are converted into notifications with times = begin/end
  begin = first_notification * notification_interval (now a time, not a counter)
- custom variables, *_url, *image*, notes, 2d_coords will be collected and stashed into the "custom" dictionary
  similar to the macros dictionary. note: attributes starting with a number must be quoted.

TODO
- Dependency attributes: failure_criteria, inherits_parents, timeperiods
- Flapping Thresholds: old vs new logic
- some special object tricks, regex