43
43
from pathlib import Path
44
44
from typing import List
45
45
46
- __version__ = '1.8.2 '
46
+ __version__ = '1.8.3 '
47
47
48
48
_LOGGER = logging .getLogger ('tftest' )
49
49
@@ -107,8 +107,7 @@ def parse_args(init_vars=None, tf_vars=None, targets=None, **kw):
107
107
]
108
108
for arg in _TG_KV_ARGS :
109
109
if kw .get (f"tg_{ arg } " ):
110
- cmd_args += [f'--terragrunt-{ arg .replace ("_" , "-" )} ' ,
111
- kw [f"tg_{ arg } " ]]
110
+ cmd_args += [f'--terragrunt-{ arg .replace ("_" , "-" )} ' , kw [f"tg_{ arg } " ]]
112
111
if kw .get ('tg_parallelism' ):
113
112
cmd_args .append (f'--terragrunt-parallelism { kw ["tg_parallelism" ]} ' )
114
113
if isinstance (kw .get ('tg_override_attr' ), dict ):
@@ -149,9 +148,10 @@ def parse_args(init_vars=None, tf_vars=None, targets=None, **kw):
149
148
cmd_args += list (
150
149
itertools .chain .from_iterable (
151
150
("-var" ,
152
- "{}={}" .format (k , json .dumps (v ) if isinstance (v , (dict , list )) else v ))
153
- for k , v in tf_vars .items ()
154
- ))
151
+ "{}={}" .format (k ,
152
+ json .dumps (v ) if isinstance (v , (dict ,
153
+ list )) else v ))
154
+ for k , v in tf_vars .items ()))
155
155
if targets :
156
156
cmd_args += [("-target={}" .format (t )) for t in targets ]
157
157
if kw .get ('tf_var_file' ):
@@ -329,8 +329,7 @@ def __init__(self, tfdir, basedir=None, binary='terraform', env=None,
329
329
self .env = os .environ .copy ()
330
330
self .tg_run_all = False
331
331
self ._plan_formatter = lambda out : TerraformPlanOutput (json .loads (out ))
332
- self ._output_formatter = lambda out : TerraformValueDict (
333
- json .loads (out ))
332
+ self ._output_formatter = lambda out : TerraformValueDict (json .loads (out ))
334
333
self .enable_cache = enable_cache
335
334
if not cache_dir :
336
335
self .cache_dir = Path (os .path .dirname (
@@ -365,13 +364,11 @@ def remove_readonly(func, path, excinfo):
365
364
for tg_dir in glob .glob (path , recursive = True ):
366
365
if os .path .isdir (tg_dir ):
367
366
shutil .rmtree (tg_dir , onerror = remove_readonly )
368
- _LOGGER .debug (
369
- 'Restoring original TF files after prevent destroy changes' )
367
+ _LOGGER .debug ('Restoring original TF files after prevent destroy changes' )
370
368
if restore_files :
371
369
for bkp_file in Path (tfdir ).rglob ('*.bkp' ):
372
370
try :
373
- shutil .copy (str (bkp_file ),
374
- f'{ str (bkp_file ).strip (".bkp" )} ' )
371
+ shutil .copy (str (bkp_file ), f'{ str (bkp_file ).strip (".bkp" )} ' )
375
372
except (IOError , OSError ):
376
373
_LOGGER .exception (
377
374
f'Unable to restore terraform file { bkp_file .resolve ()} ' )
@@ -384,12 +381,12 @@ def _abspath(self, path):
384
381
"""Make relative path absolute from base dir."""
385
382
return path if os .path .isabs (path ) else os .path .join (self ._basedir , path )
386
383
387
- def _dirhash (self , directory , hash , ignore_hidden = False , exclude_directories = [], excluded_extensions = []):
384
+ def _dirhash (self , directory , hash , ignore_hidden = False ,
385
+ exclude_directories = [], excluded_extensions = []):
388
386
"""Returns hash of directory's file contents"""
389
387
assert Path (directory ).is_dir ()
390
388
try :
391
- dir_iter = sorted (Path (directory ).iterdir (),
392
- key = lambda p : str (p ).lower ())
389
+ dir_iter = sorted (Path (directory ).iterdir (), key = lambda p : str (p ).lower ())
393
390
except FileNotFoundError :
394
391
return hash
395
392
for path in dir_iter :
@@ -403,7 +400,8 @@ def _dirhash(self, directory, hash, ignore_hidden=False, exclude_directories=[],
403
400
hash .update (chunk )
404
401
elif path .is_dir () and path .name not in exclude_directories :
405
402
hash = self ._dirhash (path , hash , ignore_hidden = ignore_hidden ,
406
- exclude_directories = exclude_directories , excluded_extensions = excluded_extensions )
403
+ exclude_directories = exclude_directories ,
404
+ excluded_extensions = excluded_extensions )
407
405
return hash
408
406
409
407
def generate_cache_hash (self , method_kwargs ):
@@ -423,18 +421,23 @@ def generate_cache_hash(self, method_kwargs):
423
421
if path_param in method_kwargs :
424
422
if isinstance (method_kwargs [path_param ], list ):
425
423
params [path_param ] = [
426
- sha1 (open (fp , 'rb' ).read ()).hexdigest () for fp in method_kwargs [path_param ]]
424
+ sha1 (open (fp , 'rb' ).read ()).hexdigest ()
425
+ for fp in method_kwargs [path_param ]
426
+ ]
427
427
else :
428
428
params [path_param ] = sha1 (
429
429
open (method_kwargs [path_param ], 'rb' ).read ()).hexdigest ()
430
430
431
431
# creates hash of all file content within tfdir
432
432
# excludes .terraform/, hidden files, tfstate files from being used for hash
433
- params ["tfdir" ] = self ._dirhash (
434
- self .tfdir , sha1 (), ignore_hidden = True , exclude_directories = [".terraform" ], excluded_extensions = ['.backup' , '.tfstate' ]).hexdigest ()
433
+ params ["tfdir" ] = self ._dirhash (self .tfdir , sha1 (), ignore_hidden = True ,
434
+ exclude_directories = [".terraform" ],
435
+ excluded_extensions = ['.backup' , '.tfstate'
436
+ ]).hexdigest ()
435
437
436
- return sha1 (json .dumps (params , sort_keys = True ,
437
- default = str ).encode ("cp037" )).hexdigest () + ".pickle"
438
+ return sha1 (
439
+ json .dumps (params , sort_keys = True ,
440
+ default = str ).encode ("cp037" )).hexdigest () + ".pickle"
438
441
439
442
def _cache (func ):
440
443
@@ -597,7 +600,8 @@ def workspace(self, name=None):
597
600
598
601
@_cache
599
602
def plan (self , input = False , color = False , refresh = True , tf_vars = None ,
600
- targets = None , output = False , tf_var_file = None , state = None , use_cache = False , ** kw ):
603
+ targets = None , output = False , tf_var_file = None , state = None ,
604
+ use_cache = False , ** kw ):
601
605
"""
602
606
Run Terraform plan command, optionally returning parsed plan output.
603
607
@@ -629,8 +633,7 @@ def plan(self, input=False, color=False, refresh=True, tf_vars=None,
629
633
try :
630
634
return self ._plan_formatter (result .out )
631
635
except json .JSONDecodeError as e :
632
- raise TerraformTestError (
633
- 'Error decoding plan output: {}' .format (e ))
636
+ raise TerraformTestError ('Error decoding plan output: {}' .format (e ))
634
637
635
638
@_cache
636
639
def apply (self , input = False , color = False , auto_approve = True , tf_vars = None ,
0 commit comments