From 1157b7102fbd6bb1e71c0fa8592d03e02a00fa93 Mon Sep 17 00:00:00 2001 From: morco Date: Thu, 10 Apr 2025 07:05:01 +0200 Subject: [PATCH] allow gitlab-project-members module to handle user level "owner" (#9953) * fix(modules/gitlab-project-members): fix ... ... module not being able to handle owner access level * add changelog fragment for this pr * fix and extend integration tests * extend parameter docu as requested by review * also add docu for other parameters * remove pip install break-packages flag from ... ... integration tests --------- Co-authored-by: Mirko Wilhelmi --- ...itlab-project-members-support-owner-level.yml | 2 ++ plugins/modules/gitlab_project_members.py | 16 ++++++++++------ .../gitlab_project_members/defaults/main.yml | 2 ++ .../gitlab_project_members/tasks/main.yml | 16 ++++++++++------ 4 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml diff --git a/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml b/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml new file mode 100644 index 0000000000..64cde71053 --- /dev/null +++ b/changelogs/fragments/9953-gitlab-project-members-support-owner-level.yml @@ -0,0 +1,2 @@ +minor_changes: + - gitlab_project_members - extend choices parameter ``access_level`` by missing upstream valid value ``owner`` (https://github.com/ansible-collections/community.general/pull/9953). diff --git a/plugins/modules/gitlab_project_members.py b/plugins/modules/gitlab_project_members.py index 228af9a062..b5d0f6e2d1 100644 --- a/plugins/modules/gitlab_project_members.py +++ b/plugins/modules/gitlab_project_members.py @@ -48,8 +48,9 @@ options: description: - The access level for the user. - Required if O(state=present), user state is set to present. + - V(owner) was added in community.general 10.6.0. type: str - choices: ['guest', 'reporter', 'developer', 'maintainer'] + choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner'] gitlab_users_access: description: - Provide a list of user to access level mappings. @@ -67,8 +68,9 @@ options: description: - The access level for the user. - Required if O(state=present), user state is set to present. + - V(owner) was added in community.general 10.6.0. type: str - choices: ['guest', 'reporter', 'developer', 'maintainer'] + choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner'] required: true version_added: 3.7.0 state: @@ -84,9 +86,10 @@ options: - Adds/remove users of the given access_level to match the given O(gitlab_user)/O(gitlab_users_access) list. If omitted do not purge orphaned members. - Is only used when O(state=present). + - V(owner) was added in community.general 10.6.0. type: list elements: str - choices: ['guest', 'reporter', 'developer', 'maintainer'] + choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner'] version_added: 3.7.0 """ @@ -239,16 +242,16 @@ def main(): project=dict(type='str', required=True), gitlab_user=dict(type='list', elements='str'), state=dict(type='str', default='present', choices=['present', 'absent']), - access_level=dict(type='str', choices=['guest', 'reporter', 'developer', 'maintainer']), + access_level=dict(type='str', choices=['guest', 'reporter', 'developer', 'maintainer', 'owner']), purge_users=dict(type='list', elements='str', choices=[ - 'guest', 'reporter', 'developer', 'maintainer']), + 'guest', 'reporter', 'developer', 'maintainer', 'owner']), gitlab_users_access=dict( type='list', elements='dict', options=dict( name=dict(type='str', required=True), access_level=dict(type='str', choices=[ - 'guest', 'reporter', 'developer', 'maintainer'], required=True), + 'guest', 'reporter', 'developer', 'maintainer', 'owner'], required=True), ) ), )) @@ -286,6 +289,7 @@ def main(): 'reporter': gitlab.const.REPORTER_ACCESS, 'developer': gitlab.const.DEVELOPER_ACCESS, 'maintainer': gitlab.const.MAINTAINER_ACCESS, + 'owner': gitlab.const.OWNER_ACCESS, } gitlab_project = module.params['project'] diff --git a/tests/integration/targets/gitlab_project_members/defaults/main.yml b/tests/integration/targets/gitlab_project_members/defaults/main.yml index 72d5a68f15..47062478a8 100644 --- a/tests/integration/targets/gitlab_project_members/defaults/main.yml +++ b/tests/integration/targets/gitlab_project_members/defaults/main.yml @@ -16,3 +16,5 @@ dedicated_access_users: access_level: "developer" - name: username2 access_level: "maintainer" + - name: username3 + access_level: "owner" diff --git a/tests/integration/targets/gitlab_project_members/tasks/main.yml b/tests/integration/targets/gitlab_project_members/tasks/main.yml index 215abad44f..d08896f239 100644 --- a/tests/integration/targets/gitlab_project_members/tasks/main.yml +++ b/tests/integration/targets/gitlab_project_members/tasks/main.yml @@ -10,7 +10,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later - name: Install required library - pip: + ansible.builtin.pip: name: python-gitlab state: present @@ -20,6 +20,7 @@ api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" gitlab_user: "{{ username }}" + access_level: "{{ gitlab_access_level }}" state: absent - name: Add a User to A GitLab Project @@ -58,6 +59,7 @@ api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" gitlab_user: "{{ username }}" + access_level: "{{ gitlab_access_level }}" state: absent register: remove_gitlab_project_members_state @@ -72,6 +74,7 @@ api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" gitlab_user: "{{ username }}" + access_level: "{{ gitlab_access_level }}" state: absent register: remove_gitlab_project_members_state_again @@ -90,15 +93,16 @@ state: present - name: Remove a list of Users to A GitLab Project - community.general.gitlab_project_members:: + community.general.gitlab_project_members: api_url: "{{ gitlab_server_url }}" api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" gitlab_user: "{{ userlist }}" + access_level: "{{ gitlab_access_level }}" state: absent - name: Add a list of Users with Dedicated Access Levels to A GitLab Project - community.general.gitlab_project_members:: + community.general.gitlab_project_members: api_url: "{{ gitlab_server_url }}" api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" @@ -106,7 +110,7 @@ state: present - name: Remove a list of Users with Dedicated Access Levels to A GitLab Project - community.general.gitlab_project_members:: + community.general.gitlab_project_members: api_url: "{{ gitlab_server_url }}" api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" @@ -114,11 +118,11 @@ state: absent - name: Add a user, remove all others which might be on this access level - community.general.gitlab_project_members:: + community.general.gitlab_project_members: api_url: "{{ gitlab_server_url }}" api_token: "{{ gitlab_api_access_token }}" project: "{{ gitlab_project }}" gitlab_user: "{{ username }}" access_level: "{{ gitlab_access_level }}" - pruge_users: "{{ gitlab_access_level }}" + purge_users: "{{ gitlab_access_level }}" state: present