in pkg/webhook/injection.go [102:152]
func (si *SidecarInjector) injectSidecarContainer(containerName string, pod *corev1.Pod, injectAsNativeSidecar bool) error {
var containerSpec corev1.Container
var index int
config, err := si.prepareConfig(sidecarPrefixMap[containerName], *pod)
if err != nil {
return err
}
config.PodHostNetworkSetting = pod.Spec.HostNetwork
// Extract user provided metadata prefetch sidecar image.
if userProvidedSidecarImage, err := ExtractImageAndDeleteContainer(&pod.Spec, containerName); err == nil {
if userProvidedSidecarImage != "" {
config.ContainerImage = userProvidedSidecarImage
}
} else {
return err
}
// Retrieve container spec and index to inject sidecar for either init containers or regular based on native sidecar support.
if injectAsNativeSidecar {
containerSpec = si.getNativeContainerSpec(containerName, pod, config)
index = getInjectIndexAfterContainer(pod.Spec.InitContainers, containerIndexOrderMap[containerName])
} else {
containerSpec = si.getContainerSpec(containerName, pod, config)
index = getInjectIndexAfterContainer(pod.Spec.Containers, containerIndexOrderMap[containerName])
}
// Skip metadata prefetch sidecar injection if no volumes are requesting metadata prefetch.
if containerName == MetadataPrefetchSidecarName && len(containerSpec.VolumeMounts) == 0 {
klog.Info("no volumes are requesting metadata prefetch, skipping metadata prefetch sidecar injection")
return nil
}
// This should not happen as we always inject the sidecar after injecting our primary gcsfuse sidecar.
if containerName == MetadataPrefetchSidecarName && index == 0 {
klog.Warningf("%s not found when attempting to inject container. skipping injection", containerIndexOrderMap[containerName])
return fmt.Errorf("%s", (containerIndexOrderMap[containerName] + "not found when attempting to inject metadata prefetch. skipping injection"))
}
if injectAsNativeSidecar {
pod.Spec.InitContainers = insert(pod.Spec.InitContainers, containerSpec, index)
} else {
pod.Spec.Containers = insert(pod.Spec.Containers, containerSpec, index)
}
// Log pod mutation after fuse sidecar injection.
LogPodMutation(pod, config)
return nil
}