def compare_stack_instances()

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