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 <Mirko.Wilhelmi@sma.de>
This commit is contained in:
morco 2025-04-10 07:05:01 +02:00 committed by GitHub
parent 02ffb6e7e3
commit 1157b7102f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 24 additions and 12 deletions

View file

@ -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).

View file

@ -48,8 +48,9 @@ options:
description: description:
- The access level for the user. - The access level for the user.
- Required if O(state=present), user state is set to present. - Required if O(state=present), user state is set to present.
- V(owner) was added in community.general 10.6.0.
type: str type: str
choices: ['guest', 'reporter', 'developer', 'maintainer'] choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner']
gitlab_users_access: gitlab_users_access:
description: description:
- Provide a list of user to access level mappings. - Provide a list of user to access level mappings.
@ -67,8 +68,9 @@ options:
description: description:
- The access level for the user. - The access level for the user.
- Required if O(state=present), user state is set to present. - Required if O(state=present), user state is set to present.
- V(owner) was added in community.general 10.6.0.
type: str type: str
choices: ['guest', 'reporter', 'developer', 'maintainer'] choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner']
required: true required: true
version_added: 3.7.0 version_added: 3.7.0
state: 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 - 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. do not purge orphaned members.
- Is only used when O(state=present). - Is only used when O(state=present).
- V(owner) was added in community.general 10.6.0.
type: list type: list
elements: str elements: str
choices: ['guest', 'reporter', 'developer', 'maintainer'] choices: ['guest', 'reporter', 'developer', 'maintainer', 'owner']
version_added: 3.7.0 version_added: 3.7.0
""" """
@ -239,16 +242,16 @@ def main():
project=dict(type='str', required=True), project=dict(type='str', required=True),
gitlab_user=dict(type='list', elements='str'), gitlab_user=dict(type='list', elements='str'),
state=dict(type='str', default='present', choices=['present', 'absent']), 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=[ purge_users=dict(type='list', elements='str', choices=[
'guest', 'reporter', 'developer', 'maintainer']), 'guest', 'reporter', 'developer', 'maintainer', 'owner']),
gitlab_users_access=dict( gitlab_users_access=dict(
type='list', type='list',
elements='dict', elements='dict',
options=dict( options=dict(
name=dict(type='str', required=True), name=dict(type='str', required=True),
access_level=dict(type='str', choices=[ 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, 'reporter': gitlab.const.REPORTER_ACCESS,
'developer': gitlab.const.DEVELOPER_ACCESS, 'developer': gitlab.const.DEVELOPER_ACCESS,
'maintainer': gitlab.const.MAINTAINER_ACCESS, 'maintainer': gitlab.const.MAINTAINER_ACCESS,
'owner': gitlab.const.OWNER_ACCESS,
} }
gitlab_project = module.params['project'] gitlab_project = module.params['project']

View file

@ -16,3 +16,5 @@ dedicated_access_users:
access_level: "developer" access_level: "developer"
- name: username2 - name: username2
access_level: "maintainer" access_level: "maintainer"
- name: username3
access_level: "owner"

View file

@ -10,7 +10,7 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
- name: Install required library - name: Install required library
pip: ansible.builtin.pip:
name: python-gitlab name: python-gitlab
state: present state: present
@ -20,6 +20,7 @@
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
gitlab_user: "{{ username }}" gitlab_user: "{{ username }}"
access_level: "{{ gitlab_access_level }}"
state: absent state: absent
- name: Add a User to A GitLab Project - name: Add a User to A GitLab Project
@ -58,6 +59,7 @@
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
gitlab_user: "{{ username }}" gitlab_user: "{{ username }}"
access_level: "{{ gitlab_access_level }}"
state: absent state: absent
register: remove_gitlab_project_members_state register: remove_gitlab_project_members_state
@ -72,6 +74,7 @@
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
gitlab_user: "{{ username }}" gitlab_user: "{{ username }}"
access_level: "{{ gitlab_access_level }}"
state: absent state: absent
register: remove_gitlab_project_members_state_again register: remove_gitlab_project_members_state_again
@ -90,15 +93,16 @@
state: present state: present
- name: Remove a list of Users to A GitLab Project - 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_url: "{{ gitlab_server_url }}"
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
gitlab_user: "{{ userlist }}" gitlab_user: "{{ userlist }}"
access_level: "{{ gitlab_access_level }}"
state: absent state: absent
- name: Add a list of Users with Dedicated Access Levels to A GitLab Project - 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_url: "{{ gitlab_server_url }}"
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
@ -106,7 +110,7 @@
state: present state: present
- name: Remove a list of Users with Dedicated Access Levels to A GitLab Project - 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_url: "{{ gitlab_server_url }}"
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
@ -114,11 +118,11 @@
state: absent state: absent
- name: Add a user, remove all others which might be on this access level - 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_url: "{{ gitlab_server_url }}"
api_token: "{{ gitlab_api_access_token }}" api_token: "{{ gitlab_api_access_token }}"
project: "{{ gitlab_project }}" project: "{{ gitlab_project }}"
gitlab_user: "{{ username }}" gitlab_user: "{{ username }}"
access_level: "{{ gitlab_access_level }}" access_level: "{{ gitlab_access_level }}"
pruge_users: "{{ gitlab_access_level }}" purge_users: "{{ gitlab_access_level }}"
state: present state: present