func CombinedKernelSpecs()

in kernelspecs/kernelspecs.go [75:112]


func CombinedKernelSpecs(localBackend *backends.Backend, remoteBackend *backends.Backend) (*resources.KernelSpecs, error) {
	var defaultKernelSpecs string
	unifiedView := &resources.KernelSpecs{
		KernelSpecs: make(map[string]*resources.KernelSpec),
	}
	localKernelSpecs, err := fetchKernelSpecs(localBackend)
	if err != nil {
		return unifiedView, fmt.Errorf("failure fetching the local kernelspecs: %w", err)
	}
	if localKernelSpecs != nil {
		if localKernelSpecs.Default != "" {
			defaultKernelSpecs = localBackend.UnifiedID(localKernelSpecs.Default)
			unifiedView.Default = defaultKernelSpecs
		}
		for id, spec := range localKernelSpecs.KernelSpecs {
			unifiedID := localBackend.UnifiedID(id)
			unifiedView.KernelSpecs[unifiedID] = UnifiedView(spec, localBackend)
		}
	}
	remoteKernelSpecs, err := fetchKernelSpecs(remoteBackend)
	if err != nil {
		log.Printf("failure fetching the remote kernelspecs %v\n", err)
		// Local Kernels are populated. Return local kernelspecs.
		if len(unifiedView.KernelSpecs) > 0 {
			return unifiedView, nil
		}
		return unifiedView, fmt.Errorf("failure fetching the local+remote kernelspecs: %w", err)
	}
	if remoteKernelSpecs != nil && remoteKernelSpecs.Default != "" {
		defaultKernelSpecs = remoteBackend.UnifiedID(remoteKernelSpecs.Default)
		unifiedView.Default = defaultKernelSpecs
		for id, spec := range remoteKernelSpecs.KernelSpecs {
			unifiedID := remoteBackend.UnifiedID(id)
			unifiedView.KernelSpecs[unifiedID] = UnifiedView(spec, remoteBackend)
		}
	}
	return unifiedView, nil
}