in pkg/handler/handler.go [311:409]
func (m *Modifier) getPodSpecPatch(pod *corev1.Pod, patchConfig *podPatchConfig) ([]patchOperation, bool) {
tokenFilePath := filepath.Join(patchConfig.MountPath, patchConfig.TokenPath)
betaNodeSelector, _ := pod.Spec.NodeSelector["beta.kubernetes.io/os"]
nodeSelector, _ := pod.Spec.NodeSelector["kubernetes.io/os"]
if (betaNodeSelector == "windows") || nodeSelector == "windows" {
// Convert the unix file path to a windows file path
// Eg. /var/run/secrets/eks.amazonaws.com/serviceaccount/token to
// C:\var\run\secrets\eks.amazonaws.com\serviceaccount\token
tokenFilePath = "C:" + strings.Replace(tokenFilePath, `/`, `\`, -1)
}
var changed bool
var initContainers = []corev1.Container{}
for i := range pod.Spec.InitContainers {
container := pod.Spec.InitContainers[i]
if _, ok := patchConfig.ContainersToSkip[container.Name]; ok {
klog.V(4).Infof("Container %s was annotated to be skipped", container.Name)
} else if m.addEnvToContainer(&container, tokenFilePath, patchConfig) {
changed = true
}
initContainers = append(initContainers, container)
}
var containers = []corev1.Container{}
for i := range pod.Spec.Containers {
container := pod.Spec.Containers[i]
if _, ok := patchConfig.ContainersToSkip[container.Name]; ok {
klog.V(4).Infof("Container %s was annotated to be skipped", container.Name)
} else if m.addEnvToContainer(&container, tokenFilePath, patchConfig) {
changed = true
}
containers = append(containers, container)
}
volume := corev1.Volume{
Name: patchConfig.VolumeName,
VolumeSource: corev1.VolumeSource{
Projected: &corev1.ProjectedVolumeSource{
Sources: []corev1.VolumeProjection{
{
ServiceAccountToken: &corev1.ServiceAccountTokenProjection{
Audience: patchConfig.Audience,
ExpirationSeconds: &patchConfig.TokenExpiration,
Path: patchConfig.TokenPath,
},
},
},
},
},
}
patch := []patchOperation{}
// skip adding volume if it already exists
volExists := false
for _, vol := range pod.Spec.Volumes {
if vol.Name == patchConfig.VolumeName {
volExists = true
}
}
if !volExists {
volPatch := patchOperation{
Op: "add",
Path: "/spec/volumes/0",
Value: volume,
}
if pod.Spec.Volumes == nil {
volPatch = patchOperation{
Op: "add",
Path: "/spec/volumes",
Value: []corev1.Volume{
volume,
},
}
}
patch = append(patch, volPatch)
changed = true
}
patch = append(patch, patchOperation{
Op: "add",
Path: "/spec/containers",
Value: containers,
})
if len(initContainers) > 0 {
patch = append(patch, patchOperation{
Op: "add",
Path: "/spec/initContainers",
Value: initContainers,
})
}
return patch, changed
}