From 8b195816941e4c6e5e9591bcf7b8fbdbf106cd01 Mon Sep 17 00:00:00 2001 From: Mike Brown Date: Tue, 27 Oct 2015 14:23:44 -0500 Subject: [PATCH] adding support for --bundle -b to start, restore, and spec; fixes issue #310 Signed-off-by: Mike Brown --- main.go | 18 ++++++++++-------- restore.go | 19 ++++++++++--------- spec.go | 31 +++++++++++++++---------------- start.go | 19 ++++++++++--------- 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/main.go b/main.go index ac011f61..d1afe630 100644 --- a/main.go +++ b/main.go @@ -9,9 +9,11 @@ import ( ) const ( - version = "0.3" - usage = `Open Container Initiative runtime - + version = "0.3" + specConfig = "config.json" + runtimeConfig = "runtime.json" + usage = `Open Container Initiative runtime + runc is a command line client for running applications packaged according to the Open Container Format (OCF) and is a compliant implementation of the Open Container Initiative specification. @@ -21,14 +23,14 @@ container runtime environment for applications. It can be used with your existing process monitoring tools and the container will be spawned as a direct child of the process supervisor. -After creating config files for your root filesystem with runc, you can execute a -container in your shell by running: +After creating config files for your root filesystem with runc, you can execute +a container in your shell by running: # cd /mycontainer - # runc start [ -c spec-config-file ] [ -r runtime-config-file ] + # runc start [ -b bundle ] -If not specified, the default value for the 'spec-config-file' is 'config.json', -and the default value for the 'runtime-config-file' is 'runtime.json'.` +If not specified, the default value for the 'bundle' is the current directory. +'Bundle' is the directory where '` + specConfig + `' and '` + runtimeConfig + `' must be located.` ) func main() { diff --git a/restore.go b/restore.go index 919e9c97..ea48c710 100644 --- a/restore.go +++ b/restore.go @@ -50,14 +50,9 @@ var restoreCommand = cli.Command{ Usage: "cgroups mode: 'soft' (default), 'full' and 'strict'.", }, cli.StringFlag{ - Name: "config-file, c", - Value: "config.json", - Usage: "path to spec file for writing", - }, - cli.StringFlag{ - Name: "runtime-file, r", - Value: "runtime.json", - Usage: "path for runtime file for writing", + Name: "bundle, b", + Value: "", + Usage: "path to the root of the bundle directory", }, }, Action: func(context *cli.Context) { @@ -65,7 +60,13 @@ var restoreCommand = cli.Command{ if imagePath == "" { imagePath = getDefaultImagePath(context) } - spec, rspec, err := loadSpec(context.String("config-file"), context.String("runtime-file")) + bundle := context.String("bundle") + if bundle != "" { + if err := os.Chdir(bundle); err != nil { + fatal(err) + } + } + spec, rspec, err := loadSpec(specConfig, runtimeConfig) if err != nil { fatal(err) } diff --git a/spec.go b/spec.go index 69cf47b7..35e9277a 100644 --- a/spec.go +++ b/spec.go @@ -26,14 +26,9 @@ var specCommand = cli.Command{ Usage: "create a new specification file", Flags: []cli.Flag{ cli.StringFlag{ - Name: "config-file, c", - Value: "config.json", - Usage: "path to spec config file for writing", - }, - cli.StringFlag{ - Name: "runtime-file, r", - Value: "runtime.json", - Usage: "path to runtime config file for writing", + Name: "bundle, b", + Value: "", + Usage: "path to the root of the bundle directory", }, }, Action: func(context *cli.Context) { @@ -247,26 +242,30 @@ var specCommand = cli.Command{ } return nil } - cName := context.String("config-file") - rName := context.String("runtime-file") - if err := checkNoFile(cName); err != nil { + bundle := context.String("bundle") + if bundle != "" { + if err := os.Chdir(bundle); err != nil { + fatal(err) + } + } + if err := checkNoFile(specConfig); err != nil { logrus.Fatal(err) } - if err := checkNoFile(rName); err != nil { + if err := checkNoFile(runtimeConfig); err != nil { logrus.Fatal(err) } data, err := json.MarshalIndent(&spec, "", "\t") if err != nil { logrus.Fatal(err) } - if err := ioutil.WriteFile(cName, data, 0666); err != nil { + if err := ioutil.WriteFile(specConfig, data, 0666); err != nil { logrus.Fatal(err) } rdata, err := json.MarshalIndent(&rspec, "", "\t") if err != nil { logrus.Fatal(err) } - if err := ioutil.WriteFile(rName, rdata, 0666); err != nil { + if err := ioutil.WriteFile(runtimeConfig, rdata, 0666); err != nil { logrus.Fatal(err) } }, @@ -297,7 +296,7 @@ func loadSpec(cPath, rPath string) (spec *specs.LinuxSpec, rspec *specs.LinuxRun cf, err := os.Open(cPath) if err != nil { if os.IsNotExist(err) { - return nil, nil, fmt.Errorf("JSON specification file at %s not found", cPath) + return nil, nil, fmt.Errorf("JSON specification file %s not found", cPath) } return spec, rspec, err } @@ -306,7 +305,7 @@ func loadSpec(cPath, rPath string) (spec *specs.LinuxSpec, rspec *specs.LinuxRun rf, err := os.Open(rPath) if err != nil { if os.IsNotExist(err) { - return nil, nil, fmt.Errorf("JSON runtime config file at %s not found", rPath) + return nil, nil, fmt.Errorf("JSON runtime config file %s not found", rPath) } return spec, rspec, err } diff --git a/start.go b/start.go index e047e610..719a79ae 100644 --- a/start.go +++ b/start.go @@ -22,18 +22,19 @@ var startCommand = cli.Command{ Usage: "create and run a container", Flags: []cli.Flag{ cli.StringFlag{ - Name: "config-file, c", - Value: "config.json", - Usage: "path to spec config file", - }, - cli.StringFlag{ - Name: "runtime-file, r", - Value: "runtime.json", - Usage: "path to runtime config file", + Name: "bundle, b", + Value: "", + Usage: "path to the root of the bundle directory", }, }, Action: func(context *cli.Context) { - spec, rspec, err := loadSpec(context.String("config-file"), context.String("runtime-file")) + bundle := context.String("bundle") + if bundle != "" { + if err := os.Chdir(bundle); err != nil { + fatal(err) + } + } + spec, rspec, err := loadSpec(specConfig, runtimeConfig) if err != nil { fatal(err) }