@@ -29,9 +29,40 @@ def __init__(self, stackql, vars, logger, stack_dir, stack_env):
2929 self .logger
3030 )
3131
32+ def process_custom_auth (
33+ self ,
34+ resource ,
35+ full_context
36+ ):
37+ custom_auth = resource .get ('auth' , {})
38+ env_vars = {}
39+
40+ if custom_auth :
41+ self .logger .info (f"🔑 custom auth is configured for [{ resource ['name' ]} ]" )
42+
43+ # Function to recursively search for keys of interest and populate env_vars
44+ def extract_env_vars (auth_config ):
45+ for key , value in auth_config .items ():
46+ if key in {"username_var" , "password_var" , "credentialsenvvar" , "keyIDenvvar" }:
47+ # Retrieve the variable's value from full_context
48+ env_var_name = value
49+ env_var_value = full_context .get (env_var_name )
50+ if env_var_value :
51+ env_vars [env_var_name ] = env_var_value
52+ elif isinstance (value , dict ):
53+ # Recursively check nested dictionaries
54+ extract_env_vars (value )
55+
56+ # Start extracting env vars from custom_auth
57+ extract_env_vars (custom_auth )
58+
59+ # If no custom auth, return None for both custom_auth and env_vars
60+ return (custom_auth if custom_auth else None , env_vars if env_vars else None )
61+
3262 def process_exports (
3363 self ,
3464 resource ,
65+ full_context ,
3566 exports_query ,
3667 exports_retries ,
3768 exports_retry_delay ,
@@ -66,13 +97,16 @@ def process_exports(
6697 else :
6798 self .logger .info (f"📦 exporting variables for [{ resource ['name' ]} ]..." )
6899 show_query (show_queries , exports_query , self .logger )
100+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
69101 exports = run_stackql_query (
70102 exports_query ,
71103 self .stackql ,
72104 True ,
73105 self .logger ,
74- exports_retries ,
75- exports_retry_delay
106+ custom_auth = custom_auth ,
107+ env_vars = env_vars ,
108+ retries = exports_retries ,
109+ delay = exports_retry_delay
76110 )
77111 self .logger .debug (f"exports: { exports } " )
78112
@@ -123,6 +157,7 @@ def check_if_resource_exists(
123157 self ,
124158 resource_exists ,
125159 resource ,
160+ full_context ,
126161 exists_query ,
127162 exists_retries ,
128163 exists_retry_delay ,
@@ -141,14 +176,17 @@ def check_if_resource_exists(
141176 else :
142177 self .logger .info (f"🔎 running { check_type } check for [{ resource ['name' ]} ]..." )
143178 show_query (show_queries , exists_query , self .logger )
179+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
144180 resource_exists = perform_retries (
145- resource ,
146- exists_query ,
147- exists_retries ,
148- exists_retry_delay ,
149- self .stackql ,
150- self .logger ,
151- delete_test
181+ resource ,
182+ exists_query ,
183+ exists_retries ,
184+ exists_retry_delay ,
185+ self .stackql ,
186+ self .logger ,
187+ delete_test ,
188+ custom_auth = custom_auth ,
189+ env_vars = env_vars
152190 )
153191 else :
154192 self .logger .info (f"{ check_type } check not configured for [{ resource ['name' ]} ]" )
@@ -160,6 +198,7 @@ def check_if_resource_is_correct_state(
160198 self ,
161199 is_correct_state ,
162200 resource ,
201+ full_context ,
163202 statecheck_query ,
164203 statecheck_retries ,
165204 statecheck_retry_delay ,
@@ -174,13 +213,17 @@ def check_if_resource_is_correct_state(
174213 else :
175214 self .logger .info (f"🔎 running state check for [{ resource ['name' ]} ]..." )
176215 show_query (show_queries , statecheck_query , self .logger )
216+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
177217 is_correct_state = perform_retries (
178- resource ,
179- statecheck_query ,
180- statecheck_retries ,
181- statecheck_retry_delay ,
182- self .stackql ,
183- self .logger
218+ resource ,
219+ statecheck_query ,
220+ statecheck_retries ,
221+ statecheck_retry_delay ,
222+ self .stackql ,
223+ self .logger ,
224+ False ,
225+ custom_auth = custom_auth ,
226+ env_vars = env_vars
184227 )
185228 if is_correct_state :
186229 self .logger .info (f"👍 [{ resource ['name' ]} ] is in the desired state" )
@@ -195,6 +238,7 @@ def create_resource(
195238 self ,
196239 is_created_or_updated ,
197240 resource ,
241+ full_context ,
198242 create_query ,
199243 create_retries ,
200244 create_retry_delay ,
@@ -209,12 +253,15 @@ def create_resource(
209253 else :
210254 self .logger .info (f"[{ resource ['name' ]} ] does not exist, creating 🚧..." )
211255 show_query (show_queries , create_query , self .logger )
256+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
212257 msg = run_stackql_command (
213- create_query ,
214- self .stackql ,
215- self .logger ,
216- ignore_errors = ignore_errors ,
217- retries = create_retries ,
258+ create_query ,
259+ self .stackql ,
260+ self .logger ,
261+ custom_auth = custom_auth ,
262+ env_vars = env_vars ,
263+ ignore_errors = ignore_errors ,
264+ retries = create_retries ,
218265 retry_delay = create_retry_delay
219266 )
220267 self .logger .debug (f"create response: { msg } " )
@@ -225,6 +272,7 @@ def update_resource(
225272 self ,
226273 is_created_or_updated ,
227274 resource ,
275+ full_context ,
228276 update_query ,
229277 update_retries ,
230278 update_retry_delay ,
@@ -238,12 +286,15 @@ def update_resource(
238286 else :
239287 self .logger .info (f"🔧 updating [{ resource ['name' ]} ]..." )
240288 show_query (show_queries , update_query , self .logger )
289+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
241290 msg = run_stackql_command (
242- update_query ,
243- self .stackql ,
244- self .logger ,
245- ignore_errors = ignore_errors ,
246- retries = update_retries ,
291+ update_query ,
292+ self .stackql ,
293+ self .logger ,
294+ custom_auth = custom_auth ,
295+ env_vars = env_vars ,
296+ ignore_errors = ignore_errors ,
297+ retries = update_retries ,
247298 retry_delay = update_retry_delay
248299 )
249300 self .logger .debug (f"update response: { msg } " )
@@ -255,6 +306,7 @@ def update_resource(
255306 def delete_resource (
256307 self ,
257308 resource ,
309+ full_context ,
258310 delete_query ,
259311 delete_retries ,
260312 delete_retry_delay ,
@@ -268,12 +320,15 @@ def delete_resource(
268320 else :
269321 self .logger .info (f"🚧 deleting [{ resource ['name' ]} ]..." )
270322 show_query (show_queries , delete_query , self .logger )
323+ custom_auth , env_vars = self .process_custom_auth (resource , full_context )
271324 msg = run_stackql_command (
272- delete_query ,
273- self .stackql ,
274- self .logger ,
275- ignore_errors = ignore_errors ,
276- retries = delete_retries ,
325+ delete_query ,
326+ self .stackql ,
327+ self .logger ,
328+ custom_auth = custom_auth ,
329+ env_vars = env_vars ,
330+ ignore_errors = ignore_errors ,
331+ retries = delete_retries ,
277332 retry_delay = delete_retry_delay
278333 )
279334 self .logger .debug (f"delete response: { msg } " )
0 commit comments