Merge pull request #11845 from jbradberry/awxkit-import-role-precedence

Expand out the early membership role assignment
This commit is contained in:
Jeff Bradberry 2022-03-07 11:21:48 -05:00 committed by GitHub
commit 32cc8e1a63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,3 +1,4 @@
from collections import defaultdict
import itertools
import logging
@ -204,7 +205,7 @@ class ApiV2(base.Base):
# Import methods
def _dependent_resources(self, data):
def _dependent_resources(self):
page_resource = {getattr(self, resource)._create().__item_class__: resource for resource in self.json}
data_pages = [getattr(self, resource)._create().__item_class__ for resource in EXPORTABLE_RESOURCES]
@ -256,7 +257,12 @@ class ApiV2(base.Base):
if not S:
continue
if name == 'roles':
self._roles.append((_page, S))
indexed_roles = defaultdict(list)
for role in S:
if 'content_object' not in role:
continue
indexed_roles[role['content_object']['type']].append(role)
self._roles.append((_page, indexed_roles))
else:
self._related.append((_page, name, S))
@ -278,17 +284,17 @@ class ApiV2(base.Base):
log.debug("post_data: %r", {'id': role_page['id']})
def _assign_membership(self):
for _page, roles in self._roles:
for _page, indexed_roles in self._roles:
role_endpoint = _page.json['related']['roles']
for role in roles:
if role['name'] == 'Member':
for content_type in ('organization', 'team'):
for role in indexed_roles.get(content_type, []):
self._assign_role(role_endpoint, role)
def _assign_roles(self):
for _page, roles in self._roles:
for _page, indexed_roles in self._roles:
role_endpoint = _page.json['related']['roles']
for role in roles:
if role['name'] != 'Member':
for content_type in set(indexed_roles) - {'organization', 'team'}:
for role in indexed_roles.get(content_type, []):
self._assign_role(role_endpoint, role)
def _assign_related(self):
@ -330,7 +336,7 @@ class ApiV2(base.Base):
changed = False
for resource in self._dependent_resources(data):
for resource in self._dependent_resources():
endpoint = getattr(self, resource)
# Load up existing objects, so that we can try to update or link to them
self._cache.get_page(endpoint)