func (p *Pod) PrepareContainers(sd Storage, dclient DockerInterface) (err error) { err = nil p.containers = []*hypervisor.ContainerInfo{} var ( sharedDir = path.Join(hypervisor.BaseDir, p.vm.Id, hypervisor.ShareDirTag) ) files := make(map[string](pod.UserFile)) for _, f := range p.spec.Files { files[f.Name] = f } for i, c := range p.status.Containers { var ( info *dockertypes.ContainerJSONRaw ci *hypervisor.ContainerInfo ) info, err = getContinerInfo(dclient, c) ci, err = sd.PrepareContainer(c.Id, sharedDir) if err != nil { return err } ci.Workdir = info.Config.WorkingDir ci.Entrypoint = info.Config.Entrypoint.Slice() ci.Cmd = info.Config.Cmd.Slice() env := make(map[string]string) for _, v := range info.Config.Env { env[v[:strings.Index(v, "=")]] = v[strings.Index(v, "=")+1:] } for _, e := range p.spec.Containers[i].Envs { env[e.Env] = e.Value } ci.Envs = env processImageVolumes(info, c.Id, p.spec, &p.spec.Containers[i]) err = processInjectFiles(&p.spec.Containers[i], files, sd, c.Id, sd.RootPath(), sharedDir) if err != nil { return err } p.containers = append(p.containers, ci) glog.V(1).Infof("Container Info is \n%v", ci) } return nil }
func (p *Pod) setupMountsAndFiles(sd Storage) (err error) { if len(p.ctnStartInfo) != len(p.spec.Containers) { estr := fmt.Sprintf("Prepare error, pod %s does not get container infos well", p.id) glog.Error(estr) err = errors.New(estr) return err } var ( sharedDir = path.Join(hypervisor.BaseDir, p.vm.Id, hypervisor.ShareDirTag) files = make(map[string](pod.UserFile)) ) for _, f := range p.spec.Files { files[f.Name] = f } for i, c := range p.status.Containers { var ( ci *hypervisor.ContainerInfo ) mountId := p.ctnStartInfo[i].Id glog.Infof("container ID: %s, mountId %s\n", c.Id, mountId) ci, err = sd.PrepareContainer(mountId, sharedDir) if err != nil { return err } err = processInjectFiles(&p.spec.Containers[i], files, sd, mountId, sd.RootPath(), sharedDir) if err != nil { return err } ci.Id = c.Id ci.Cmd = p.ctnStartInfo[i].Cmd ci.Envs = p.ctnStartInfo[i].Envs ci.Entrypoint = p.ctnStartInfo[i].Entrypoint ci.Workdir = p.ctnStartInfo[i].Workdir p.ctnStartInfo[i] = ci } return nil }