func()

in pkg/inject/virtualgateway_envoy.go [68:113]


func (m *virtualGatewayEnvoyConfig) mutate(pod *corev1.Pod) error {
	ok, envoyIdx := containsEnvoyContainer(pod)
	if !ok {
		return nil
	}

	variables := m.buildTemplateVariables(pod)
	envoy := pod.Spec.Containers[envoyIdx]

	vg := fmt.Sprintf("mesh/%s/virtualGateway/%s", variables.MeshName, variables.VirtualGatewayOrNodeName)

	envMap := map[string]string{}
	if err := updateEnvMapForEnvoy(variables, envMap, vg); err != nil {
		return err
	}

	//we override the image to latest Envoy so customers do not have to manually manage
	// envoy versions and let controller handle consistency versions across the mesh
	if m.virtualGatewayImageOverride(pod) {
		envoy.Image = fmt.Sprintf("%s:%s", m.mutatorConfig.sidecarImageRepository, m.mutatorConfig.sidecarImageTag)
	}

	for idx, env := range pod.Spec.Containers[envoyIdx].Env {
		if val, ok := envMap[env.Name]; ok {
			if val != env.Value {
				envoy.Env[idx].Value = val
			}
			delete(envMap, env.Name)
		}
	}

	env := getEnvoyEnv(envMap)
	envoy.Env = append(envoy.Env, env...)

	// customer can bring their own envoy image/spec for virtual gateway so we will only set readiness probe if not already set
	if envoy.ReadinessProbe == nil {
		envoy.ReadinessProbe = envoyReadinessProbe(m.mutatorConfig.readinessProbeInitialDelay,
			m.mutatorConfig.readinessProbePeriod, strconv.Itoa(int(m.mutatorConfig.adminAccessPort)))
	}

	if m.mutatorConfig.enableSDS && !isSDSDisabled(pod) {
		mutateSDSMounts(pod, &envoy, m.mutatorConfig.sdsUdsPath)
	}
	pod.Spec.Containers[envoyIdx] = envoy
	return nil
}