Skip to content

Commit 72e9401

Browse files
authored
Merge pull request #46 from draios/team-user-membership-rfc
Adapt user-team management code to use new REST API format
2 parents 988a44e + c4079cb commit 72e9401

File tree

2 files changed

+48
-31
lines changed

2 files changed

+48
-31
lines changed

examples/user_team_mgmt.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,18 @@
4848
print 'Team fetch succeeded'
4949

5050
print 'Now trying to edit team ', team_name
51-
res = sdclient.edit_team(team_name, description='Nextgen2', users=['admin@draios.com', 'john-doe@sysdig.com'])
51+
memberships = {
52+
'admin@draios.com': 'ROLE_TEAM_MANAGER',
53+
'john-doe@sysdig.com': 'ROLE_TEAM_READ'
54+
}
55+
res = sdclient.edit_team(team_name, description='Nextgen2', memberships=memberships)
5256
if res[0] == False:
5357
print 'Could not edit team ', res[1]
5458
else:
5559
print 'Edited team to change description and add users'
5660

5761
print 'Now trying to edit user ', user_name
58-
res = sdclient.edit_user(user_name, firstName='Just', lastName='Edited3', teams=[team_name], roles=['ROLE_CUSTOMER', 'ROLE_USER'])
62+
res = sdclient.edit_user(user_name, firstName='Just', lastName='Edited3', systemRole='ROLE_CUSTOMER')
5963
if res[0] == False:
6064
print 'Could not edit user: ', res[1]
6165
else:

sdcclient/_client.py

+42-29
Original file line numberDiff line numberDiff line change
@@ -600,26 +600,18 @@ def get_users(self):
600600
return [False, self.lasterr]
601601
return [True, res.json()['users']]
602602

603-
def edit_user(self, user_email, firstName=None, lastName=None, roles=None, teams=None):
603+
def edit_user(self, user_email, firstName=None, lastName=None, systemRole=None):
604604
res = self.get_user(user_email)
605605
if res[0] == False:
606606
return res
607607
user = res[1]
608608
reqbody = {
609609
'agentInstallParams': user['agentInstallParams'],
610-
'roles': roles if roles else user['roles'],
610+
'systemRole': systemRole if systemRole else user['systemRole'],
611611
'username': user_email,
612612
'version': user['version']
613613
}
614614

615-
if teams == None:
616-
reqbody['teams'] = user['teams']
617-
else:
618-
t = self.get_team_ids(teams)
619-
if t[0] == False:
620-
return [False, 'Could not get team IDs']
621-
reqbody['teams'] = t[1]
622-
623615
if firstName == None:
624616
reqbody['firstName'] = user['firstName'] if 'firstName' in user.keys() else ''
625617
else:
@@ -679,21 +671,29 @@ def get_team_ids(self, teams):
679671
u = filter(lambda x: x['name'] in teams, res.json()['teams'])
680672
return [True, map(lambda x: x['id'], u)]
681673

682-
def get_user_ids(self, users):
674+
def _get_user_id_dict(self, users):
683675
res = requests.get(self.url + '/api/users', headers=self.hdrs, verify=self.ssl_verify)
684676
if not self._checkResponse(res):
685677
return [False, self.lasterr]
686678
u = filter(lambda x: x['username'] in users, res.json()['users'])
687-
return [True, map(lambda x: x['id'], u)]
679+
return [True, dict((user['username'], user['id']) for user in u)]
680+
681+
def get_user_ids(self, users):
682+
res = self._get_user_id_dict(users)
683+
if res[0] == False:
684+
return res
685+
else:
686+
return [True, res[1].values()]
688687

689-
def create_team(self, name, users=[], filter='', description='', show='host', theme='#7BB0B2',
688+
def create_team(self, name, memberships=None, filter='', description='', show='host', theme='#7BB0B2',
690689
perm_capture=False, perm_custom_events=False, perm_aws_data=False):
691-
'''**Description**
690+
'''
691+
**Description**
692692
Creates a new team
693693
694694
**Arguments**
695695
- **name**: the name of the team to create.
696-
- **users**: list of user names to add to the team.
696+
- **memberships**: dictionary of (user-name, team-role) pairs that should describe new memberships of the team.
697697
- **filter**: the scope that this team is able to access within Sysdig Monitor.
698698
- **description**: describes the team that will be created.
699699
- **show**: possible values are *host*, *container*.
@@ -719,11 +719,17 @@ def create_team(self, name, users=[], filter='', description='', show='host', th
719719
}
720720

721721
# Map user-names to IDs
722-
if users != None and len(users) != 0:
723-
res = self.get_user_ids(users)
722+
if memberships != None and len(memberships) != 0:
723+
res = self._get_user_id_dict(memberships.keys())
724724
if res[0] == False:
725-
return [False, 'Could not convert user names to IDs']
726-
reqbody['users'] = res[1]
725+
return [False, 'Could not fetch IDs for user names']
726+
reqbody['userRoles'] = [
727+
{
728+
'userId': user_id,
729+
'role': memberships[user_name]
730+
}
731+
for (user_name, user_id) in res[1].iteritems()
732+
]
727733
else:
728734
reqbody['users'] = []
729735

@@ -735,14 +741,15 @@ def create_team(self, name, users=[], filter='', description='', show='host', th
735741
return [False, self.lasterr]
736742
return [True, res.json()]
737743

738-
def edit_team(self, name, users=None, filter=None, description=None, show=None, theme=None,
744+
def edit_team(self, name, memberships=None, filter=None, description=None, show=None, theme=None,
739745
perm_capture=None, perm_custom_events=None, perm_aws_data=None):
740-
'''**Description**
746+
'''
747+
**Description**
741748
Edits an existing team. All arguments are optional. Team settings for any arguments unspecified will remain at their current settings.
742749
743750
**Arguments**
744751
- **name**: the name of the team to edit.
745-
- **users**: list of user names that should now be members of the team.
752+
- **memberships**: dictionary of (user-name, team-role) pairs that should describe new memberships of the team.
746753
- **filter**: the scope that this team is able to access within Sysdig Monitor.
747754
- **description**: describes the team that will be created.
748755
- **show**: possible values are *host*, *container*.
@@ -774,16 +781,22 @@ def edit_team(self, name, users=None, filter=None, description=None, show=None,
774781
'version': t['version']
775782
}
776783

777-
# Handling for users to map user-names to IDs
778-
if users != None:
779-
res = self.get_user_ids(users)
784+
# Handling for users to map (user-name, team-role) pairs to memberships
785+
if memberships != None:
786+
res = self._get_user_id_dict(memberships.keys())
780787
if res[0] == False:
781788
return [False, 'Could not convert user names to IDs']
782-
reqbody['users'] = res[1]
783-
elif 'users' in t.keys():
784-
reqbody['users'] = t['users']
789+
reqbody['userRoles'] = [
790+
{
791+
'userId': user_id,
792+
'role': memberships[user_name]
793+
}
794+
for (user_name, user_id) in res[1].iteritems()
795+
]
796+
elif 'userRoles' in t.keys():
797+
reqbody['userRoles'] = t['userRoles']
785798
else:
786-
reqbody['users'] = []
799+
reqbody['userRoles'] = []
787800

788801
# Special handling for filters since we don't support blank filters
789802
if filter != None:

0 commit comments

Comments
 (0)