Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DSL: introduce on_config_committed #7460

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

Al2Klimov
Copy link
Member

fixes #3520

@Al2Klimov
Copy link
Member Author

Test protocol

PoC

/etc/icinga2/conf.d/occ.conf

object Host "occ" {
	check_command = "dummy"
}

log(LogCritical, "direct", get_object(Host, "occ"))

on_config_committed {
	log(LogCritical, "on_config_committed", get_object(Host, "occ"))
}

icinga2 daemon -C

[2019-08-29 17:47:23 +0200] information/cli: Icinga application loader (version: v2.11.0-rc1-91-gc029bfaa5; debug)
[2019-08-29 17:47:23 +0200] information/cli: Loading configuration file(s).
[2019-08-29 17:47:23 +0200] critical/direct:
[2019-08-29 17:47:23 +0200] information/ConfigItem: Committing config item(s).
[2019-08-29 17:47:23 +0200] information/ApiListener: My API identity: CENSORED
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 ApiListener.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 235 CheckCommands.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 NotificationComponent.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 FileLogger.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 ApiUser.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 Downtime.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 Endpoint.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 2 Hosts.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 2 HostGroups.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 IcingaApplication.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 12 Notifications.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 2 NotificationCommands.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 UserGroup.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 3 ServiceGroups.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 ScheduledDowntime.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 11 Services.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 3 Zones.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 3 TimePeriods.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 User.
[2019-08-29 17:47:24 +0200] information/ConfigItem: Instantiated 1 CheckerComponent.
[2019-08-29 17:47:24 +0200] critical/on_config_committed: Object of type 'Host'
[2019-08-29 17:47:24 +0200] information/ScriptGlobal: Dumping variables to file 'CENSORED/var/cache/icinga2/icinga2.vars'
[2019-08-29 17:47:24 +0200] information/cli: Finished validating the configuration file(s).

Nested sin

/etc/icinga2/conf.d/occ.conf

on_config_committed {
	on_config_committed {
	}
}

icinga2 daemon -C

[2019-08-29 17:50:29 +0200] information/cli: Icinga application loader (version: v2.11.0-rc1-91-gc029bfaa5; debug)
[2019-08-29 17:50:29 +0200] information/cli: Loading configuration file(s).
[2019-08-29 17:50:29 +0200] information/ConfigItem: Committing config item(s).
[2019-08-29 17:50:29 +0200] information/ApiListener: My API identity: CENSORED
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 ApiListener.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 235 CheckCommands.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 NotificationComponent.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 FileLogger.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 ApiUser.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 Downtime.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 Endpoint.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 Host.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 2 HostGroups.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 IcingaApplication.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 12 Notifications.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 2 NotificationCommands.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 UserGroup.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 3 ServiceGroups.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 ScheduledDowntime.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 11 Services.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 3 Zones.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 3 TimePeriods.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 User.
[2019-08-29 17:50:29 +0200] information/ConfigItem: Instantiated 1 CheckerComponent.
[2019-08-29 17:50:29 +0200] critical/config: Error: on_config_committed is not allowed after the config has been committed.
Location: in CENSORED/etc/icinga2/conf.d/occ.conf: 10:2-11:2
CENSORED/etc/icinga2/conf.d/occ.conf(8):
CENSORED/etc/icinga2/conf.d/occ.conf(9): on_config_committed {
CENSORED/etc/icinga2/conf.d/occ.conf(10):  on_config_committed {
                                                                       ^^^^^^^^^^^^^^^^^^^^^
CENSORED/etc/icinga2/conf.d/occ.conf(11):  }
                                                                      ^^
CENSORED/etc/icinga2/conf.d/occ.conf(12): }
CENSORED/etc/icinga2/conf.d/occ.conf(13):

[2019-08-29 17:50:29 +0200] critical/cli: Config validation failed. Re-run with 'icinga2 daemon -C' after fixing the config.

Runtime sin

/etc/icinga2/conf.d/occ.conf

object Host "occ" {
	check_command = "dummy"
	check_interval = 1s

	vars.dummy_text = function() {
		on_config_committed {
		}

		return "I has cheezburger!"
	}
}

icinga2 daemon

