func ConfigToContainerProbe()

in internal/manifests/collector/adapters/config_to_probe.go [40:88]


func ConfigToContainerProbe(config map[interface{}]interface{}) (*corev1.Probe, error) {
	serviceProperty, withService := config["service"]
	if !withService {
		return nil, errNoService
	}
	service, withSvcProperty := serviceProperty.(map[interface{}]interface{})
	if !withSvcProperty {
		return nil, errServiceNotAMap
	}

	serviceExtensionsProperty, withExtension := service["extensions"]
	if !withExtension {
		return nil, ErrNoServiceExtensions
	}

	serviceExtensions, withExtProperty := serviceExtensionsProperty.([]interface{})
	if !withExtProperty {
		return nil, errServiceExtensionsNotSlice
	}
	healthCheckServiceExtensions := make([]string, 0)
	for _, ext := range serviceExtensions {
		parsedExt, ok := ext.(string)
		if ok && strings.HasPrefix(parsedExt, "health_check") {
			healthCheckServiceExtensions = append(healthCheckServiceExtensions, parsedExt)
		}
	}

	if len(healthCheckServiceExtensions) == 0 {
		return nil, ErrNoServiceExtensionHealthCheck
	}

	extensionsProperty, ok := config["extensions"]
	if !ok {
		return nil, errNoExtensions
	}
	extensions, ok := extensionsProperty.(map[interface{}]interface{})
	if !ok {
		return nil, errExtensionsNotAMap
	}
	// in the event of multiple health_check service extensions defined, we arbitrarily take the first one found
	for _, healthCheckForProbe := range healthCheckServiceExtensions {
		healthCheckExtension, ok := extensions[healthCheckForProbe]
		if ok {
			return createProbeFromExtension(healthCheckExtension)
		}
	}

	return nil, errNoExtensionHealthCheck
}