func()

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
}