object Host "${rnode.name}" { import "generic-host" % if address4: address = "${address4}" % endif % if address6: address6 = "${address6}" % endif # used for determining service groups vars.bw_groups = [ "${'", "'.join(sorted({group.name for group in rnode.groups}))}" ] vars.location = "${rnode.metadata.get('location', 'unknown')}" vars.os = "${rnode.os}" # used for status page vars.pretty_name = "${rnode.metadata.get('icinga_options/pretty_name', rnode.name)}" vars.period = "${rnode.metadata.get('icinga_options/period', '24x7')}" vars.notification.sms = ${str(rnode.metadata.get('icinga_options/vars.notification.sms', True)).lower()} vars.notification.mail = true } % for depends_on_host in sorted(rnode.metadata.get('icinga_options/also_affected_by', set())): object Dependency "${rnode.name}_depends_on_${depends_on_host}" { parent_host_name = "${depends_on_host}" child_host_name = "${rnode.name}" states = [ Up ] disable_checks = true disable_notifications = true ignore_soft_states = true } % endfor % for bundle, bconfig in sorted(rnode.metadata.get('icinga2_api', {}).items()): % for service, config in sorted(bconfig.get('services', {}).items()): object Service "${service}" { import "generic-service" host_name = "${rnode.name}" % if 'check_command' not in config: check_command = "sshmon" % endif % for k, v in sorted(config.items()): % if k not in {'import', 'command_on_monitored_host'} and not k.startswith('vars.notification'): % if isinstance(v, bool) or isinstance(v, int) or k.endswith('_interval'): ${k} = ${str(v).lower()} % else: ${k} = "${v}" % endif % endif % endfor vars.bundle = "${bundle}" vars.notification.sms = ${str(config.get('vars.notification.sms', False)).lower()} vars.notification.mail = ${str(config.get('vars.notification.mail', False)).lower()} } % endfor % endfor