launch-scripts/parsePolicy.py (26 lines of code) (raw):
import json
import sys
"""
Script accepts three parameters : input file(json formatted) , output file , role, user that needs to be added the role
If the json input passed has an entry for role:"roles/<ROLE>" and the user exists as its member, no action is taken
If the json input passed has an entry for role:"roles/<ROLE>" and the user doesn't exists as its member, it is added to members list
If the json input passed has no entry for role:"roles/<ROLE>", an entry is added with user as member and role as "roles/<ROLE>
"""
input = sys.argv[1]
output = sys.argv[2]
role = sys.argv[3]
users = sys.argv[4].split(',')
users = [ "serviceAccount:" + user for user in users ]
flag=0
with open(input) as f:
input = json.load(f)
for user in users:
for k,v in input.items():
if k == "bindings":
for list_item_dict in v:
if 'role' in list_item_dict and list_item_dict['role']=="roles/" + role :
if user in list_item_dict['members']:
flag = 1 #no change needed as the user already exists as roles/<ROLE>
else:
list_item_dict['members'].append(user)
flag = 1 #added the user as roles/<ROLE>
if flag == 0: # No entry was found for roles/<ROLE>
#print(input['bindings'])
for k,v in input.items():
if k == "bindings":
v.append({"members":[user],"role":"roles/" + role })
with open(output,'w') as f:
json.dump(input,f,indent=2)