func()

in apis/v1alpha1/instrumentation_webhook.go [208:264]


func (w InstrumentationWebhook) validate(r *Instrumentation) (admission.Warnings, error) {
	var warnings []string
	switch r.Spec.Sampler.Type {
	case "":
		warnings = append(warnings, "sampler type not set")
	case TraceIDRatio, ParentBasedTraceIDRatio:
		if r.Spec.Sampler.Argument != "" {
			rate, err := strconv.ParseFloat(r.Spec.Sampler.Argument, 64)
			if err != nil {
				return warnings, fmt.Errorf("spec.sampler.argument is not a number: %s", r.Spec.Sampler.Argument)
			}
			if rate < 0 || rate > 1 {
				return warnings, fmt.Errorf("spec.sampler.argument should be in rage [0..1]: %s", r.Spec.Sampler.Argument)
			}
		}
	case JaegerRemote, ParentBasedJaegerRemote:
		// value is a comma separated list of endpoint, pollingIntervalMs, initialSamplingRate
		// Example: `endpoint=http://localhost:14250,pollingIntervalMs=5000,initialSamplingRate=0.25`
		if r.Spec.Sampler.Argument != "" {
			err := validateJaegerRemoteSamplerArgument(r.Spec.Sampler.Argument)

			if err != nil {
				return warnings, fmt.Errorf("spec.sampler.argument is not a valid argument for sampler %s: %w", r.Spec.Sampler.Type, err)
			}
		}
	case AlwaysOn, AlwaysOff, ParentBasedAlwaysOn, ParentBasedAlwaysOff, XRaySampler:
	default:
		return warnings, fmt.Errorf("spec.sampler.type is not valid: %s", r.Spec.Sampler.Type)
	}

	// validate env vars
	if err := w.validateEnv(r.Spec.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.Java.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.NodeJS.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.Python.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.DotNet.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.Go.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.ApacheHttpd.Env); err != nil {
		return warnings, err
	}
	if err := w.validateEnv(r.Spec.Nginx.Env); err != nil {
		return warnings, err
	}
	return warnings, nil
}