From e8fb01e1ed68f0c9deaa86fe93d95d5e5e5a546c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miloslav=20Trma=C4=8D?= Date: Sat, 16 Sep 2017 04:12:33 +0200 Subject: [PATCH] Add global --override-arch and --override-os options This e.g. allows accessing Linux images on macOS. --- cmd/skopeo/layers.go | 6 +++++- cmd/skopeo/main.go | 10 ++++++++++ cmd/skopeo/utils.go | 6 ++++-- completions/bash/skopeo | 2 ++ docs/skopeo.1.md | 4 ++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/cmd/skopeo/layers.go b/cmd/skopeo/layers.go index 875f1a84..eab0a6d0 100644 --- a/cmd/skopeo/layers.go +++ b/cmd/skopeo/layers.go @@ -24,11 +24,15 @@ var layersCmd = cli.Command{ if c.NArg() == 0 { return errors.New("Usage: layers imageReference [layer...]") } + ctx, err := contextFromGlobalOptions(c, "") + if err != nil { + return err + } rawSource, err := parseImageSource(c, c.Args()[0]) if err != nil { return err } - src, err := image.FromSource(rawSource) + src, err := image.FromSource(ctx, rawSource) if err != nil { if closeErr := rawSource.Close(); closeErr != nil { return errors.Wrapf(err, " (close error: %v)", closeErr) diff --git a/cmd/skopeo/main.go b/cmd/skopeo/main.go index aee3f3d4..f2b77cfd 100644 --- a/cmd/skopeo/main.go +++ b/cmd/skopeo/main.go @@ -50,6 +50,16 @@ func createApp() *cli.App { Value: "", Usage: "use registry configuration files in `DIR` (e.g. for container signature storage)", }, + cli.StringFlag{ + Name: "override-arch", + Value: "", + Usage: "use `ARCH` instead of the architecture of the machine for choosing images", + }, + cli.StringFlag{ + Name: "override-os", + Value: "", + Usage: "use `OS` instead of the running OS for choosing images", + }, } app.Before = func(c *cli.Context) error { if c.GlobalBool("debug") { diff --git a/cmd/skopeo/utils.go b/cmd/skopeo/utils.go index 0655ee68..b7aae9e7 100644 --- a/cmd/skopeo/utils.go +++ b/cmd/skopeo/utils.go @@ -11,8 +11,10 @@ import ( func contextFromGlobalOptions(c *cli.Context, flagPrefix string) (*types.SystemContext, error) { ctx := &types.SystemContext{ - RegistriesDirPath: c.GlobalString("registries.d"), - DockerCertPath: c.String(flagPrefix + "cert-dir"), + RegistriesDirPath: c.GlobalString("registries.d"), + ArchitectureChoice: c.GlobalString("override-arch"), + OSChoice: c.GlobalString("override-os"), + DockerCertPath: c.String(flagPrefix + "cert-dir"), // DEPRECATED: keep this here for backward compatibility, but override // them if per subcommand flags are provided (see below). DockerInsecureSkipTLSVerify: !c.GlobalBoolT("tls-verify"), diff --git a/completions/bash/skopeo b/completions/bash/skopeo index 10f621f0..b69fbf08 100644 --- a/completions/bash/skopeo +++ b/completions/bash/skopeo @@ -103,6 +103,8 @@ _skopeo_skopeo() { local options_with_args=" --policy --registries.d + --override-arch + --override-os " local boolean_options=" --insecure-policy diff --git a/docs/skopeo.1.md b/docs/skopeo.1.md index bf050a4e..ab11f0e2 100644 --- a/docs/skopeo.1.md +++ b/docs/skopeo.1.md @@ -43,6 +43,10 @@ Most commands refer to container images, using a _transport_`:`_details_ format. **--registries.d** _dir_ use registry configuration files in _dir_ (e.g. for container signature storage), overriding the default path. + **--override-arch** _arch_ Use _arch_ instead of the architecture of the machine for choosing images. + + **--override-os** _OS_ Use _OS_ instead of the running OS for choosing images. + **--help**|**-h** Show help **--version**|**-v** print the version number