Skip to content

Commit 9edee29

Browse files
committed
*: pluggable transports
Signed-off-by: Antonio Murdaca <[email protected]>
1 parent a074c66 commit 9edee29

13 files changed

Lines changed: 82 additions & 36 deletions

File tree

copy/copy.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import (
1313
"github.com/Sirupsen/logrus"
1414
"github.com/containers/image/image"
1515
"github.com/containers/image/manifest"
16+
"github.com/containers/image/registeredtransports"
1617
"github.com/containers/image/signature"
17-
"github.com/containers/image/transports"
1818
"github.com/containers/image/types"
1919
"github.com/opencontainers/go-digest"
2020
"github.com/pkg/errors"
@@ -106,14 +106,14 @@ func Image(policyContext *signature.PolicyContext, destRef, srcRef types.ImageRe
106106

107107
dest, err := destRef.NewImageDestination(options.DestinationCtx)
108108
if err != nil {
109-
return errors.Wrapf(err, "Error initializing destination %s", transports.ImageName(destRef))
109+
return errors.Wrapf(err, "Error initializing destination %s", registeredtransports.ImageName(destRef))
110110
}
111111
defer dest.Close()
112112
destSupportedManifestMIMETypes := dest.SupportedManifestMIMETypes()
113113

114114
rawSource, err := srcRef.NewImageSource(options.SourceCtx, destSupportedManifestMIMETypes)
115115
if err != nil {
116-
return errors.Wrapf(err, "Error initializing source %s", transports.ImageName(srcRef))
116+
return errors.Wrapf(err, "Error initializing source %s", registeredtransports.ImageName(srcRef))
117117
}
118118
unparsedImage := image.UnparsedFromSource(rawSource)
119119
defer func() {
@@ -128,13 +128,13 @@ func Image(policyContext *signature.PolicyContext, destRef, srcRef types.ImageRe
128128
}
129129
src, err := image.FromUnparsedImage(unparsedImage)
130130
if err != nil {
131-
return errors.Wrapf(err, "Error initializing image from source %s", transports.ImageName(srcRef))
131+
return errors.Wrapf(err, "Error initializing image from source %s", registeredtransports.ImageName(srcRef))
132132
}
133133
unparsedImage = nil
134134
defer src.Close()
135135

136136
if src.IsMultiImage() {
137-
return errors.Errorf("can not copy %s: manifest contains multiple images", transports.ImageName(srcRef))
137+
return errors.Errorf("can not copy %s: manifest contains multiple images", registeredtransports.ImageName(srcRef))
138138
}
139139

140140
var sigs [][]byte
@@ -206,7 +206,7 @@ func Image(policyContext *signature.PolicyContext, destRef, srcRef types.ImageRe
206206
}
207207
dockerReference := dest.Reference().DockerReference()
208208
if dockerReference == nil {
209-
return errors.Errorf("Cannot determine canonical Docker reference for destination %s", transports.ImageName(dest.Reference()))
209+
return errors.Errorf("Cannot determine canonical Docker reference for destination %s", registeredtransports.ImageName(dest.Reference()))
210210
}
211211

212212
writeReport("Signing manifest\n")

directory/directory_transport.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,15 @@ import (
1010
"github.com/containers/image/directory/explicitfilepath"
1111
"github.com/containers/image/docker/reference"
1212
"github.com/containers/image/image"
13+
"github.com/containers/image/registeredtransports"
1314
"github.com/containers/image/types"
1415
"github.com/opencontainers/go-digest"
1516
)
1617

18+
func init() {
19+
registeredtransports.Register(Transport)
20+
}
21+
1722
// Transport is an ImageTransport for directory paths.
1823
var Transport = dirTransport{}
1924

docker/docker_transport.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ import (
66

77
"github.com/containers/image/docker/policyconfiguration"
88
"github.com/containers/image/docker/reference"
9+
"github.com/containers/image/registeredtransports"
910
"github.com/containers/image/types"
1011
"github.com/pkg/errors"
1112
)
1213

14+
func init() {
15+
registeredtransports.Register(Transport)
16+
}
17+
1318
// Transport is an ImageTransport for Docker registry-hosted images.
1419
var Transport = dockerTransport{}
1520

oci/layout/oci_transport.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,16 @@ import (
99
"github.com/containers/image/directory/explicitfilepath"
1010
"github.com/containers/image/docker/reference"
1111
"github.com/containers/image/image"
12+
"github.com/containers/image/registeredtransports"
1213
"github.com/containers/image/types"
1314
"github.com/opencontainers/go-digest"
1415
"github.com/pkg/errors"
1516
)
1617

18+
func init() {
19+
registeredtransports.Register(Transport)
20+
}
21+
1722
// Transport is an ImageTransport for OCI directories.
1823
var Transport = ociTransport{}
1924

openshift/openshift_transport.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@ import (
88
"github.com/containers/image/docker/policyconfiguration"
99
"github.com/containers/image/docker/reference"
1010
genericImage "github.com/containers/image/image"
11+
"github.com/containers/image/registeredtransports"
1112
"github.com/containers/image/types"
1213
"github.com/pkg/errors"
1314
)
1415

16+
func init() {
17+
registeredtransports.Register(Transport)
18+
}
19+
1520
// Transport is an ImageTransport for OpenShift registry-hosted images.
1621
var Transport = openshiftTransport{}
1722

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package registeredtransports
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/containers/image/types"
7+
)
8+
9+
// KnownTransports is a registry of known ImageTransport instances.
10+
var KnownTransports map[string]types.ImageTransport
11+
12+
func init() {
13+
KnownTransports = make(map[string]types.ImageTransport)
14+
}
15+
16+
// Register TODO(runcom)
17+
func Register(t types.ImageTransport) {
18+
name := t.Name()
19+
if _, ok := KnownTransports[name]; ok {
20+
panic(fmt.Sprintf("Duplicate image transport name %s", name))
21+
}
22+
KnownTransports[name] = t
23+
}
24+
25+
// ImageName converts a types.ImageReference into an URL-like image name, which MUST be such that
26+
// ParseImageName(ImageName(reference)) returns an equivalent reference.
27+
//
28+
// This is the generally recommended way to refer to images in the UI.
29+
//
30+
// NOTE: The returned string is not promised to be equal to the original input to ParseImageName;
31+
// e.g. default attribute values omitted by the user may be filled in in the return value, or vice versa.
32+
func ImageName(ref types.ImageReference) string {
33+
return ref.Transport().Name() + ":" + ref.StringWithinTransport()
34+
}

signature/policy_config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"path/filepath"
2121

2222
"github.com/containers/image/docker/reference"
23-
"github.com/containers/image/transports"
23+
"github.com/containers/image/registeredtransports"
2424
"github.com/containers/image/types"
2525
"github.com/pkg/errors"
2626
)
@@ -122,7 +122,7 @@ func (m *policyTransportsMap) UnmarshalJSON(data []byte) error {
122122
// So, use a temporary map of pointers-to-slices and convert.
123123
tmpMap := map[string]*PolicyTransportScopes{}
124124
if err := paranoidUnmarshalJSONObject(data, func(key string) interface{} {
125-
transport, ok := transports.KnownTransports[key]
125+
transport, ok := registeredtransports.KnownTransports[key]
126126
if !ok {
127127
return nil
128128
}

signature/policy_config_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/containers/image/directory"
1111
"github.com/containers/image/docker"
12+
_ "github.com/containers/image/openshift"
1213
"github.com/containers/image/types"
1314
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"

signature/policy_eval_simple.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ package signature
55
import (
66
"fmt"
77

8-
"github.com/containers/image/transports"
8+
"github.com/containers/image/registeredtransports"
99
"github.com/containers/image/types"
1010
)
1111

@@ -20,9 +20,9 @@ func (pr *prInsecureAcceptAnything) isRunningImageAllowed(image types.UnparsedIm
2020
}
2121

2222
func (pr *prReject) isSignatureAuthorAccepted(image types.UnparsedImage, sig []byte) (signatureAcceptanceResult, *Signature, error) {
23-
return sarRejected, nil, PolicyRequirementError(fmt.Sprintf("Any signatures for image %s are rejected by policy.", transports.ImageName(image.Reference())))
23+
return sarRejected, nil, PolicyRequirementError(fmt.Sprintf("Any signatures for image %s are rejected by policy.", registeredtransports.ImageName(image.Reference())))
2424
}
2525

2626
func (pr *prReject) isRunningImageAllowed(image types.UnparsedImage) (bool, error) {
27-
return false, PolicyRequirementError(fmt.Sprintf("Running image %s is rejected by policy.", transports.ImageName(image.Reference())))
27+
return false, PolicyRequirementError(fmt.Sprintf("Running image %s is rejected by policy.", registeredtransports.ImageName(image.Reference())))
2828
}

signature/policy_reference_match.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"fmt"
77

88
"github.com/containers/image/docker/reference"
9-
"github.com/containers/image/transports"
9+
"github.com/containers/image/registeredtransports"
1010
"github.com/containers/image/types"
1111
)
1212

@@ -15,7 +15,7 @@ func parseImageAndDockerReference(image types.UnparsedImage, s2 string) (referen
1515
r1 := image.Reference().DockerReference()
1616
if r1 == nil {
1717
return nil, nil, PolicyRequirementError(fmt.Sprintf("Docker reference match attempted on image %s with no known Docker reference identity",
18-
transports.ImageName(image.Reference())))
18+
registeredtransports.ImageName(image.Reference())))
1919
}
2020
r2, err := reference.ParseNormalizedNamed(s2)
2121
if err != nil {

0 commit comments

Comments
 (0)