in pkg/instrumentation/podmutator.go [91:163]
func (langInsts languageInstrumentations) areContainerNamesConfiguredForMultipleInstrumentations() (bool, error) {
var instrWithoutContainers int
var instrWithContainers int
var allContainers []string
if featuregate.SkipMultiInstrumentationContainerValidation.IsEnabled() {
return true, nil
}
// Check for instrumentations with and without containers.
if langInsts.Java.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.Java)
instrWithoutContainers += isInstrWithoutContainers(langInsts.Java)
allContainers = append(allContainers, langInsts.Java.Containers)
}
if langInsts.NodeJS.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.NodeJS)
instrWithoutContainers += isInstrWithoutContainers(langInsts.NodeJS)
allContainers = append(allContainers, langInsts.NodeJS.Containers)
}
if langInsts.Python.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.Python)
instrWithoutContainers += isInstrWithoutContainers(langInsts.Python)
allContainers = append(allContainers, langInsts.Python.Containers)
}
if langInsts.DotNet.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.DotNet)
instrWithoutContainers += isInstrWithoutContainers(langInsts.DotNet)
allContainers = append(allContainers, langInsts.DotNet.Containers)
}
if langInsts.ApacheHttpd.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.ApacheHttpd)
instrWithoutContainers += isInstrWithoutContainers(langInsts.ApacheHttpd)
allContainers = append(allContainers, langInsts.ApacheHttpd.Containers)
}
if langInsts.Nginx.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.Nginx)
instrWithoutContainers += isInstrWithoutContainers(langInsts.Nginx)
allContainers = append(allContainers, langInsts.Nginx.Containers)
}
if langInsts.Go.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.Go)
instrWithoutContainers += isInstrWithoutContainers(langInsts.Go)
allContainers = append(allContainers, langInsts.Go.Containers)
}
if langInsts.Sdk.Instrumentation != nil {
instrWithContainers += isInstrWithContainers(langInsts.Sdk)
instrWithoutContainers += isInstrWithoutContainers(langInsts.Sdk)
allContainers = append(allContainers, langInsts.Sdk.Containers)
}
// Look for duplicated containers.
containerDuplicates := findDuplicatedContainers(allContainers)
if containerDuplicates != nil {
return false, containerDuplicates
}
// Look for mixed multiple instrumentations with and without container names.
if instrWithoutContainers > 0 && instrWithContainers > 0 {
return false, fmt.Errorf("incorrect instrumentation configuration - please provide container names for all instrumentations")
}
// Look for multiple instrumentations without container names.
if instrWithoutContainers > 1 && instrWithContainers == 0 {
return false, fmt.Errorf("incorrect instrumentation configuration - please provide container names for all instrumentations")
}
if instrWithoutContainers == 0 && instrWithContainers == 0 {
return false, fmt.Errorf("instrumentation configuration not provided")
}
return true, nil
}