func (f *fakeRuntimeHelper) GenerateRunContainerOptions(pod *api.Pod, container *api.Container, podIP string) (*kubecontainer.RunContainerOptions, error) { var opts kubecontainer.RunContainerOptions if len(container.TerminationMessagePath) != 0 { testPodContainerDir, err := ioutil.TempDir("", "fooPodContainerDir") if err != nil { return nil, err } opts.PodContainerDir = testPodContainerDir } return &opts, nil }
func makeContainerLogMount(opts *kubecontainer.RunContainerOptions, container *api.Container) (*kubecontainer.Mount, error) { if opts.PodContainerDir == "" || container.TerminationMessagePath == "" { return nil, nil } // In docker runtime, the container log path contains the container ID. // However, for rkt runtime, we cannot get the container ID before the // the container is launched, so here we generate a random uuid to enable // us to map a container's termination message path to an unique log file // on the disk. randomUID := util.NewUUID() containerLogPath := path.Join(opts.PodContainerDir, string(randomUID)) fs, err := os.Create(containerLogPath) if err != nil { return nil, err } if err := fs.Close(); err != nil { return nil, err } mnt := &kubecontainer.Mount{ // Use a random name for the termination message mount, so that // when a container restarts, it will not overwrite the old termination // message. Name: fmt.Sprintf("termination-message-%s", randomUID), ContainerPath: container.TerminationMessagePath, HostPath: containerLogPath, ReadOnly: false, } opts.Mounts = append(opts.Mounts, *mnt) return mnt, nil }