[2019-08-29 17:57:36 +0200] information/cli: Icinga application loader (version: v2.11.0-rc1-91-gc029bfaa5; debug)
[2019-08-29 17:57:36 +0200] information/cli: Loading configuration file(s).
[2019-08-29 17:57:36 +0200] information/ConfigItem: Committing config item(s).
[2019-08-29 17:57:36 +0200] information/ApiListener: My API identity: CENSORED
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 ApiListener.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 235 CheckCommands.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 NotificationComponent.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 FileLogger.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 ApiUser.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 Endpoint.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 2 Hosts.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 2 HostGroups.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 IcingaApplication.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 12 Notifications.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 2 NotificationCommands.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 UserGroup.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 3 ServiceGroups.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 ScheduledDowntime.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 11 Services.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 3 Zones.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 3 TimePeriods.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 User.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 CheckerComponent.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Instantiated 1 Downtime.
[2019-08-29 17:57:36 +0200] information/ScriptGlobal: Dumping variables to file 'CENSORED/var/cache/icinga2/icinga2.vars'
[2019-08-29 17:57:36 +0200] information/ConfigObject: Restoring program state from file 'CENSORED/var/lib/icinga2/icinga2.state'
[2019-08-29 17:57:36 +0200] information/ConfigObject: Restored 283 objects. Loaded 2 new objects without state.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Triggering Start signal for config items
[2019-08-29 17:57:36 +0200] information/FileLogger: 'main-log' started.
[2019-08-29 17:57:36 +0200] information/ApiListener: 'api' started.
[2019-08-29 17:57:36 +0200] information/ApiListener: Started new listener on '[::]:5665'
[2019-08-29 17:57:36 +0200] information/NotificationComponent: 'notification' started.
[2019-08-29 17:57:36 +0200] information/CheckerComponent: 'checker' started.
[2019-08-29 17:57:36 +0200] information/ConfigItem: Activated all objects.
[2019-08-29 17:57:36 +0200] critical/checker: Exception occurred while checking 'occ': Error: on_config_committed is not allowed after the config has been committed.
Location: in CENSORED/etc/icinga2/conf.d/occ.conf: 6:3-7:3
CENSORED/etc/icinga2/conf.d/occ.conf(4):
CENSORED/etc/icinga2/conf.d/occ.conf(5):  vars.dummy_text = function() {
CENSORED/etc/icinga2/conf.d/occ.conf(6):   on_config_committed {
                                                                       ^^^^^^^^^^^^^^^^^^^^^
CENSORED/etc/icinga2/conf.d/occ.conf(7):   }
                                                                     ^^^
CENSORED/etc/icinga2/conf.d/occ.conf(8):
CENSORED/etc/icinga2/conf.d/occ.conf(9):   return "I has cheezburger!"

	(0) Resolving macros for string '$dummy_text$'
	(1) Executing check for object 'occ'

^C[2019-08-29 17:57:40 +0200] information/Application: Received request to shut down.
[2019-08-29 17:57:40 +0200] information/Application: Shutting down...
[2019-08-29 17:57:40 +0200] information/CheckerComponent: 'checker' stopped.
[2019-08-29 17:57:40 +0200] information/NotificationComponent: 'notification' stopped.
[2019-08-29 17:57:40 +0200] information/ApiListener: 'api' stopped.
[2019-08-29 17:57:40 +0200] information/ConfigObject: Dumping program state to file 'CENSORED/var/lib/icinga2/icinga2.state'
[2019-08-29 17:57:40 +0200] information/IcingaApplication: Icinga has shut down.

@dnsmichi dnsmichi added area/configuration DSL, parser, compiler, error handling enhancement New feature or request TBD To be defined - We aren't certain about this yet labels Aug 30, 2019
@dnsmichi
Copy link
Contributor

Incredibly beautiful ❤️ @lippserd @bobapple this will come handy for 2.12 as a PoC for a more specific implementation.

@dnsmichi dnsmichi added this to the 2.12.0 milestone Sep 2, 2019
@dnsmichi dnsmichi modified the milestones: 2.12.0, 2.13.0 Oct 22, 2019
@dnsmichi dnsmichi added this to Design Drafts in icinga2 Nov 15, 2019
@Al2Klimov Al2Klimov requested review from N-o-X and removed request for dnsmichi November 18, 2019 12:31
@Al2Klimov Al2Klimov added this to To review in v2.13.0 merge window Mar 12, 2020
@lippserd
Copy link
Member

lippserd commented Mar 8, 2021

Parsing / activating our configuration is already pretty slow. I would wait with this feature until we agreed that it is really necessary, as depending on how it is used, the whole process will very likely be slowed down further.

@lippserd lippserd removed this from the 2.13.0 milestone Mar 8, 2021
@lippserd lippserd removed this from To review in v2.13.0 merge window Mar 8, 2021
@Al2Klimov
Copy link
Member Author

@cla-bot check

@cla-bot cla-bot bot added the cla/signed label Aug 4, 2021
@Al2Klimov Al2Klimov added this to unsorted in 42 quadrillions PRs Aug 10, 2021
@Al2Klimov Al2Klimov moved this from unsorted to awaits concept review (i.e. TBD) in 42 quadrillions PRs Aug 10, 2021
@Al2Klimov Al2Klimov force-pushed the feature/on_config_committed-3520 branch from cffb77a to 35c58d1 Compare May 17, 2023 15:47
@Al2Klimov
Copy link
Member Author

depending on how it is used, the whole process will very likely be slowed down further.

Absolutely, but

  1. you don’t have to use it at all
  2. yo can already slow down stuff if you really want to.

@julianbrost
Copy link
Contributor

What would be the use-case for this? #3520 suggests it, but doesn't provide an example what this would be useful.

@Al2Klimov
Copy link
Member Author

I guess only the OP (@lippserd) knows.

@Al2Klimov
Copy link
Member Author

This forum thread seems to need this feature:

https://community.icinga.com/t/apply-rules-for-hosts-mixing-director-and-static-files/12393/2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/configuration DSL, parser, compiler, error handling cla/signed enhancement New feature or request TBD To be defined - We aren't certain about this yet
Projects
42 quadrillions PRs
awaits concept review (i.e. TBD)
icinga2
  
Design Drafts
Development

Successfully merging this pull request may close these issues.

[dev.icinga.com #10413] Allow to modify configuration after all config objects have been created
4 participants