Collects fact for each host

    Collects the cpu and node configuration facts to be used by the rule.

    Arguments:
        cpu (CpuInfo): Parser object for the cpu info.
        cfg (NodeConfig): Parser object for the node configuration.

    Returns:
        dict: Dictionary of fact information including the keys
        ``cpu_count``, ``pods_per_core_int``, ``pods_per_core_customized``,
        ``max_pods``, and ``max_pods_customized``.

def cluster_info(cpu, cfg):
    """
    Collects fact for each host

    Collects the cpu and node configuration facts to be used by the rule.

    Arguments:
        cpu (CpuInfo): Parser object for the cpu info.
        cfg (NodeConfig): Parser object for the node configuration.

    Returns:
        dict: Dictionary of fact information including the keys
        ``cpu_count``, ``pods_per_core_int``, ``pods_per_core_customized``,
        ``max_pods``, and ``max_pods_customized``.
    """
    cpus = cpu.cpu_count
    pods_per_core = cfg.doc.find("pods-per-core")
    pods_per_core_int = int(pods_per_core.value) if pods_per_core else PODS_PER_CORE
    cfg_max_pods = cfg.doc.find("max-pods")
    cfg_max_pods_int = int(cfg_max_pods.value) if cfg_max_pods else MAX_PODS
    calc_max_pods = cpus * pods_per_core_int

    return {
        "cpu_count": cpus,
        "pods_per_core": pods_per_core_int,
        "pods_per_core_customized": bool(pods_per_core),
        "max_pods": min(cfg_max_pods_int, calc_max_pods),
        "max_pods_customized": bool(cfg_max_pods)
    }