Add --os to manifest add

Add --os to manifest add for overriding the os field.

Signed-off-by: Qi Wang <qiwan@redhat.com>
This commit is contained in:
Qi Wang
2020-04-24 14:54:30 -04:00
parent 3c3adac528
commit 2f3734b143
8 changed files with 31 additions and 0 deletions

View File

@ -34,6 +34,7 @@ func init() {
flags.StringSliceVar(&manifestAddOpts.Annotation, "annotation", nil, "set an `annotation` for the specified image") flags.StringSliceVar(&manifestAddOpts.Annotation, "annotation", nil, "set an `annotation` for the specified image")
flags.StringVar(&manifestAddOpts.Arch, "arch", "", "override the `architecture` of the specified image") flags.StringVar(&manifestAddOpts.Arch, "arch", "", "override the `architecture` of the specified image")
flags.StringSliceVar(&manifestAddOpts.Features, "features", nil, "override the `features` of the specified image") flags.StringSliceVar(&manifestAddOpts.Features, "features", nil, "override the `features` of the specified image")
flags.StringVar(&manifestAddOpts.OS, "os", "", "override the `OS` of the specified image")
flags.StringVar(&manifestAddOpts.OSVersion, "os-version", "", "override the OS `version` of the specified image") flags.StringVar(&manifestAddOpts.OSVersion, "os-version", "", "override the OS `version` of the specified image")
flags.StringVar(&manifestAddOpts.Variant, "variant", "", "override the `Variant` of the specified image") flags.StringVar(&manifestAddOpts.Variant, "variant", "", "override the `Variant` of the specified image")
} }

View File

@ -1760,6 +1760,7 @@ _podman_manifest_add() {
--annotation --annotation
--arch --arch
--features --features
--os
--os-version --os-version
--variant --variant
" "

View File

@ -38,6 +38,13 @@ retrieved from the image's configuration information.
Specify the features list which the list or index records as requirements for Specify the features list which the list or index records as requirements for
the image. This option is rarely used. the image. This option is rarely used.
**--os**
Override the OS which the list or index records as a requirement for the image.
If *imagename* refers to a manifest list or image index, the OS information
will be retrieved from it. Otherwise, it will be retrieved from the image's
configuration information.
**--os-version** **--os-version**
Specify the OS version which the list or index records as a requirement for the Specify the OS version which the list or index records as a requirement for the

View File

@ -19,6 +19,7 @@ type ManifestAddOpts struct {
Arch string `json:"arch"` Arch string `json:"arch"`
Features []string `json:"features"` Features []string `json:"features"`
Images []string `json:"images"` Images []string `json:"images"`
OS string `json:"os"`
OSVersion string `json:"os_version"` OSVersion string `json:"os_version"`
Variant string `json:"variant"` Variant string `json:"variant"`
} }
@ -86,6 +87,11 @@ func addManifestToList(ref types.ImageReference, list manifests.List, systemCont
if err != nil { if err != nil {
return nil, err return nil, err
} }
if opts.OS != "" {
if err := list.SetOS(d, opts.OS); err != nil {
return nil, err
}
}
if len(opts.OSVersion) > 0 { if len(opts.OSVersion) > 0 {
if err := list.SetOSVersion(d, opts.OSVersion); err != nil { if err := list.SetOSVersion(d, opts.OSVersion); err != nil {
return nil, err return nil, err

View File

@ -10,6 +10,7 @@ type ManifestAddOptions struct {
Arch string `json:"arch" schema:"arch"` Arch string `json:"arch" schema:"arch"`
Features []string `json:"features" schema:"features"` Features []string `json:"features" schema:"features"`
Images []string `json:"images" schema:"images"` Images []string `json:"images" schema:"images"`
OS string `json:"os" schema:"os"`
OSVersion string `json:"os_version" schema:"os_version"` OSVersion string `json:"os_version" schema:"os_version"`
Variant string `json:"variant" schema:"variant"` Variant string `json:"variant" schema:"variant"`
} }

View File

@ -79,6 +79,7 @@ func (ir *ImageEngine) ManifestAdd(ctx context.Context, opts entities.ManifestAd
Arch: opts.Arch, Arch: opts.Arch,
Features: opts.Features, Features: opts.Features,
Images: opts.Images, Images: opts.Images,
OS: opts.OS,
OSVersion: opts.OSVersion, OSVersion: opts.OSVersion,
Variant: opts.Variant, Variant: opts.Variant,
} }

View File

@ -41,6 +41,7 @@ func (ir *ImageEngine) ManifestAdd(ctx context.Context, opts entities.ManifestAd
Arch: opts.Arch, Arch: opts.Arch,
Features: opts.Features, Features: opts.Features,
Images: opts.Images, Images: opts.Images,
OS: opts.OS,
OSVersion: opts.OSVersion, OSVersion: opts.OSVersion,
Variant: opts.Variant, Variant: opts.Variant,
} }

View File

@ -85,4 +85,17 @@ var _ = Describe("Podman manifest", func() {
Expect(session.OutputToString()).To(ContainSubstring(imageListPPC64LEInstanceDigest)) Expect(session.OutputToString()).To(ContainSubstring(imageListPPC64LEInstanceDigest))
Expect(session.OutputToString()).To(ContainSubstring(imageListS390XInstanceDigest)) Expect(session.OutputToString()).To(ContainSubstring(imageListS390XInstanceDigest))
}) })
It("podman manifest add --os", func() {
session := podmanTest.Podman([]string{"manifest", "create", "foo"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"manifest", "add", "--os", "bar", "foo", imageList})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
session = podmanTest.Podman([]string{"manifest", "inspect", "foo"})
session.WaitWithDefaultTimeout()
Expect(session.ExitCode()).To(Equal(0))
Expect(session.OutputToString()).To(ContainSubstring(`"os": "bar"`))
})
}) })