in source/manifest/sm_execution_manager.py [0:0]
def compare_stack_instances(self, sm_input: dict, stack_name: str) -> bool:
"""
Compares deployed stack instances with expected accounts
& regions for a given StackSet
:param sm_input: state machine input
:param stack_name: stack set name
:return: boolean
# True: if the SM execution needs to make CRUD operations
on the StackSet
# False: if no changes to stack instances are required
"""
self.logger.info("Comparing deployed stack instances with "
"expected accounts & regions for "
"StackSet: {}".format(stack_name))
expected_account_list = sm_input.get('ResourceProperties')\
.get("AccountList", [])
expected_region_list = sm_input.get('ResourceProperties')\
.get("RegionList", [])
actual_account_list, actual_region_list = \
self.stack_set.get_accounts_and_regions_per_stack_set(stack_name)
self.logger.info("*** Stack instances expected to be deployed "
"in following accounts. ***")
self.logger.info(expected_account_list)
self.logger.info("*** Stack instances actually deployed "
"in following accounts. ***")
self.logger.info(actual_account_list)
self.logger.info("*** Stack instances expected to be deployed "
"in following regions. ***")
self.logger.info(expected_region_list)
self.logger.info("*** Stack instances actually deployed "
"in following regions. ***")
self.logger.info(actual_region_list)
self.logger.info("*** Comparing account lists ***")
accounts_matched = compare_lists(actual_account_list,
expected_account_list)
self.logger.info("*** Comparing region lists ***")
regions_matched = compare_lists(actual_region_list,
expected_region_list,)
if accounts_matched and regions_matched:
self.logger.info("No need to add or remove stack instances.")
return False
else:
self.logger.info("Stack instance(s) creation or deletion needed.")
return True