From 8a57216803a16ab9eb153bfbae01e77b02dde1ab Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 25 Aug 2026 10:47:39 -0400 Subject: [PATCH] Block user from naming group/node the same thing If a node and a group have the same name, things can get very confusing and hard to deal with. --- confluent_server/confluent/config/configmanager.py | 12 ++++++++++-- confluent_server/confluent/core.py | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/confluent_server/confluent/config/configmanager.py b/confluent_server/confluent/config/configmanager.py index 4ccedf99..c165278a 100644 --- a/confluent_server/confluent/config/configmanager.py +++ b/confluent_server/confluent/config/configmanager.py @@ -2023,7 +2023,11 @@ class ConfigManager(object): continue # next node, this node already in self._node_added_to_group(node, group, changeset) - async def add_group_attributes(self, attribmap): + async def add_group_attributes(self, attribmap, checkconflict=False): + if checkconflict: + for groupname in attribmap: + if groupname in self._cfgstore.get('nodes', {}): + raise ValueError('Group "{}" conflicts with an existing node'.format(groupname)) await self.set_group_attributes(attribmap, autocreate=True) async def set_group_attributes(self, attribmap, autocreate=False, merge="replace", keydata=None, skipped=None): @@ -2422,7 +2426,11 @@ class ConfigManager(object): self._notif_attribwatchers(changeset) self._bg_sync_to_file() - async def add_node_attributes(self, attribmap): + async def add_node_attributes(self, attribmap, checkconflict=False): + if checkconflict: + for nodename in attribmap: + if nodename in self._cfgstore.get('nodegroups', {}): + raise ValueError('Node "{}" conflicts with an existing group'.format(nodename)) await self.set_node_attributes(attribmap, autocreate=True) async def rename_nodes(self, renamemap): diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index 82da37f7..29073c88 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -818,7 +818,7 @@ async def create_group(inputdata, configmanager): except KeyError: raise exc.InvalidArgumentException() try: - await configmanager.add_group_attributes(attribmap) + await configmanager.add_group_attributes(attribmap, checkconflict=True) except ValueError as e: raise exc.InvalidArgumentException(str(e)) yield msg.CreatedResource(groupname) @@ -834,7 +834,7 @@ async def create_node(inputdata, configmanager): except KeyError: raise exc.InvalidArgumentException('name not specified') try: - await configmanager.add_node_attributes(attribmap) + await configmanager.add_node_attributes(attribmap, checkconflict=True) except ValueError as e: raise exc.InvalidArgumentException(str(e)) yield msg.CreatedResource(nodename) @@ -850,7 +850,7 @@ async def create_noderange(inputdata, configmanager): except KeyError: raise exc.InvalidArgumentException('name not specified') try: - await configmanager.add_node_attributes(attribmap) + await configmanager.add_node_attributes(attribmap, checkconflict=True) except ValueError as e: raise exc.InvalidArgumentException(str(e)) for node in attribmap: