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