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