mirror of
https://github.com/ansible/awx.git
synced 2026-02-26 07:26:03 -03:30
Merge pull request #11845 from jbradberry/awxkit-import-role-precedence
Expand out the early membership role assignment
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
from collections import defaultdict
|
||||||
import itertools
|
import itertools
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@@ -204,7 +205,7 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
# Import methods
|
# 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}
|
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]
|
data_pages = [getattr(self, resource)._create().__item_class__ for resource in EXPORTABLE_RESOURCES]
|
||||||
|
|
||||||
@@ -256,7 +257,12 @@ class ApiV2(base.Base):
|
|||||||
if not S:
|
if not S:
|
||||||
continue
|
continue
|
||||||
if name == 'roles':
|
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:
|
else:
|
||||||
self._related.append((_page, name, S))
|
self._related.append((_page, name, S))
|
||||||
|
|
||||||
@@ -278,17 +284,17 @@ class ApiV2(base.Base):
|
|||||||
log.debug("post_data: %r", {'id': role_page['id']})
|
log.debug("post_data: %r", {'id': role_page['id']})
|
||||||
|
|
||||||
def _assign_membership(self):
|
def _assign_membership(self):
|
||||||
for _page, roles in self._roles:
|
for _page, indexed_roles in self._roles:
|
||||||
role_endpoint = _page.json['related']['roles']
|
role_endpoint = _page.json['related']['roles']
|
||||||
for role in roles:
|
for content_type in ('organization', 'team'):
|
||||||
if role['name'] == 'Member':
|
for role in indexed_roles.get(content_type, []):
|
||||||
self._assign_role(role_endpoint, role)
|
self._assign_role(role_endpoint, role)
|
||||||
|
|
||||||
def _assign_roles(self):
|
def _assign_roles(self):
|
||||||
for _page, roles in self._roles:
|
for _page, indexed_roles in self._roles:
|
||||||
role_endpoint = _page.json['related']['roles']
|
role_endpoint = _page.json['related']['roles']
|
||||||
for role in roles:
|
for content_type in set(indexed_roles) - {'organization', 'team'}:
|
||||||
if role['name'] != 'Member':
|
for role in indexed_roles.get(content_type, []):
|
||||||
self._assign_role(role_endpoint, role)
|
self._assign_role(role_endpoint, role)
|
||||||
|
|
||||||
def _assign_related(self):
|
def _assign_related(self):
|
||||||
@@ -330,7 +336,7 @@ class ApiV2(base.Base):
|
|||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
|
|
||||||
for resource in self._dependent_resources(data):
|
for resource in self._dependent_resources():
|
||||||
endpoint = getattr(self, resource)
|
endpoint = getattr(self, resource)
|
||||||
# Load up existing objects, so that we can try to update or link to them
|
# Load up existing objects, so that we can try to update or link to them
|
||||||
self._cache.get_page(endpoint)
|
self._cache.get_page(endpoint)
|
||||||
|
|||||||
Reference in New Issue
Block a user