1313from typing import Any
1414
1515import boto3
16+ import requests
1617import yaml
1718from boto3 import session
1819from botocore .exceptions import ClientError
@@ -146,7 +147,9 @@ def get_content(self, secret):
146147 :param input.SecretDef secret:
147148 :return:
148149 """
149- params = {"SecretId" : expandvars (secret .secret_id )}
150+ secret_id = expandvars (secret .secret_id )
151+ params = {"SecretId" : secret_id }
152+ LOG .debug (f"Retrieving secretsmanager://{ secret_id } " )
150153 if secret .version_id :
151154 params ["VersionId" ] = secret .version_id
152155 if secret .version_stage :
@@ -194,7 +197,7 @@ def handle_sources(self, iam_override=None):
194197 :return:
195198 """
196199 if self .source .url :
197- pass
200+ self . handle_http_content ()
198201 elif self .source .ssm :
199202 self .handle_ssm_source (iam_override )
200203 elif self .source .s3 :
@@ -217,6 +220,7 @@ def handle_ssm_source(self, iam_override=None):
217220 :return:
218221 """
219222 parameter_name = expandvars (self .source .ssm .parameter_name )
223+ LOG .debug (f"Retrieving ssm://{ parameter_name } " )
220224 if self .source .ssm .iam_override :
221225 fetcher = SsmFetcher (iam_config_object = self .source .ssm .iam_override )
222226 else :
@@ -232,6 +236,7 @@ def handle_s3_source(self, iam_override=None):
232236 """
233237 bucket_name = expandvars (self .source .s3 .bucket_name )
234238 key = expandvars (self .source .s3 .key )
239+ LOG .debug (f"Retrieving s3://{ bucket_name } /{ key } " )
235240 if self .source .s3 .iam_override :
236241 fetcher = S3Fetcher (iam_config_object = self .source .s3 .iam_override )
237242 else :
@@ -251,10 +256,26 @@ def handle_secret_source(self, iam_override=None):
251256 fetcher = SecretFetcher (iam_config_object = iam_override )
252257 self .content = fetcher .get_content (self .source .secret )
253258
259+ def handle_http_content (self ):
260+ """
261+ Fetches the content from a provided URI
262+
263+ """
264+ if not self .source .url .username or not self .source .url .password :
265+ req = requests .get (self .source .url .url )
266+ else :
267+ req = requests .get (self .source .url .url , auth = (self .source .url .username , self .source .url .password ))
268+ try :
269+ req .raise_for_status ()
270+ self .write_content (as_bytes = True , bytes_content = req .content )
271+ except requests .exceptions .HTTPError as e :
272+ LOG .error (e )
273+ raise
274+
254275 def set_unix_settings (self ):
255276 """
256277 Applies UNIX settings to given file
257- :return:
278+
258279 """
259280 cmd = ["chmod" , self .mode , self .path ]
260281 try :
@@ -277,7 +298,7 @@ def set_unix_settings(self):
277298 else :
278299 raise
279300
280- def write_content (self , decode = False ):
301+ def write_content (self , decode = False , as_bytes = False , bytes_content = None ):
281302 if isinstance (self .content , str ):
282303 if decode and self .encoding == input .Encoding ["base64" ]:
283304 with open (self .path , "wb" ) as file_fd :
@@ -288,6 +309,9 @@ def write_content(self, decode=False):
288309 elif isinstance (self .content , StreamingBody ):
289310 with open (self .path , "wb" ) as file_fd :
290311 file_fd .write (self .content .read ())
312+ elif as_bytes and bytes_content :
313+ with open (self .path , "wb" ) as file_fd :
314+ file_fd .write (bytes_content )
291315
292316
293317def init_config (
0 commit comments