From 1db3d4f4411968567fa01514f3752f02fed3f096 Mon Sep 17 00:00:00 2001 From: Alexei Znamensky <103110+russoz@users.noreply.github.com> Date: Fri, 17 Apr 2026 23:48:49 +1200 Subject: [PATCH] gitlab_project_members: fail when multiple projects match by name (#11851) * gitlab_project_members: fail when multiple projects match by name When the project parameter is a bare name (not a full path), and the search returns more than one match, the module now fails with a clear error asking the user to provide the full path (group/project) to disambiguate, instead of silently operating on the first result. Fixes #2767 Co-Authored-By: Claude Opus 4.6 * gitlab_project_members: improve code formatting Co-Authored-By: Claude Opus 4.6 * gitlab_project_members: add changelog fragment for #11851 Co-Authored-By: Claude Opus 4.6 --------- Co-authored-by: Claude Opus 4.6 --- .../fragments/11851-gitlab-project-members-ambiguous.yml | 4 ++++ plugins/modules/gitlab_project_members.py | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/11851-gitlab-project-members-ambiguous.yml diff --git a/changelogs/fragments/11851-gitlab-project-members-ambiguous.yml b/changelogs/fragments/11851-gitlab-project-members-ambiguous.yml new file mode 100644 index 0000000000..f622144f18 --- /dev/null +++ b/changelogs/fragments/11851-gitlab-project-members-ambiguous.yml @@ -0,0 +1,4 @@ +bugfixes: + - gitlab_project_members - fail with a clear error when multiple projects match the given name, instead of silently operating on the first result + (https://github.com/ansible-collections/community.general/issues/2767, + https://github.com/ansible-collections/community.general/pull/11851). diff --git a/plugins/modules/gitlab_project_members.py b/plugins/modules/gitlab_project_members.py index 1bd759abce..4c3c9c080e 100644 --- a/plugins/modules/gitlab_project_members.py +++ b/plugins/modules/gitlab_project_members.py @@ -179,8 +179,15 @@ class GitLabProjectMembers: return project_exists.id except gitlab.exceptions.GitlabGetError: project_exists = self._gitlab.projects.list(search=project_name, all=False) - if project_exists: + if len(project_exists) == 1: return project_exists[0].id + if len(project_exists) > 1: + self._module.fail_json( + msg=( + f"More than one project matches '{project_name}'. " + "Use the full path ('group/project') to disambiguate." + ) + ) def get_user_id(self, gitlab_user): user_exists = self._gitlab.users.list(username=gitlab_user, all=False)