Skip to content

Commit 1834e6d

Browse files
committed
agent bakery: introduce feature flag for rulesets
CMK-33533 Change-Id: I2fb9493f814e56185b1ef42ceb6a1052f8ed9998
1 parent 2f88a77 commit 1834e6d

5 files changed

Lines changed: 42 additions & 8 deletions

File tree

cmk/gui/common_registration.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ def register(
166166
help_about_checkmk_entries: Callable[[], list[NavItemTopicEntry]],
167167
token_authenticated_page_registry: TokenAuthenticatedPageRegistry,
168168
builtin_pagetype_topic_registry: pagetypes.BuiltinPagetypeTopicRegistry,
169+
agent_bakery_enabled: bool,
169170
) -> None:
170171
hooks.register_thread_cache_cleanup()
171172
notification_parameter_registry.register_form_spec_plugin = register_plugin
@@ -352,7 +353,12 @@ def register(
352353
user_config.register(config_file_registry)
353354
configuration_bundle_store.register(config_file_registry)
354355
deprecations.register(cron_job_registry)
355-
rulespec.register(edition, rulespec_registry, notification_parameter_registry)
356+
rulespec.register(
357+
edition,
358+
rulespec_registry,
359+
notification_parameter_registry,
360+
agent_bakery_enabled,
361+
)
356362
welcome.register(page_registry, snapin_registry)
357363
search_registration.register(
358364
edition,

cmk/gui/community_registration.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def register_painters() -> None:
131131
painter_registry.register(graph.PainterHostPnpgraph)
132132

133133

134-
def register(edition: Edition) -> None:
134+
def register(edition: Edition, agent_bakery_enabled: bool) -> None:
135135
sample_config_generator_registry.register(SampleConfigGeneratorGroups)
136136
network_scan.register(host_attribute_registry, automation_command_registry, cron_job_registry)
137137
nagvis.register(permission_section_registry, permission_registry, snapin_registry)
@@ -191,6 +191,7 @@ def register(edition: Edition) -> None:
191191
default_about_checkmk_entries,
192192
token_authenticated_page_registry,
193193
builtin_pagetype_topic_registry,
194+
agent_bakery_enabled,
194195
)
195196

196197
ldap_registration(

cmk/gui/main_modules.py

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77

88
from cmk.ccc.version import Edition
99
from cmk.gui.legacy_plugins import get_failed_plugins as get_failed_plugins
10+
from cmk.licensing.community_handler import ( # astrein: disable=cmk-module-layer-violation
11+
CommunityLicensingHandler,
12+
)
13+
from cmk.licensing.features import licensed_features # astrein: disable=cmk-module-layer-violation
1014

1115
_registered_edition: Edition | None = None
1216

@@ -22,31 +26,51 @@ def register(edition: Edition) -> None:
2226
return
2327
_registered_edition = edition
2428

29+
# NOTE: CommunityLicensingHandler is used here because the edition-specific handler has not
30+
# been registered yet at this point in the call chain. This is safe because licensed_features()
31+
# currently ignores the handler entirely (see features.py) and derives bakery availability
32+
# solely from the edition. Once licensed_features() is simplified to reflect this, the
33+
# handler argument will be removed and this workaround will no longer be needed.
34+
agent_bakery_enabled = licensed_features(
35+
edition, CommunityLicensingHandler.make()
36+
).bakery.enabled
37+
2538
match edition:
2639
case Edition.PRO:
2740
import cmk.gui.nonfree.pro.registration # type: ignore[import-not-found, import-untyped, unused-ignore]
2841

29-
cmk.gui.nonfree.pro.registration.register(edition)
42+
cmk.gui.nonfree.pro.registration.register(
43+
edition,
44+
agent_bakery_enabled=agent_bakery_enabled,
45+
)
3046

3147
case Edition.ULTIMATEMT:
3248
import cmk.gui.nonfree.ultimatemt.registration # type: ignore[import-not-found, import-untyped, unused-ignore]
3349

34-
cmk.gui.nonfree.ultimatemt.registration.register(edition)
50+
cmk.gui.nonfree.ultimatemt.registration.register(
51+
edition, agent_bakery_enabled=agent_bakery_enabled
52+
)
3553

3654
case Edition.ULTIMATE:
3755
import cmk.gui.nonfree.ultimate.registration # type: ignore[import-not-found, import-untyped, unused-ignore]
3856

39-
cmk.gui.nonfree.ultimate.registration.register(edition)
57+
cmk.gui.nonfree.ultimate.registration.register(
58+
edition, agent_bakery_enabled=agent_bakery_enabled
59+
)
4060

4161
case Edition.CLOUD:
4262
import cmk.gui.nonfree.cloud.registration # type: ignore[import-not-found, import-untyped, unused-ignore]
4363

44-
cmk.gui.nonfree.cloud.registration.register(edition)
64+
cmk.gui.nonfree.cloud.registration.register(
65+
edition, agent_bakery_enabled=agent_bakery_enabled
66+
)
4567

4668
case Edition.COMMUNITY:
4769
import cmk.gui.community_registration
4870

49-
cmk.gui.community_registration.register(edition)
71+
cmk.gui.community_registration.register(
72+
edition, agent_bakery_enabled=agent_bakery_enabled
73+
)
5074

5175
case _ as unreachable:
5276
assert_never(unreachable)

cmk/gui/rule_specs/loader.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,15 @@ def _discover_modules_from(*names: str) -> set[str]:
6161
def load_api_v1_rule_specs(
6262
raise_errors: bool,
6363
edition: Edition,
64+
agent_bakery_enabled: bool,
6465
) -> tuple[Sequence[Exception], Sequence[LoadedRuleSpec]]:
6566
used_entry_points = (
6667
{
6768
type_: prefix
6869
for type_, prefix in entry_point_prefixes().items()
6970
if type_ is not AgentConfig
7071
}
71-
if edition is Edition.COMMUNITY
72+
if not agent_bakery_enabled
7273
else entry_point_prefixes()
7374
)
7475

cmk/gui/rulespec.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@ def register(
2020
edition: Edition,
2121
rulespec_registry: RulespecRegistry,
2222
notification_parameter_registry: NotificationParameterRegistry,
23+
agent_bakery_enabled: bool,
2324
) -> None:
2425
errors, loaded_rule_specs = load_api_v1_rule_specs(
2526
raise_errors=debug_enabled(),
2627
edition=edition,
28+
agent_bakery_enabled=agent_bakery_enabled,
2729
)
2830
if errors:
2931
logger.error("Error loading rulespecs: %s", errors)

0 commit comments

Comments
 (0)