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
}