mirror of
https://github.com/ansible/awx.git
synced 2026-02-01 01:28:09 -03:30
added roles support for organization_factory
This commit is contained in:
@@ -12,6 +12,7 @@ from awx.main.models import (
|
||||
Credential,
|
||||
Inventory,
|
||||
Label,
|
||||
Role,
|
||||
)
|
||||
|
||||
|
||||
@@ -112,7 +113,7 @@ class _Mapped(object):
|
||||
def __init__(self, d):
|
||||
self.d = d
|
||||
for k,v in d.items():
|
||||
setattr(self, k, v)
|
||||
setattr(self, k.replace(' ','_'), v)
|
||||
|
||||
def all(self):
|
||||
return self.d.values()
|
||||
@@ -158,7 +159,7 @@ def create_job_template(name, **kwargs):
|
||||
job_type=job_type)
|
||||
|
||||
def create_organization(name, **kwargs):
|
||||
Objects = namedtuple("Objects", "organization,teams,users,superusers,projects,labels")
|
||||
Objects = namedtuple("Objects", "organization,teams,users,superusers,projects,labels,roles")
|
||||
|
||||
org = mk_organization(name, '%s-desc'.format(name))
|
||||
|
||||
@@ -167,6 +168,7 @@ def create_organization(name, **kwargs):
|
||||
teams = {}
|
||||
projects = {}
|
||||
labels = {}
|
||||
roles = {}
|
||||
persisted = kwargs.get('persisted', True)
|
||||
|
||||
if 'teams' in kwargs:
|
||||
@@ -216,11 +218,47 @@ def create_organization(name, **kwargs):
|
||||
else:
|
||||
labels[l] = mk_label(l, org, persisted=persisted)
|
||||
|
||||
if 'roles' in kwargs:
|
||||
# refactor this .. alot
|
||||
if not persisted:
|
||||
raise RuntimeError('roles can not be used when persisted=False')
|
||||
|
||||
all_objects = {}
|
||||
for d in [superusers, users, teams, projects, labels]:
|
||||
for k,v in d.iteritems():
|
||||
if all_objects.get(k) is not None:
|
||||
raise KeyError('object names must be unique when using roles \
|
||||
{} key already exists with value {}'.format(k,v))
|
||||
all_objects[k] = v
|
||||
|
||||
for role in kwargs.get('roles'):
|
||||
obj_role, sep, member_role = role.partition(':')
|
||||
if not member_role:
|
||||
raise RuntimeError('you must an assignment role, got None')
|
||||
|
||||
obj_str, o_role_str = obj_role.split('.')
|
||||
member_str, m_sep, m_role_str = member_role.partition('.')
|
||||
|
||||
obj = all_objects[obj_str]
|
||||
obj_role = getattr(obj, o_role_str)
|
||||
|
||||
member = all_objects[member_str]
|
||||
if m_role_str:
|
||||
if hasattr(member, m_role_str):
|
||||
member_role = getattr(member, m_role_str)
|
||||
obj_role.parents.add(member_role)
|
||||
else:
|
||||
raise RuntimeError('unable to find {} role for {}'.format(m_role_str, member_str))
|
||||
else:
|
||||
if type(member) is User:
|
||||
obj_role.members.add(member)
|
||||
else:
|
||||
raise RuntimeError('unable to add non-user {} for members list of {}'.format(member_str, obj_str))
|
||||
|
||||
return Objects(organization=org,
|
||||
superusers=_Mapped(superusers),
|
||||
users=_Mapped(users),
|
||||
teams=_Mapped(teams),
|
||||
projects=_Mapped(projects),
|
||||
labels=_Mapped(labels))
|
||||
|
||||
|
||||
labels=_Mapped(labels),
|
||||
roles=_Mapped(roles))
|
||||
|
||||
Reference in New Issue
Block a user