in images/controller/cmd/image_puller/image_puller.go [238:278]
func getImageDigest(image, accessToken string) (string, error) {
respImage := ""
imageTags, err := broker.ListGCRImageTags(image, accessToken)
if err != nil {
return respImage, err
}
if len(regexp.MustCompile(broker.GCRImageWithTagPattern).FindAllString(image, -1)) > 0 {
// Find image digest from tag.
imageToks := strings.Split(strings.ReplaceAll(image, "gcr.io/", ""), ":")
imageRepo := imageToks[0]
imageTag := imageToks[1]
for digest, meta := range imageTags.Manifest {
for _, tag := range meta.Tag {
if tag == imageTag {
respImage = fmt.Sprintf("gcr.io/%s@%s", imageRepo, digest)
break
}
}
if len(respImage) > 0 {
break
}
}
}
if len(regexp.MustCompile(broker.GCRImageWithDigestPattern).FindAllString(image, -1)) > 0 {
// Verify image digest is in list response.
imageDigest := strings.Split(strings.ReplaceAll(image, "gcr.io/", ""), "@")[1]
if _, ok := imageTags.Manifest[imageDigest]; ok {
respImage = image
}
}
if len(respImage) == 0 {
return respImage, fmt.Errorf("failed to find digest for image: %s", image)
}
return respImage, nil
}