// FetchAndRender will fetch the given image and all of its dependencies if // they have not been fetched yet, and will then render them on to the // filesystem if they have not been rendered yet. func (r Registry) FetchAndRender(imagename types.ACIdentifier, labels types.Labels, size uint) error { err := r.Fetch(imagename, labels, size, true) if err != nil { return err } filesToRender, err := acirenderer.GetRenderedACI(imagename, labels, r) if err != nil { return err } filesloop: for _, fs := range filesToRender { _, err := os.Stat(path.Join(r.DepStoreExpandedPath, fs.Key, "rendered")) switch { case os.IsNotExist(err): break case err != nil: return err default: // This ACI has already been rendered continue filesloop } err = util.ExtractImage(path.Join(r.DepStoreTarPath, fs.Key), path.Join(r.DepStoreExpandedPath, fs.Key), fs.FileMap) if err != nil { return err } rfile, err := os.Create( path.Join(r.DepStoreExpandedPath, fs.Key, "rendered")) if err != nil { return err } rfile.Close() } return nil }
// FetchAndRender will fetch the given image and all of its dependencies if // they have not been fetched yet, and will then render them on to the // filesystem if they have not been rendered yet. func (r Registry) FetchAndRender(imagename types.ACIdentifier, labels types.Labels, size uint) error { _, err := r.GetACI(imagename, labels) if err == ErrNotFound { err := r.fetchACIWithSize(imagename, labels, size) if err != nil { return err } } filesToRender, err := acirenderer.GetRenderedACI(imagename, labels, r) if err != nil { return err } for _, fs := range filesToRender { ex, err := util.Exists(path.Join(r.Scratchpath, fs.Key, "rendered")) if err != nil { return err } if ex { //This ACI has already been rendered continue } err = util.UnTar(path.Join(r.Depstore, fs.Key), path.Join(r.Scratchpath, fs.Key), fs.FileMap) if err != nil { return err } rfile, err := os.Create(path.Join(r.Scratchpath, fs.Key, "rendered")) if err != nil { return err } rfile.Close() } return nil }
// FetchAndRender will fetch the given image and all of its dependencies if // they have not been fetched yet, and will then render them on to the // filesystem if they have not been rendered yet. func (r Registry) FetchAndRender(imagename types.ACIdentifier, labels types.Labels, size uint) error { err := r.Fetch(imagename, labels, size, true) if err != nil { return err } filesToRender, err := acirenderer.GetRenderedACI(imagename, labels, r) if err != nil { return err } for _, fs := range filesToRender { ex, err := util.Exists( path.Join(r.DepStoreExpandedPath, fs.Key, "rendered")) if err != nil { return err } if ex { //This ACI has already been rendered continue } err = util.ExtractImage(path.Join(r.DepStoreTarPath, fs.Key), path.Join(r.DepStoreExpandedPath, fs.Key), fs.FileMap) if err != nil { return err } rfile, err := os.Create( path.Join(r.DepStoreExpandedPath, fs.Key, "rendered")) if err != nil { return err } rfile.Close() } return nil }