def determine_changes()

in qs_cfn_lint_rules/IAMPartition.py [0:0]


    def determine_changes(self, cfn):
        substitutions = []
        def _needs_sub(path, data):
            if (isinstance(data, dict) or issubclass(type(data), dict)):
                if 'Fn::Sub' in data.keys():
                    return False
            if isinstance(path[-1], six.string_types):
                if path[-1] == 'Fn::Sub':
                    return False
                return True
            if isinstance(path[-1], int):
                if path[-2] == 'Fn::Sub':
                    return False
                return True

        for match in self.match(cfn):
            _v = deep_get(cfn.template, match.path)
            if isinstance(_v, six.string_types):
                _nv = re.sub('arn:aws(-*)?', 'arn:${AWS::Partition}', _v)
            if isinstance(_v, dict):
                _nv = {}
                for k,v in _v.items():
                    _nv[k] = re.sub('arn:aws(-*)?', 'arn:${AWS::Partition}', v)
            if _needs_sub(match.path, _v):
                value = {'Fn::Sub': _nv}
            else:
                value = _nv
            substitutions.append((match.path, _v, value))
        return substitutions