@@ -16,15 +16,23 @@ package v1
1616
1717import (
1818 "path/filepath"
19+ "regexp"
1920 "strings"
2021
2122 "github.com/pkg/errors"
2223 "k8s.io/apimachinery/pkg/util/version"
2324)
2425
26+ const sha256RE = "@sha256:[0-9a-f]{64}$"
27+
2528// common functions for webhooks
2629
2730func validatePluginImage (image , expectedImageName string , expectedMinVersion * version.Version ) error {
31+ imageRe := regexp .MustCompile (expectedImageName + sha256RE )
32+ if imageRe .MatchString (image ) {
33+ return nil
34+ }
35+
2836 // Ignore registry, vendor and extract the image name with the tag
2937 parts := strings .SplitN (filepath .Base (image ), ":" , 2 )
3038 if len (parts ) != 2 {
@@ -34,13 +42,14 @@ func validatePluginImage(image, expectedImageName string, expectedMinVersion *ve
3442 imageName := parts [0 ]
3543 versionStr := parts [1 ]
3644
37- if imageName != expectedImageName {
38- return errors .Errorf ("incorrect image name %q. Make sure you use '<vendor>/%s:<version>'" , imageName , expectedImageName )
45+ // If user provided faulty SHA digest, the image name may include @sha256 suffix so strip it
46+ if strings .TrimSuffix (imageName , "@sha256" ) != expectedImageName {
47+ return errors .Errorf ("incorrect image name %q. Make sure you use '<vendor>/%s'." , imageName , expectedImageName )
3948 }
4049
4150 ver , err := version .ParseSemantic (versionStr )
4251 if err != nil {
43- return errors .Wrapf (err , "unable to parse version %q" , versionStr )
52+ return errors .Wrapf (err , "unable to parse version %q. Make sure it's either valid SHA digest or semver tag. " , versionStr )
4453 }
4554
4655 if ! ver .AtLeast (expectedMinVersion ) {
0 commit comments