in critter/stack.py [0:0]
def test(self):
"""The main entrypoint into executing a critter test. This function is called from /bin/critter"""
logger.info(f"Testing using identity '{self.sts.get_caller_identity()['Arn']}'")
err = None
try:
self.deploy()
self.process_outputs()
self.wait_for_config_resources()
self.start_config_rule_evaluation()
self.wait_for_config_evaluation()
self.validate_config_evaluation()
except TestFailure as e:
logger.error(
f"\u274c Config rule '{self.config_rule_name}' test failed! One or more resources "
"were evaluated by AWS Config with an unexpected compliance type.",
)
logger.error(e)
print() # printing a blank line for console output readability
err = e
except (Exception, KeyboardInterrupt) as e:
logger.error("\nCritter encountered an error:\n")
logger.error(traceback.format_exc())
err = e
else:
logger.error(f"\u2705 Config rule '{self.config_rule_name}' test passed!\n")
finally:
no_delete_msg = (
f"Not deleting CloudFormation stack '{self.stack_name}', specify '{self.DELETE_STACK_ARG}' "
"to control this behavior"
)
if err:
if self.delete_stack == self.DELETE_STACK_ALWAYS:
self.delete()
else:
logger.info(no_delete_msg)
exit(1)
if self.delete_stack != self.DELETE_STACK_NEVER:
self.delete()
else:
logger.info(no_delete_msg)