-
Notifications
You must be signed in to change notification settings - Fork 42
/
image_spec_generators.go
69 lines (60 loc) · 1.79 KB
/
image_spec_generators.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package imageplugin
import (
digest "github.com/opencontainers/go-digest"
specs "github.com/opencontainers/image-spec/specs-go"
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
)
const (
ImageSpecSchemaVersion = 2
ImageSpecBaseDirectoryAnnotationKey = "org.cloudfoundry.experimental.image.base-directory"
)
func GenerateImageConfig(layerSHAs ...string) imagespec.Image {
var digests []digest.Digest
for _, sha := range layerSHAs {
digest := toDigest(sha)
digests = append(digests, digest)
}
return imagespec.Image{
Architecture: "amd64",
OS: "linux",
RootFS: imagespec.RootFS{
DiffIDs: digests,
Type: "layers",
},
}
}
func GenerateIndex(manifestSHA string) imagespec.Index {
return imagespec.Index{
Versioned: specs.Versioned{SchemaVersion: ImageSpecSchemaVersion},
Manifests: []imagespec.Descriptor{{
Digest: toDigest(manifestSHA),
MediaType: "application/vnd.oci.image.manifest.v1+json",
}},
}
}
func GenerateManifest(layers []Layer, configSHA string) imagespec.Manifest {
var ociLayers []imagespec.Descriptor
for _, layer := range layers {
ociLayer := imagespec.Descriptor{
Digest: toDigest(layer.SHA256),
MediaType: layer.MediaType,
}
if layer.URL != "" {
ociLayer.URLs = []string{layer.URL}
}
if layer.BaseDir != "" {
ociLayer.Annotations = map[string]string{
ImageSpecBaseDirectoryAnnotationKey: layer.BaseDir,
}
}
ociLayers = append(ociLayers, ociLayer)
}
return imagespec.Manifest{
Versioned: specs.Versioned{SchemaVersion: ImageSpecSchemaVersion},
Config: imagespec.Descriptor{MediaType: "application/vnd.oci.image.config.v1+json", Digest: toDigest(configSHA)},
Layers: ociLayers,
}
}
func toDigest(sha256Hex string) digest.Digest {
return digest.Digest("sha256:" + sha256Hex)
}