def _validate()

in cli/src/pcluster/validators/tags_validators.py [0:0]


    def _validate(self, queue_name, compute_resource_name, cluster_tags, queue_tags, compute_resource_tags):
        cluster_tag_keys = {tag.key for tag in cluster_tags} if cluster_tags else set()
        queue_tag_keys = {tag.key for tag in queue_tags} if queue_tags else set()
        compute_resource_tag_keys = {tag.key for tag in compute_resource_tags} if compute_resource_tags else set()

        overlapping_keys = cluster_tag_keys & queue_tag_keys & compute_resource_tag_keys
        key_count = len(cluster_tag_keys | queue_tag_keys | compute_resource_tag_keys)
        overlapping_keys_list = sorted(list(overlapping_keys))
        queue_cluster_overlapping_keys_list = sorted(list(cluster_tag_keys & queue_tag_keys - overlapping_keys))
        compute_resource_queue_overlapping_key_list = sorted(
            list(queue_tag_keys & compute_resource_tag_keys - overlapping_keys)
        )
        cluster_compute_resource_overlapping_key_list = sorted(
            list(cluster_tag_keys & compute_resource_tag_keys - overlapping_keys)
        )

        if overlapping_keys_list:
            self._add_failure(
                "The following Tag keys are defined under `Tags`, `SlurmQueue/Tags` and "
                f"`SlurmQueue/ComputeResources/Tags`: {overlapping_keys_list}"
                " and will be overridden by the value set in `SlurmQueue/ComputeResources/Tags` for "
                f"ComputeResource '{compute_resource_name}' in queue '{queue_name}'.",
                FailureLevel.WARNING,
            )
        if queue_cluster_overlapping_keys_list:
            self._add_failure(
                "The following Tag keys are defined in both under `Tags` and `SlurmQueue/Tags`: "
                f"{queue_cluster_overlapping_keys_list} and will be overridden by the value set in `SlurmQueue/Tags` "
                f"for ComputeResource '{compute_resource_name}' in queue '{queue_name}'.",
                FailureLevel.WARNING,
            )
        if compute_resource_queue_overlapping_key_list:
            self._add_failure(
                "The following Tag keys are defined in both under `SlurmQueue/Tags` and "
                f"`SlurmQueue/ComputeResources/Tags`: {compute_resource_queue_overlapping_key_list} and will be "
                f"overridden by the value set in `SlurmQueue/ComputeResources/Tags` for "
                f"ComputeResource '{compute_resource_name}' in queue '{queue_name}'.",
                FailureLevel.WARNING,
            )

        if cluster_compute_resource_overlapping_key_list:
            self._add_failure(
                "The following Tag keys are defined in both under `Tags` and `SlurmQueue/ComputeResources/Tags`: "
                f"{cluster_compute_resource_overlapping_key_list} and will be overridden by the value set in "
                f"`SlurmQueue/ComputeResources/Tags` for ComputeResource '{compute_resource_name}' in queue"
                f" '{queue_name}'.",
                FailureLevel.WARNING,
            )

        if key_count > MAX_TAGS_COUNT:
            self._add_failure(
                f"The number of tags ({key_count}) associated with ComputeResource '{compute_resource_name}' in queue "
                f"'{queue_name}' has exceeded the limit of {MAX_TAGS_COUNT}.",
                FailureLevel.ERROR,
            )