Skip to content

Commit 9226981

Browse files
DSdatsmegguuss
authored andcommitted
IAM: added snippet for remove member (#2165)
* added remove member sample * WPI test cases * Add IAM remove user snippet
1 parent 5f4a9c4 commit 9226981

File tree

4 files changed

+55
-7
lines changed

4 files changed

+55
-7
lines changed

iam/api-client/access.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,17 @@ def modify_policy_add_role(policy, role, member):
6969
# [END iam_modify_policy_add_role]
7070

7171

72+
# [START iam_modify_policy_remove_member]
73+
def modify_policy_remove_member(policy, role, member):
74+
"""Removes a member from a role binding."""
75+
binding = next(b for b in policy['bindings'] if b['role'] == role)
76+
if 'members' in binding and member in binding['members']:
77+
binding['members'].remove(member)
78+
print(binding)
79+
return policy
80+
# [END iam_modify_policy_remove_member]
81+
82+
7283
# [START iam_set_policy]
7384
def set_policy(project_id, policy):
7485
"""Sets IAM policy for a project."""
@@ -116,6 +127,13 @@ def main():
116127
modify_role_parser.add_argument('role')
117128
modify_role_parser.add_argument('member')
118129

130+
# Modify: remove member
131+
modify_member_parser = subparsers.add_parser(
132+
'modify_member', help=get_policy.__doc__)
133+
modify_member_parser.add_argument('project_id')
134+
modify_member_parser.add_argument('role')
135+
modify_member_parser.add_argument('member')
136+
119137
# Set
120138
set_parser = subparsers.add_parser(
121139
'set', help=set_policy.__doc__)
@@ -130,6 +148,8 @@ def main():
130148
set_policy(args.project_id, args.policy)
131149
elif args.command == 'add_member':
132150
modify_policy_add_member(args.policy, args.role, args.member)
151+
elif args.command == 'remove_member':
152+
modify_policy_remove_member(args.policy, args.role, args.member)
133153
elif args.command == 'add_binding':
134154
modify_policy_add_role(args.policy, args.role, args.member)
135155

iam/api-client/access_test.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,43 @@
1313
# limitations under the License.
1414

1515
import os
16+
import random
1617

1718
import access
19+
import service_accounts
1820

1921

2022
def test_access(capsys):
21-
project = os.environ['GCLOUD_PROJECT']
23+
# Setting up variables for testing
24+
project_id = os.environ['GCLOUD_PROJECT']
2225

23-
policy = access.get_policy(project)
26+
# specifying a sample role to be assigned
27+
gcp_role = 'roles/owner'
28+
29+
# section to create service account to test policy updates.
30+
rand = str(random.randint(0, 1000))
31+
name = 'python-test-' + rand
32+
email = name + '@' + project_id + '.iam.gserviceaccount.com'
33+
member = 'serviceAccount:' + email
34+
service_accounts.create_service_account(
35+
project_id, name, 'Py Test Account')
36+
37+
policy = access.get_policy(project_id)
38+
out, _ = capsys.readouterr()
39+
assert u'etag' in out
40+
41+
policy = access.modify_policy_add_role(policy, gcp_role, member)
2442
out, _ = capsys.readouterr()
25-
assert 'etag' in out
43+
assert u'etag' in out
2644

27-
policy = access.set_policy(project, policy)
45+
policy = access.modify_policy_remove_member(policy, gcp_role, member)
2846
out, _ = capsys.readouterr()
29-
assert 'etag' in out
47+
assert 'iam.gserviceaccount.com' in out
48+
49+
policy = access.set_policy(project_id, policy)
50+
out, _ = capsys.readouterr()
51+
assert u'etag' in out
52+
53+
# deleting the service account created above
54+
service_accounts.delete_service_account(
55+
email)

iam/api-client/grantable_roles.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ def view_grantable_roles(full_resource_name):
3434
}).execute()
3535

3636
for role in roles['roles']:
37-
print('Title: ' + role['title'])
37+
if 'title' in role:
38+
print('Title: ' + role['title'])
3839
print('Name: ' + role['name'])
3940
print('Description: ' + role['description'])
4041
print(' ')

iam/api-client/quickstart.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ def quickstart():
4141
for role in roles:
4242
print('Title: ' + role['title'])
4343
print('Name: ' + role['name'])
44-
print('Description: ' + role['description'])
44+
if 'description' in role:
45+
print('Description: ' + role['description'])
4546
print('')
4647
# [END iam_quickstart]
4748

0 commit comments

Comments
 (0)