-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gitlab_group: fix issue 4577 #4856
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your contribution. Unfortunately your fix does cause new bugs and cannot be merged in this form.
If we can't set à default value but the API expect those values, we should mark them as |
Can also fix #4577 |
You can also only require it on creation (and fail with a nicer error message), or dynamically pass a default on creation if no value is passed to the module. |
@felixfontein the value is not mandatory, but passing the argument as null fails |
Then forcing a default when one isn't needed is really a wrong fix. The correct fix would be to prevent |
def create_or_update_group(self, name, parent, options):
changed = False
payload = {
'name': name,
'path': options['path'],
'visibility': options['visibility'],
'project_creation_level': options['project_creation_level'],
'auto_devops_enabled': options['auto_devops_enabled'],
}
if options.get('project_creation_level'):
payload['project_creation_level'] = options['project_creation_level']
if options.get('subgroup_creation_level'):
payload['subgroup_creation_level'] = options['subgroup_creation_level']
if options.get('description'):
payload['description'] = options['description']
if options.get('require_two_factor_authentication'):
payload['require_two_factor_authentication'] = options['require_two_factor_authentication']
# Because we have already call userExists in main()
if self.group_object is None:
parent_id = self.get_group_id(parent)
payload['parent_id'] = parent_id
group = self.create_group(payload)
# add avatar to group
if options['avatar_path']:
try:
group.avatar = open(options['avatar_path'], 'rb')
except IOError as e:
self._module.fail_json(msg='Cannot open {0}: {1}'.format(options['avatar_path'], e))
changed = True
else:
changed, group = self.update_group(self.group_object, payload)
self.group_object = group
if changed:
if self._module.check_mode:
self._module.exit_json(changed=True, msg="Successfully created or updated the group %s" % name)
try:
group.save()
except Exception as e:
self._module.fail_json(msg="Failed to update group: %s " % e)
return True
else:
return False |
Some typos in my payload, remaining This one resolve :
After that, looots of questions about the avatar implemention, but that's not the PR subject... |
the implementation of the check_mode is also interresting, but not the PR subject too |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Besides that, looks good. (Still needs a changelog fragment though.)
# Same payload for update or create, only parent_id is needed on creation | ||
payload = { | ||
'name': name, | ||
'path': options['path'], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So far path
was only passed on creation, I would handle it the same as parent_id
.
In reality, only two parameters are mandatory in gitlab implementation.
- name
- path (slugified name, which should be a method defined in module_utils, and not the code used because it does not handle the lowercase needed in slugify, that’s related to the think you can see in the main method ; I agree that the payload of the argspec should be used in the whole module rather than this implementation with string mapping 3 times in this module); note
- all others are not mandatory.
https://docs.gitlab.com/ee/api/groups.html#new-group
I think this is more than this PR to review the whole code and I don’t have time to do it for now, feel free to assign me the change request to refactor it
To close this one, I don’t undestand the changelog fragment very well, I need to read the documentation you put. Will come back with new submission when it’s ok for me.
—
Fabien ZARIFIAN
… Le 20 juin 2022 à 07:51, Felix Fontein ***@***.***> a écrit :
@felixfontein commented on this pull request.
Besides that, looks good. (Still needs a changelog fragment though.)
In plugins/modules/source_control/gitlab/gitlab_group.py:
> @@ -197,23 +197,27 @@ def get_group_id(self, group):
def create_or_update_group(self, name, parent, options):
changed = False
+ # Same payload for update or create, only parent_id is needed on creation
+ payload = {
+ 'name': name,
+ 'path': options['path'],
So far path was only passed on creation, I would handle it the same as parent_id.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.
|
@fzarifian Just stumbled across this. Before switching over to curl requests. What's the status of this fix? |
Please note that in #5461 the collection repository was restructured to remove the directory tree in plugins/modules/, and the corresponding tree in tests/unit/plugins/modules/. Your PR modifies files in this directory structure, and unfortunately now has some conflicts, potentially because of this. Please rebase with the current |
needs_info |
@fzarifian This pullrequest is waiting for your response. Please respond or the pullrequest will be closed. |
@fzarifian You have not responded to information requests in this pullrequest so we will assume it no longer affects you. If you are still interested in this, please create a new pullrequest with the requested information. |
Docs Build 📝This PR is closed and any previously published docsite has been unpublished. |
SUMMARY
ISSUE TYPE
COMPONENT NAME
Fix #4577
ADDITIONAL INFORMATION