mirror of
https://github.com/containers/skopeo.git
synced 2026-02-02 07:19:35 +00:00
golang-bin-1.8.1-1.fc26.x86_64 gcc-go-7.1.1-1.fc26.x86_64 Signed-off-by: Dan Walsh <dwalsh@redhat.com> Closes: #135 Approved by: nalind
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package buildah
|
|
|
|
import (
|
|
"github.com/Sirupsen/logrus"
|
|
cp "github.com/containers/image/copy"
|
|
"github.com/containers/image/docker/reference"
|
|
"github.com/containers/image/signature"
|
|
is "github.com/containers/image/storage"
|
|
"github.com/containers/image/transports/alltransports"
|
|
"github.com/containers/image/types"
|
|
"github.com/containers/storage"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
func pullImage(store storage.Store, options BuilderOptions, sc *types.SystemContext) error {
|
|
name := options.FromImage
|
|
|
|
spec := name
|
|
if options.Registry != "" {
|
|
spec = options.Registry + spec
|
|
}
|
|
|
|
srcRef, err := alltransports.ParseImageName(name)
|
|
if err != nil {
|
|
srcRef2, err2 := alltransports.ParseImageName(spec)
|
|
if err2 != nil {
|
|
return errors.Wrapf(err2, "error parsing image name %q", spec)
|
|
}
|
|
srcRef = srcRef2
|
|
}
|
|
|
|
if ref := srcRef.DockerReference(); ref != nil {
|
|
name = srcRef.DockerReference().Name()
|
|
if tagged, ok := srcRef.DockerReference().(reference.NamedTagged); ok {
|
|
name = name + ":" + tagged.Tag()
|
|
}
|
|
}
|
|
|
|
destRef, err := is.Transport.ParseStoreReference(store, name)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "error parsing full image name %q", name)
|
|
}
|
|
|
|
policy, err := signature.DefaultPolicy(sc)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
policyContext, err := signature.NewPolicyContext(policy)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
logrus.Debugf("copying %q to %q", spec, name)
|
|
|
|
err = cp.Image(policyContext, destRef, srcRef, getCopyOptions(options.ReportWriter))
|
|
return err
|
|
}
|