func (c *Container) injectFiles() error { if len(c.spec.Files) == 0 { return nil } var ( sharedDir = filepath.Join(hypervisor.BaseDir, c.p.Id(), hypervisor.ShareDirTag) ) for _, f := range c.spec.Files { targetPath := f.Path if strings.HasSuffix(targetPath, "/") { targetPath = targetPath + f.Filename } c.Log(DEBUG, "inject file %s", targetPath) if f.Detail == nil { c.Log(WARNING, "no file detail available, skip file %s injection", targetPath) continue } file := f.Detail var src io.Reader if file.Uri != "" { urisrc, err := utils.UriReader(file.Uri) if err != nil { return err } defer urisrc.Close() src = urisrc } else { src = strings.NewReader(file.Content) } switch file.Encoding { case "base64": src = base64.NewDecoder(base64.StdEncoding, src) default: } err := c.p.factory.sd.InjectFile(src, c.descript.MountId, targetPath, sharedDir, utils.PermInt(f.Perm), utils.UidInt(f.User), utils.UidInt(f.Group)) if err != nil { c.Log(ERROR, "got error when inject files: %v", err) return err } } return nil }
func processInjectFiles(container *pod.UserContainer, files map[string]pod.UserFile, sd Storage, id, rootPath, sharedDir string) error { for _, f := range container.Files { targetPath := f.Path if strings.HasSuffix(targetPath, "/") { targetPath = targetPath + f.Filename } file, ok := files[f.Filename] if !ok { continue } var src io.Reader if file.Uri != "" { urisrc, err := utils.UriReader(file.Uri) if err != nil { return err } defer urisrc.Close() src = urisrc } else { src = strings.NewReader(file.Contents) } switch file.Encoding { case "base64": src = base64.NewDecoder(base64.StdEncoding, src) default: } err := sd.InjectFile(src, id, targetPath, sharedDir, utils.PermInt(f.Perm), utils.UidInt(f.User), utils.UidInt(f.Group)) if err != nil { glog.Error("got error when inject files ", err.Error()) return err } } return nil }