// PullImage performs a docker pull on an image specified by repo/tag. // TODO: Detect if the pulled image has a different imageID than the value retrieved from // metadata, and if so correct the metadata, or at least skip processing the image. func PullImage(metadata ImageMetadataInfo) { tagspec := RegistrySpec + "/" + metadata.Repo + ":" + metadata.Tag apipath := "/images/create?fromImage=" + tagspec blog.Info("PullImage downloading %s, Image ID: %s", apipath, metadata.Image) config.BanyanUpdate("Pull", apipath, metadata.Image) resp, err := DockerAPI(DockerTransport, "POST", apipath, []byte{}, XRegistryAuth) if err != nil { blog.Error(err, "PullImage failed for", RegistrySpec, metadata.Repo, metadata.Tag, metadata.Image) } if strings.Contains(string(resp), `"error":`) { blog.Error("PullImage error for %s/%s/%s", RegistrySpec, metadata.Repo, metadata.Tag) } blog.Trace(string(resp)) return }
// PullImage performs a docker pull on an image specified by repo/tag. func PullImage(metadata *ImageMetadataInfo) (err error) { tagspec := metadata.Repo + ":" + metadata.Tag if RegistrySpec != config.DockerHub { tagspec = RegistrySpec + "/" + tagspec } apipath := "/images/create?fromImage=" + tagspec blog.Info("PullImage downloading %s, Image ID: %s", apipath, metadata.Image) config.BanyanUpdate("Pull", apipath, metadata.Image) resp, err := DockerAPI(DockerTransport, "POST", apipath, []byte{}, XRegistryAuth) if err != nil { except.Error(err, "PullImage failed for", RegistrySpec, metadata.Repo, metadata.Tag, metadata.Image) return } if strings.Contains(string(resp), `"error":`) { err = errors.New("PullImage error for " + RegistrySpec + "/" + metadata.Repo + "/" + metadata.Tag) except.Error(err) return } blog.Trace(string(resp)) // get the Docker-calculated image ID calculatedID, err := dockerImageID(RegistrySpec, metadata) if err != nil { except.Error(err, "dockerImageID") return } if metadata.Image > "" && metadata.Image != calculatedID { newMetadata := *metadata newMetadata.Image = calculatedID RemoveImages([]ImageMetadataInfo{newMetadata}) err = errors.New("PullImage " + metadata.Repo + ":" + metadata.Tag + " image ID " + calculatedID + " doesn't match metadata-derived ID " + metadata.Image) except.Error(err) return err } metadata.Image = calculatedID return }