Browse code

Copy volume mounts to hook pods

Copy volume mounts to hook pods matching any volumes which were also
copied to the hook pod. Otherwise the mapped volumes are inaccessible
to the hook container.

Dan Mace authored on 2015/11/04 04:36:53
Showing 2 changed files
... ...
@@ -210,13 +210,26 @@ func makeHookPod(hook *deployapi.LifecycleHook, deployment *kapi.ReplicationCont
210 210
 
211 211
 	// Transfer any requested volumes to the hook pod.
212 212
 	volumes := []kapi.Volume{}
213
+	volumeNames := sets.NewString()
213 214
 	for _, volume := range deployment.Spec.Template.Spec.Volumes {
214 215
 		for _, name := range exec.Volumes {
215 216
 			if volume.Name == name {
216 217
 				volumes = append(volumes, volume)
218
+				volumeNames.Insert(volume.Name)
217 219
 			}
218 220
 		}
219 221
 	}
222
+	// Transfer any volume mounts associated with transferred volumes.
223
+	volumeMounts := []kapi.VolumeMount{}
224
+	for _, mount := range baseContainer.VolumeMounts {
225
+		if volumeNames.Has(mount.Name) {
226
+			volumeMounts = append(volumeMounts, kapi.VolumeMount{
227
+				Name:      mount.Name,
228
+				ReadOnly:  mount.ReadOnly,
229
+				MountPath: mount.MountPath,
230
+			})
231
+		}
232
+	}
220 233
 
221 234
 	pod := &kapi.Pod{
222 235
 		ObjectMeta: kapi.ObjectMeta{
... ...
@@ -231,12 +244,13 @@ func makeHookPod(hook *deployapi.LifecycleHook, deployment *kapi.ReplicationCont
231 231
 		Spec: kapi.PodSpec{
232 232
 			Containers: []kapi.Container{
233 233
 				{
234
-					Name:       HookContainerName,
235
-					Image:      baseContainer.Image,
236
-					Command:    exec.Command,
237
-					WorkingDir: baseContainer.WorkingDir,
238
-					Env:        mergedEnv,
239
-					Resources:  resources,
234
+					Name:         HookContainerName,
235
+					Image:        baseContainer.Image,
236
+					Command:      exec.Command,
237
+					WorkingDir:   baseContainer.WorkingDir,
238
+					Env:          mergedEnv,
239
+					Resources:    resources,
240
+					VolumeMounts: volumeMounts,
240 241
 				},
241 242
 			},
242 243
 			Volumes:               volumes,
... ...
@@ -237,6 +237,13 @@ func TestHookExecutor_makeHookPod(t *testing.T) {
237 237
 									kapi.ResourceMemory: resource.MustParse("10M"),
238 238
 								},
239 239
 							},
240
+							VolumeMounts: []kapi.VolumeMount{
241
+								{
242
+									Name:      "volume-2",
243
+									ReadOnly:  true,
244
+									MountPath: "/mnt/volume-2",
245
+								},
246
+							},
240 247
 						},
241 248
 					},
242 249
 				},
... ...
@@ -478,6 +485,13 @@ func deployment(name, namespace string) *kapi.ReplicationController {
478 478
 										kapi.ResourceMemory: resource.MustParse("10M"),
479 479
 									},
480 480
 								},
481
+								VolumeMounts: []kapi.VolumeMount{
482
+									{
483
+										Name:      "volume-2",
484
+										ReadOnly:  true,
485
+										MountPath: "/mnt/volume-2",
486
+									},
487
+								},
481 488
 							},
482 489
 							{
483 490
 								Name:            "container2",