code: def _update_on_fields(prev_ele, new_ele):
      '''
      Return a dict with fields that differ between two dicts.
      '''
      fields_update = dict(
          (prop_name, prop_val)
          for prop_name, prop_val in six.iteritems(new_ele)
          if new_ele.get(prop_name) != prev_ele.get(prop_name) or prop_name in _MATCH_KEYS
      )
      if len(set(fields_update.keys()) | set(_MATCH_KEYS)) > len(set(_MATCH_KEYS)):
          if 'id' not in fields_update:
              # in case of update, the ID is necessary
              # if not specified in the pillar,
              # will try to get it from the prev_ele
              fields_update['id'] = prev_ele['id']
          return fields_updatf _update_on_fields(prev_ele, new_ele):
      '''
      Return a dict with fields that differ between two dicts.
      '''
      fields_update = dict(
          (prop_name, prop_val)
          for prop_name, prop_val in six.iteritems(new_ele)
          if new_ele.get(prop_name) != prev_ele.get(prop_name) or prop_name in _MATCH_KEYS
      )
      if len(set(fields_update.keys()) | set(_MATCH_KEYS)) > len(set(_MATCH_KEYS)):
          if 'id' not in fields_update:
              # in case of update, the ID is necessary
              # if not specified in the pillar,
              # will try to get it from the prev_ele
              fields_update['id'] = prev_ele['id']
          return fields_update
docs: Return a dict with fields that differ between two dicts.