Skip to content

Commit a27fd9b

Browse files
committed
Allow artifact add to override org.opencontainers.image.title annotation
Signed-off-by: Daniel J Walsh <[email protected]>
1 parent bc571ae commit a27fd9b

File tree

4 files changed

+52
-14
lines changed

4 files changed

+52
-14
lines changed

docs/source/markdown/podman-artifact-add.1.md.in

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ the `--append` option, the original creation timestamp is preserved.
2121

2222
@@option annotation.manifest
2323

24-
Note: Set annotations for each file being added.
24+
Note: Set annotations for each file being added. The annotation "org.opencontainers.image.title" is used
25+
to name the layer when mounted into a container, this title must be unigue for each artifact layer.
2526

2627
#### **--append**, **-a**
2728

@@ -78,6 +79,13 @@ Add files to an existing OCI artifact
7879
$ podman artifact add --append quay.io/myimage/myartifact:latest /home/user/config.yaml
7980
```
8081

82+
Create artifact with the layer title name being replaced, and then mount into a container.
83+
84+
```
85+
podman artifact add --annotation org.opencontainers.image.title=smollm2 quay.io/myreg/smollm2:latest blobs/sha256-4d2396b16114669389d7555c15a1592aad584750310f648edad5ca8c4eccda17
86+
podman run --mount type=artifact,source=quay.io/myreg/smollm2:latest,destination=/mnt fedora ls -l /mnt
87+
smollm2
88+
```
8189

8290
## SEE ALSO
8391
**[podman(1)](podman.1.md)**, **[podman-artifact(1)](podman-artifact.1.md)**

pkg/machine/ocipull/ociartifact.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const (
2727
artifactRegistry = "quay.io"
2828
artifactRepo = "podman"
2929
artifactImageName = "machine-os"
30-
artifactOriginalName = "org.opencontainers.image.title"
30+
artifactOriginalName = specV1.AnnotationTitle
3131
machineOS = "linux"
3232
)
3333

test/e2e/artifact_test.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/containers/podman/v5/utils"
1515
. "github.com/onsi/ginkgo/v2"
1616
. "github.com/onsi/gomega"
17+
imgspec "github.com/opencontainers/image-spec/specs-go/v1"
1718
)
1819

1920
const (
@@ -99,8 +100,12 @@ var _ = Describe("Podman artifact", func() {
99100
It("podman artifact add with options", func() {
100101
yamlType := "text/yaml"
101102
artifact1Name := "localhost/test/artifact1"
103+
artifact2Name := "localhost/test/artifact2"
104+
artifact3Name := "localhost/test/artifact3"
102105
artifact1File, err := createArtifactFile(1024)
103106
Expect(err).ToNot(HaveOccurred())
107+
artifact2File, err := createArtifactFile(1024)
108+
Expect(err).ToNot(HaveOccurred())
104109

105110
artifactType := "octet/foobar"
106111
annotation1 := "color=blue"
@@ -115,9 +120,26 @@ var _ = Describe("Podman artifact", func() {
115120
Expect(a.Manifest.Layers[0].Annotations["flavor"]).To(Equal("lemon"))
116121
Expect(a.Manifest.Layers[0].MediaType).To(Equal(yamlType))
117122

118-
failSession := podmanTest.Podman([]string{"artifact", "add", "--annotation", "org.opencontainers.image.title=foobar", "foobar", artifact1File})
123+
title := RandomString(12)
124+
annotation3 := fmt.Sprintf("%s=%s", imgspec.AnnotationTitle, title)
125+
podmanTest.PodmanExitCleanly("artifact", "add", "--annotation", annotation3, artifact2Name, artifact1File)
126+
a = podmanTest.InspectArtifact(artifact2Name)
127+
Expect(a.Manifest.Layers[0].Annotations[imgspec.AnnotationTitle]).To(Equal(title))
128+
129+
failSession := podmanTest.Podman([]string{"artifact", "add", "--append", "--annotation", annotation3, artifact2Name, artifact2File})
119130
failSession.WaitWithDefaultTimeout()
120-
Expect(failSession).Should(ExitWithError(125, "Error: cannot override filename with org.opencontainers.image.title annotation"))
131+
Expect(failSession).Should(ExitWithError(125, "Error: duplicate layers org.opencontainers.image.title labels within an artifact not allowed"))
132+
133+
title = RandomString(12)
134+
annotation3 = fmt.Sprintf("%s=%s", imgspec.AnnotationTitle, title)
135+
podmanTest.PodmanExitCleanly("artifact", "add", "--append", "--annotation", annotation3, artifact2Name, artifact2File)
136+
a = podmanTest.InspectArtifact(artifact2Name)
137+
Expect(a.Manifest.Layers[1].Annotations[imgspec.AnnotationTitle]).To(Equal(title))
138+
139+
failSession = podmanTest.Podman([]string{"artifact", "add", "--annotation", annotation3, artifact3Name, artifact1File, artifact2File})
140+
failSession.WaitWithDefaultTimeout()
141+
Expect(failSession).Should(ExitWithError(125, "Error: duplicate layers org.opencontainers.image.title labels within an artifact not allowed"))
142+
121143
})
122144

123145
It("podman artifact add multiple", func() {
@@ -480,9 +502,9 @@ var _ = Describe("Podman artifact", func() {
480502
Expect(a.Manifest.Layers).To(HaveLen(3))
481503

482504
for _, l := range a.Manifest.Layers {
483-
layersNames[l.Annotations["org.opencontainers.image.title"]] += 1
505+
layersNames[l.Annotations[imgspec.AnnotationTitle]] += 1
484506

485-
if l.Annotations["org.opencontainers.image.title"] == filepath.Base(artifact3File) {
507+
if l.Annotations[imgspec.AnnotationTitle] == filepath.Base(artifact3File) {
486508
Expect(l.Annotations["color"]).To(Equal("blue"))
487509
} else {
488510
Expect(l.Annotations).To(HaveLen(1))

vendor/go.podman.io/common/pkg/libartifact/store/store.go

Lines changed: 16 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)