def check_layout()

in contrib/kubespray/script/validate_layout_schema.py [0:0]


def check_layout(layout, cluster_config):
    # hostname / hostip should be unique
    hostnames = [elem['hostname'] for elem in layout['machine-list']]
    if len(hostnames) != len(set(hostnames)):
        logger.error("hostname should be unique")
        return False
    hostips = [elem['hostip'] for elem in layout['machine-list']]
    if len(hostips) != len(set(hostips)):
        logger.error("hostip should be unique")
        return False

    # machine-type should be defined in machine-sku
    # collect types of computing device
    worker_computing_devices = set()
    for machine in layout['machine-list']:
        if machine['machine-type'] not in layout['machine-sku']:
            logger.error("machine-type %s is not defined", machine['machine-type'])
            return False
        machine_sku = layout['machine-sku'][machine['machine-type']]
        if 'pai-worker' in machine and machine['pai-worker'] == 'true' and 'computing-device' in machine_sku:
            worker_computing_devices.add(machine_sku['computing-device']['type'])
    worker_computing_devices = list(worker_computing_devices)

    masters, workers = get_masters_workers_from_layout(layout)
    # only one pai-master
    if len(masters) == 0:
        logger.error('No master machine specified.')
        return False
    if len(masters) > 1:
        logger.error('More than one master machine specified.')
        return False
    # at least one pai-worker
    if len(workers) == 0:
        logger.error('No worker machine specified.')
        return False
    # pai-master / pai-worker cannot be true at the same time
    if 'pai-worker' in masters[0] and masters[0]['pai-worker'] == 'true':
        logger.error("One machine can not be pai-master and pai-worker at the same time.")
        return False
    # if cluster_config.enable_hived_scheduler is false, there should be <= 1 type of computing device
    if 'enable_hived_scheduler' in cluster_config and cluster_config['enable_hived_scheduler'] is False:
        if len(worker_computing_devices) > 1:
            logger.error('K8S default scheduler only supports <= 1 type of computing device in worker nodes.')
            return False

    return True