Merge pull request #8712 from sseago/pod-initcontainer-securitycontext
Copy SecurityContext from Containers[0] if present for PVRpull/3355/merge
commit
ad08c7a3ff
|
@ -0,0 +1 @@
|
|||
Copy SecurityContext from Containers[0] if present for PVR
|
|
@ -147,7 +147,7 @@ func (a *PodVolumeRestoreAction) Execute(input *velero.RestoreItemActionExecuteI
|
|||
|
||||
resourceReqs, err := kube.ParseResourceRequirements(cpuRequest, memRequest, cpuLimit, memLimit)
|
||||
if err != nil {
|
||||
log.Errorf("Using default resource values, couldn't parse resource requirements: %s.", err)
|
||||
log.Errorf("couldn't parse resource requirements: %s.", err)
|
||||
resourceReqs, _ = kube.ParseResourceRequirements(
|
||||
defaultCPURequestLimit, defaultMemRequestLimit, // requests
|
||||
defaultCPURequestLimit, defaultMemRequestLimit, // limits
|
||||
|
@ -157,15 +157,24 @@ func (a *PodVolumeRestoreAction) Execute(input *velero.RestoreItemActionExecuteI
|
|||
runAsUser, runAsGroup, allowPrivilegeEscalation, secCtx := getSecurityContext(log, config)
|
||||
|
||||
var securityContext corev1.SecurityContext
|
||||
if runAsUser == "" && runAsGroup == "" && allowPrivilegeEscalation == "" && secCtx == "" {
|
||||
securityContext = defaultSecurityCtx()
|
||||
} else {
|
||||
securityContextSet := false
|
||||
// Use securityContext settings from configmap if available
|
||||
if runAsUser != "" || runAsGroup != "" || allowPrivilegeEscalation != "" || secCtx != "" {
|
||||
securityContext, err = kube.ParseSecurityContext(runAsUser, runAsGroup, allowPrivilegeEscalation, secCtx)
|
||||
if err != nil {
|
||||
log.Errorf("Using default securityContext values, couldn't parse securityContext requirements: %s.", err)
|
||||
securityContext = defaultSecurityCtx()
|
||||
} else {
|
||||
securityContextSet = true
|
||||
}
|
||||
}
|
||||
// if first container in pod has a SecurityContext set, then copy this security context
|
||||
if len(pod.Spec.Containers) != 0 && pod.Spec.Containers[0].SecurityContext != nil {
|
||||
securityContext = *pod.Spec.Containers[0].SecurityContext.DeepCopy()
|
||||
securityContextSet = true
|
||||
}
|
||||
if !securityContextSet {
|
||||
securityContext = defaultSecurityCtx()
|
||||
}
|
||||
|
||||
initContainerBuilder := newRestoreInitContainerBuilder(image, string(input.Restore.UID))
|
||||
initContainerBuilder.Resources(&resourceReqs)
|
||||
|
|
|
@ -128,6 +128,18 @@ func TestPodVolumeRestoreActionExecute(t *testing.T) {
|
|||
RunAsUser: &id,
|
||||
RunAsNonRoot: boolptr.True(),
|
||||
}
|
||||
customID := int64(44444)
|
||||
customSecurityContext := corev1api.SecurityContext{
|
||||
AllowPrivilegeEscalation: boolptr.False(),
|
||||
Capabilities: &corev1api.Capabilities{
|
||||
Drop: []corev1api.Capability{"ALL"},
|
||||
},
|
||||
SeccompProfile: &corev1api.SeccompProfile{
|
||||
Type: corev1api.SeccompProfileTypeRuntimeDefault,
|
||||
},
|
||||
RunAsUser: &customID,
|
||||
RunAsNonRoot: boolptr.True(),
|
||||
}
|
||||
|
||||
var (
|
||||
restoreName = "my-restore"
|
||||
|
@ -264,6 +276,28 @@ func TestPodVolumeRestoreActionExecute(t *testing.T) {
|
|||
Command([]string{"/velero-restore-helper"}).Result()).
|
||||
Result(),
|
||||
},
|
||||
{
|
||||
name: "Restoring pod with custom container SecurityContext uses this SecurityContext for the restore initContainer",
|
||||
pod: builder.ForPod("ns-1", "my-pod").
|
||||
ObjectMeta(
|
||||
builder.WithAnnotations("snapshot.velero.io/myvol", "")).
|
||||
Containers(
|
||||
builder.ForContainer("app-container", "app-image").
|
||||
SecurityContext(&customSecurityContext).Result()).
|
||||
Result(),
|
||||
want: builder.ForPod("ns-1", "my-pod").
|
||||
ObjectMeta(
|
||||
builder.WithAnnotations("snapshot.velero.io/myvol", "")).
|
||||
Containers(
|
||||
builder.ForContainer("app-container", "app-image").
|
||||
SecurityContext(&customSecurityContext).Result()).
|
||||
InitContainers(
|
||||
newRestoreInitContainerBuilder(defaultRestoreHelperImage, "").
|
||||
Resources(&resourceReqs).
|
||||
SecurityContext(&customSecurityContext).
|
||||
VolumeMounts(builder.ForVolumeMount("myvol", "/restores/myvol").Result()).
|
||||
Command([]string{"/velero-restore-helper"}).Result()).Result(),
|
||||
},
|
||||
}
|
||||
|
||||
veleroDeployment := &appsv1.Deployment{
|
||||
|
|
Loading…
Reference in New Issue