mirror of
https://github.com/containers/skopeo.git
synced 2025-08-10 19:02:28 +00:00
Work with a reference.Named, not strings, in imagesToCopyFromRegistry
We now notice earlier if the user uses a non-repository input. Signed-off-by: Miloslav Trmač <mitr@redhat.com>
This commit is contained in:
parent
d16cd39939
commit
97ec6873fa
@ -127,6 +127,18 @@ func newSourceConfig(yamlFile string) (sourceConfig, error) {
|
|||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseRepositoryReference parses input into a reference.Named, and verifies that it names a repository, not an image.
|
||||||
|
func parseRepositoryReference(input string) (reference.Named, error) {
|
||||||
|
ref, err := reference.ParseNormalizedNamed(input)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !reference.IsNameOnly(ref) {
|
||||||
|
return nil, errors.Errorf("input names a reference, not a repository")
|
||||||
|
}
|
||||||
|
return ref, nil
|
||||||
|
}
|
||||||
|
|
||||||
// destinationReference creates an image reference using the provided transport.
|
// destinationReference creates an image reference using the provided transport.
|
||||||
// It returns a image reference to be used as destination of an image copy and
|
// It returns a image reference to be used as destination of an image copy and
|
||||||
// any error encountered.
|
// any error encountered.
|
||||||
@ -281,23 +293,32 @@ func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfig, sourc
|
|||||||
|
|
||||||
var repoDescList []repoDescriptor
|
var repoDescList []repoDescriptor
|
||||||
for imageName, tags := range cfg.Images {
|
for imageName, tags := range cfg.Images {
|
||||||
repoName := fmt.Sprintf("//%s/%s", registryName, imageName)
|
|
||||||
repoLogger := logrus.WithFields(logrus.Fields{
|
repoLogger := logrus.WithFields(logrus.Fields{
|
||||||
"repo": imageName,
|
"repo": imageName,
|
||||||
"registry": registryName,
|
"registry": registryName,
|
||||||
})
|
})
|
||||||
|
repoRef, err := parseRepositoryReference(fmt.Sprintf("%s/%s", registryName, imageName))
|
||||||
|
if err != nil {
|
||||||
|
repoLogger.Error("Error parsing repository name, skipping")
|
||||||
|
logrus.Error(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
repoLogger.Info("Processing repo")
|
repoLogger.Info("Processing repo")
|
||||||
|
|
||||||
var sourceReferences []types.ImageReference
|
var sourceReferences []types.ImageReference
|
||||||
if len(tags) != 0 {
|
if len(tags) != 0 {
|
||||||
for _, tag := range tags {
|
for _, tag := range tags {
|
||||||
source := fmt.Sprintf("%s:%s", repoName, tag)
|
tagLogger := logrus.WithFields(logrus.Fields{"tag": tag})
|
||||||
|
taggedRef, err := reference.WithTag(repoRef, tag)
|
||||||
imageRef, err := docker.ParseReference(source)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.WithFields(logrus.Fields{
|
tagLogger.Error("Error parsing tag, skipping")
|
||||||
"tag": source,
|
logrus.Error(err)
|
||||||
}).Error("Error processing tag, skipping")
|
continue
|
||||||
|
}
|
||||||
|
imageRef, err := docker.NewReference(taggedRef)
|
||||||
|
if err != nil {
|
||||||
|
tagLogger.Error("Error processing tag, skipping")
|
||||||
logrus.Errorf("Error getting image reference: %s", err)
|
logrus.Errorf("Error getting image reference: %s", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -305,15 +326,7 @@ func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfig, sourc
|
|||||||
}
|
}
|
||||||
} else { // len(tags) == 0
|
} else { // len(tags) == 0
|
||||||
repoLogger.Info("Querying registry for image tags")
|
repoLogger.Info("Querying registry for image tags")
|
||||||
|
sourceReferences, err = imagesToCopyFromRepo(serverCtx, repoRef)
|
||||||
imageRef, err := docker.ParseReference(repoName)
|
|
||||||
if err != nil {
|
|
||||||
repoLogger.Error("Error processing repo, skipping")
|
|
||||||
logrus.Error(err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
sourceReferences, err = imagesToCopyFromRepo(serverCtx, imageRef.DockerReference())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
repoLogger.Error("Error processing repo, skipping")
|
repoLogger.Error("Error processing repo, skipping")
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
@ -331,11 +344,17 @@ func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfig, sourc
|
|||||||
}
|
}
|
||||||
|
|
||||||
for imageName, tagRegex := range cfg.ImagesByTagRegex {
|
for imageName, tagRegex := range cfg.ImagesByTagRegex {
|
||||||
repoName := fmt.Sprintf("//%s/%s", registryName, imageName)
|
|
||||||
repoLogger := logrus.WithFields(logrus.Fields{
|
repoLogger := logrus.WithFields(logrus.Fields{
|
||||||
"repo": imageName,
|
"repo": imageName,
|
||||||
"registry": registryName,
|
"registry": registryName,
|
||||||
})
|
})
|
||||||
|
repoRef, err := parseRepositoryReference(fmt.Sprintf("%s/%s", registryName, imageName))
|
||||||
|
if err != nil {
|
||||||
|
repoLogger.Error("Error parsing repository name, skipping")
|
||||||
|
logrus.Error(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
repoLogger.Info("Processing repo")
|
repoLogger.Info("Processing repo")
|
||||||
|
|
||||||
var sourceReferences []types.ImageReference
|
var sourceReferences []types.ImageReference
|
||||||
@ -347,15 +366,7 @@ func imagesToCopyFromRegistry(registryName string, cfg registrySyncConfig, sourc
|
|||||||
}
|
}
|
||||||
|
|
||||||
repoLogger.Info("Querying registry for image tags")
|
repoLogger.Info("Querying registry for image tags")
|
||||||
|
allSourceReferences, err := imagesToCopyFromRepo(serverCtx, repoRef)
|
||||||
imageRef, err := docker.ParseReference(repoName)
|
|
||||||
if err != nil {
|
|
||||||
repoLogger.Error("Error processing repo, skipping")
|
|
||||||
logrus.Error(err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
allSourceReferences, err := imagesToCopyFromRepo(serverCtx, imageRef.DockerReference())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
repoLogger.Error("Error processing repo, skipping")
|
repoLogger.Error("Error processing repo, skipping")
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user