// ExtractLayerInfo extracts the image name and ID from a path to an ACI func ExtractLayerInfo(store *store.Store, in string) (types.Dependency, error) { im, err := GetManifestFromImage(in) if err != nil { return types.Dependency{}, fmt.Errorf("error getting manifest from image (%v): %v", in, err) } inFile, err := os.Open(in) if err != nil { return types.Dependency{}, fmt.Errorf("error opening ACI: %v", err) } defer inFile.Close() inImageID, err := store.WriteACI(inFile, false) if err != nil { return types.Dependency{}, fmt.Errorf("error writing ACI into the tree store: %v", err) } hash, err := types.NewHash(inImageID) if err != nil { return types.Dependency{}, fmt.Errorf("error creating hash from an image ID (%s): %v", hash, err) } return types.Dependency{ ImageName: im.Name, ImageID: hash, }, nil }
// renderInStore renders a ACI specified by `filename` in the given tree store, // and returns the hash (image ID) of the rendered ACI. func renderInStore(s *store.Store, filename string) (string, error) { // Put the ACI into the store f, err := os.Open(filename) if err != nil { return "", fmt.Errorf("Could not open ACI image: %s", err) } key, err := s.WriteACI(f, false) if err != nil { return "", fmt.Errorf("Could not open ACI: %s", key) } // Render the ACI if err := s.RenderTreeStore(key, false); err != nil { return "", fmt.Errorf("Could not render tree store: %s", err) } return key, err }