1- import requests
2- import json
3- import bisect
41import copy
52
63from ansible_collections .nhsd .apigee .plugins .module_utils .models .ansible .add_jwks_resource_url import (
1310from ansible_collections .nhsd .apigee .plugins .module_utils import constants
1411
1512ATTRIBUTE_NAME = "jwks-resource-url"
16- DEVELOPER_DETAILS = "APIGEE_DEVELOPER_DETAILS"
1713
1814
1915class ActionModule (ApigeeAction ):
@@ -39,49 +35,24 @@ def run(self, tmp=None, task_vars=None):
3935 after ["attributes" ].append (jwks_attribute )
4036 after ["attributes" ] = sorted (after ["attributes" ], key = lambda attr : attr ["name" ])
4137
42- developer_details = task_vars .get (DEVELOPER_DETAILS )
43- if not developer_details :
44- developer_details = []
45- params = {"expand" : True }
46- url = (
47- constants .APIGEE_BASE_URL
48- + f"organizations/{ args .organization } /developers"
49- )
50- while True :
51- resp = utils .get (url , args .access_token , params = params )
52- if resp .get ("failed" ):
53- return resp
54- devs = resp ["response" ]["body" ]["developer" ]
55- developer_details .extend (devs )
56- if len (devs ) == 1000 :
57- # last developer's ID as startKey will be included
58- # in next request, so pop now to de-dupe.
59- last_dev = developer_details .pop ()
60- params ["startKey" ] = last_dev ["developerId" ]
61- else :
62- break
63-
64- try :
65- developer_id = args ._app_data ["developerId" ]
66- developer_ids = [d ["developerId" ] for d in developer_details ]
67- i = bisect .bisect_left (developer_ids , developer_id )
68- if i == len (developer_details ):
69- raise RuntimeError (f"Unable to find developer with id { developer_id } " )
70- except RuntimeError as e :
71- return {"failed" : True , "error" : str (e )}
72-
73- developer = developer_details [i ]
74-
7538 delta = utils .delta (before , after )
7639 result = {
7740 "changed" : bool (delta ),
78- "app" : after ,
79- "developer" : developer ,
80- "ansible_facts" : {DEVELOPER_DETAILS : developer_details },
41+ "app" : after
8142 }
8243
44+ company_exists = "companyName" in args ._app_data .keys ()
45+ developer_exists = "developerId" in args ._app_data .keys ()
46+ if developer_exists and not company_exists :
47+ owner = args ._app_data ["developerId" ]
48+ elif company_exists and not developer_exists :
49+ owner = args ._app_data ["companyName" ]
50+ else :
51+ return {"failed" : True , "error" : f"Invalid owner for app { args ._app_data ['appId' ]} " }
52+
53+ owner_endpoint = "companies" if company_exists else "developers"
8354 app_name = args ._app_data ["name" ]
84- app_path = f"organizations/{ args .organization } /developers/ { developer [ 'email' ] } /apps/{ app_name } /attributes"
55+ app_path = f"organizations/{ args .organization } /{ owner_endpoint } / { owner } /apps/{ app_name } /attributes"
8556
8657 if diff_mode :
8758 result ["diff" ] = [
0 commit comments