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.
| ... | ... |
@@ -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", |