def _validate_contradictory_tags(self) -> None:
        """Check boolean/priority tags' config and warn user if it's contradictory.

        .. note::
          To preserve sanity (and backwards compatibility) the ``nofailover``/``nosync`` tag will still exist.
          A contradictory configuration is one where ``nofailover``/``nosync`` is ``True`` but
          ``failover_priority > 0``/``sync_priority > 0``, or where ``nofailover``/``nosync`` is ``False``,
          but ``failover_priority <= 0``/``sync_priority <= 0``. Essentially, ``nofailover``/``nosync`` and
          ``failover_priority``/``sync_priority`` are communicating different things.
          This checks for this edge case (which is a misconfiguration on the part of the user) and warns them.
          The behaviour is as if ``failover_priority``/``sync_priority`` were not provided
          (i.e ``nofailover``/``nosync`` is the bedrock source of truth).
        """
        tags = self.get('tags', {})

        def validate_tag(bool_name: str, priority_name: str) -> None:
            if bool_name not in tags:
                return
            bool_tag = tags.get(bool_name)
            priority_tag = parse_int(tags.get(priority_name))
            if priority_tag is not None \
                    and (bool(bool_tag) is True and priority_tag > 0
                         or bool(bool_tag) is False and priority_tag <= 0):
                logger.warning('Conflicting configuration between %s: %s and %s: %s. Defaulting to %s: %s',
                               bool_name, bool_tag, priority_name, priority_tag, bool_name, bool_tag)

        validate_tag('nofailover', 'failover_priority')
        validate_tag('nosync', 'sync_priority')
Check boolean/priority tags' config and warn user if it's contradictory.

        .. note::
          To preserve sanity (and backwards compatibility) the ``nofailover``/``nosync`` tag will still exist.
          A contradictory configuration is one where ``nofailover``/``nosync`` is ``True`` but
          ``failover_priority > 0``/``sync_priority > 0``, or where ``nofailover``/``nosync`` is ``False``,
          but ``failover_priority <= 0``/``sync_priority <= 0``. Essentially, ``nofailover``/``nosync`` and
          ``failover_priority``/``sync_priority`` are communicating different things.
          This checks for this edge case (which is a misconfiguration on the part of the user) and warns them.
          The behaviour is as if ``failover_priority``/``sync_priority`` were not provided
          (i.e ``nofailover``/``nosync`` is the bedrock source of truth).
        
patroni/config.py