From a333fb34ef643d84d04a28dd03b7fe48e7a47730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Mon, 24 May 2021 00:11:58 +0300 Subject: [PATCH] cmdlxcconfig --- BUILD | 1 + internal/cmdlxcconfig/BUILD | 13 ++++++++ internal/cmdlxcconfig/cmdlxcconfig.go | 45 +++++++++++++++++++++++++++ internal/cmdrootfs/cmdrootfs.go | 12 +++---- main.go | 7 ++--- 5 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 internal/cmdlxcconfig/BUILD create mode 100644 internal/cmdlxcconfig/cmdlxcconfig.go diff --git a/BUILD b/BUILD index c9adc08..a5a2102 100644 --- a/BUILD +++ b/BUILD @@ -6,6 +6,7 @@ go_library( importpath = "github.com/motiejus/code/undocker", visibility = ["//visibility:private"], deps = [ + "//src/undocker/internal/cmdlxcconfig:go_default_library", "//src/undocker/internal/cmdrootfs:go_default_library", "@com_github_jessevdk_go_flags//:go_default_library", ], diff --git a/internal/cmdlxcconfig/BUILD b/internal/cmdlxcconfig/BUILD new file mode 100644 index 0000000..c738ba3 --- /dev/null +++ b/internal/cmdlxcconfig/BUILD @@ -0,0 +1,13 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["cmdlxcconfig.go"], + importpath = "github.com/motiejus/code/undocker/internal/cmdlxcconfig", + visibility = ["//src/undocker:__subpackages__"], + deps = [ + "//src/undocker/lxcconfig:go_default_library", + "@com_github_jessevdk_go_flags//:go_default_library", + "@org_uber_go_multierr//:go_default_library", + ], +) diff --git a/internal/cmdlxcconfig/cmdlxcconfig.go b/internal/cmdlxcconfig/cmdlxcconfig.go new file mode 100644 index 0000000..9feb357 --- /dev/null +++ b/internal/cmdlxcconfig/cmdlxcconfig.go @@ -0,0 +1,45 @@ +package cmdlxcconfig + +import ( + "errors" + "os" + + goflags "github.com/jessevdk/go-flags" + "github.com/motiejus/code/undocker/lxcconfig" + "go.uber.org/multierr" +) + +// Command is "lxcconfig" command +type Command struct { + PositionalArgs struct { + Infile goflags.Filename `long:"infile" description:"Input tarball"` + Outfile string `long:"outfile" description:"Output path, stdout is '-'"` + } `positional-args:"yes" required:"yes"` +} + +// Execute executes lxcconfig Command +func (c *Command) Execute(args []string) (err error) { + if len(args) != 0 { + return errors.New("too many args") + } + + rd, err := os.Open(string(c.PositionalArgs.Infile)) + if err != nil { + return err + } + defer func() { err = multierr.Append(err, rd.Close()) }() + + var out *os.File + outf := string(c.PositionalArgs.Outfile) + if outf == "-" { + out = os.Stdout + } else { + out, err = os.Create(outf) + if err != nil { + return err + } + } + defer func() { err = multierr.Append(err, out.Close()) }() + + return lxcconfig.LXCConfig(rd, out) +} diff --git a/internal/cmdrootfs/cmdrootfs.go b/internal/cmdrootfs/cmdrootfs.go index 1e2b8cf..b53add4 100644 --- a/internal/cmdrootfs/cmdrootfs.go +++ b/internal/cmdrootfs/cmdrootfs.go @@ -9,28 +9,28 @@ import ( "go.uber.org/multierr" ) -// CmdRootFS is "rootfs" command -type CmdRootFS struct { +// Command is "rootfs" command +type Command struct { PositionalArgs struct { Infile goflags.Filename `long:"infile" description:"Input tarball"` Outfile string `long:"outfile" description:"Output path, stdout is '-'"` } `positional-args:"yes" required:"yes"` } -// Execute executes CmdRootFS -func (r *CmdRootFS) Execute(args []string) (err error) { +// Execute executes rootfs Command +func (c *Command) Execute(args []string) (err error) { if len(args) != 0 { return errors.New("too many args") } - rd, err := os.Open(string(r.PositionalArgs.Infile)) + rd, err := os.Open(string(c.PositionalArgs.Infile)) if err != nil { return err } defer func() { err = multierr.Append(err, rd.Close()) }() var out *os.File - outf := string(r.PositionalArgs.Outfile) + outf := string(c.PositionalArgs.Outfile) if outf == "-" { out = os.Stdout } else { diff --git a/main.go b/main.go index 69c7a55..dd87ca3 100644 --- a/main.go +++ b/main.go @@ -4,16 +4,15 @@ import ( "os" goflags "github.com/jessevdk/go-flags" + "github.com/motiejus/code/undocker/internal/cmdlxcconfig" "github.com/motiejus/code/undocker/internal/cmdrootfs" ) type ( params struct { - RootFS cmdrootfs.CmdRootFS `command:"rootfs" description:"Unpack a docker container image to a single filesystem tarball"` - Manifest cmdManifest `command:"manifest"` + RootFS cmdrootfs.Command `command:"rootfs" description:"Unpack a docker container image to a single filesystem tarball"` + LXCConfig cmdlxcconfig.Command `command:"lxcconfig" description:"Create an LXC-compatible container configuration"` } - - cmdManifest struct{} // stub ) func main() {