Skip to content

Commit 47ee019

Browse files
committed
cmd specific auth
1 parent d50e1c7 commit 47ee019

File tree

5 files changed

+131
-68
lines changed

5 files changed

+131
-68
lines changed

stackql_deploy/cmd/base.py

Lines changed: 85 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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}")

stackql_deploy/cmd/build.py

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,13 @@ def run(self, dry_run, show_queries, on_failure):
117117
# run exists check (check if resource exists)
118118
#
119119
resource_exists = self.check_if_resource_exists(
120-
resource_exists,
121-
resource,
122-
exists_query,
123-
exists_retries,
124-
exists_retry_delay,
125-
dry_run,
120+
resource_exists,
121+
resource,
122+
full_context,
123+
exists_query,
124+
exists_retries,
125+
exists_retry_delay,
126+
dry_run,
126127
show_queries
127128
)
128129

@@ -131,12 +132,13 @@ def run(self, dry_run, show_queries, on_failure):
131132
#
132133
if resource_exists:
133134
is_correct_state = self.check_if_resource_is_correct_state(
134-
is_correct_state,
135-
resource,
136-
statecheck_query,
137-
statecheck_retries,
138-
statecheck_retry_delay,
139-
dry_run,
135+
is_correct_state,
136+
resource,
137+
full_context,
138+
statecheck_query,
139+
statecheck_retries,
140+
statecheck_retry_delay,
141+
dry_run,
140142
show_queries
141143
)
142144

@@ -150,13 +152,14 @@ def run(self, dry_run, show_queries, on_failure):
150152
is_created_or_updated = False
151153
if not resource_exists:
152154
is_created_or_updated = self.create_resource(
153-
is_created_or_updated,
154-
resource,
155-
create_query,
156-
create_retries,
157-
create_retry_delay,
158-
dry_run,
159-
show_queries,
155+
is_created_or_updated,
156+
resource,
157+
full_context,
158+
create_query,
159+
create_retries,
160+
create_retry_delay,
161+
dry_run,
162+
show_queries,
160163
ignore_errors
161164
)
162165

@@ -165,13 +168,14 @@ def run(self, dry_run, show_queries, on_failure):
165168
#
166169
if resource_exists and not is_correct_state:
167170
is_created_or_updated = self.update_resource(
168-
is_created_or_updated,
169-
resource,
170-
update_query,
171-
update_retries,
172-
update_retry_delay,
173-
dry_run,
174-
show_queries,
171+
is_created_or_updated,
172+
resource,
173+
full_context,
174+
update_query,
175+
update_retries,
176+
update_retry_delay,
177+
dry_run,
178+
show_queries,
175179
ignore_errors
176180
)
177181

@@ -182,6 +186,7 @@ def run(self, dry_run, show_queries, on_failure):
182186
is_correct_state = self.check_if_resource_is_correct_state(
183187
is_correct_state,
184188
resource,
189+
full_context,
185190
statecheck_query,
186191
statecheck_retries,
187192
statecheck_retry_delay,
@@ -205,6 +210,7 @@ def run(self, dry_run, show_queries, on_failure):
205210
if exports_query:
206211
self.process_exports(
207212
resource,
213+
full_context,
208214
exports_query,
209215
exports_retries,
210216
exports_retry_delay,

stackql_deploy/cmd/teardown.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def collect_exports(self, show_queries, dry_run):
2828
if exports_query:
2929
self.process_exports(
3030
resource,
31+
full_context,
3132
exports_query,
3233
exports_retries,
3334
exports_retry_delay,
@@ -107,15 +108,15 @@ def run(self, dry_run, show_queries, on_failure):
107108
ignore_errors = True # multi resources ignore errors on create or update
108109
elif type == 'resource':
109110
resource_exists = self.check_if_resource_exists(
110-
resource_exists, resource, exists_query, exists_retries, exists_retry_delay, dry_run, show_queries
111+
resource_exists, resource, full_context, exists_query, exists_retries, exists_retry_delay, dry_run, show_queries
111112
)
112113

113114
#
114115
# delete
115116
#
116117
if resource_exists:
117118
self.delete_resource(
118-
resource, delete_query, delete_retries, delete_retry_delay, dry_run, show_queries, ignore_errors
119+
resource, full_context, delete_query, delete_retries, delete_retry_delay, dry_run, show_queries, ignore_errors
119120
)
120121
else:
121122
self.logger.info(f"resource [{resource['name']}] does not exist, skipping delete")
@@ -127,6 +128,7 @@ def run(self, dry_run, show_queries, on_failure):
127128
resource_deleted = self.check_if_resource_exists(
128129
False,
129130
resource,
131+
full_context,
130132
exists_query,
131133
postdelete_exists_retries,
132134
postdelete_exists_retry_delay,

stackql_deploy/cmd/test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def run(self, dry_run, show_queries, on_failure):
4848
if type in ('resource', 'multi'):
4949

5050
is_correct_state = self.check_if_resource_is_correct_state(
51-
False, resource, statecheck_query, statecheck_retries, statecheck_retry_delay, dry_run, show_queries
51+
False, resource, full_context, statecheck_query, statecheck_retries, statecheck_retry_delay, dry_run, show_queries
5252
)
5353

5454
if not is_correct_state and not dry_run:
@@ -59,7 +59,7 @@ def run(self, dry_run, show_queries, on_failure):
5959
#
6060
if exports_query:
6161
self.process_exports(
62-
resource, exports_query, exports_retries, exports_retry_delay, dry_run, show_queries
62+
resource, full_context, exports_query, exports_retries, exports_retry_delay, dry_run, show_queries
6363
)
6464

6565
if type == 'resource' and not dry_run:

0 commit comments

Comments
 (0)