Refactor saving OCI spec to disk into separate function

It will be needed for restarting containers

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>

Closes: #462
Approved by: baude
This commit is contained in:
Matthew Heon
2018-03-07 11:15:00 -05:00
committed by Atomic Bot
parent 04d56c9fe3
commit d23b9fd4ed
3 changed files with 36 additions and 31 deletions

View File

@ -1,11 +1,9 @@
package libpod
import (
"encoding/json"
"io/ioutil"
"os"
gosignal "os/signal"
"path/filepath"
"strconv"
"time"
@ -63,22 +61,6 @@ func (c *Container) Init() (err error) {
}
}()
// If the OCI spec already exists, we need to replace it
// Cannot guarantee some things, e.g. network namespaces, have the same
// paths
jsonPath := filepath.Join(c.bundlePath(), "config.json")
if _, err := os.Stat(jsonPath); err != nil {
if !os.IsNotExist(err) {
return errors.Wrapf(err, "error doing stat on container %s spec", c.ID())
}
// The spec does not exist, we're fine
} else {
// The spec exists, need to remove it
if err := os.Remove(jsonPath); err != nil {
return errors.Wrapf(err, "error replacing runtime spec for container %s", c.ID())
}
}
// Copy /etc/resolv.conf to the container's rundir
runDirResolv, err := c.generateResolvConf()
if err != nil {
@ -101,20 +83,11 @@ func (c *Container) Init() (err error) {
if err != nil {
return err
}
c.runningSpec = spec
// Save the OCI spec to disk
fileJSON, err := json.Marshal(c.runningSpec)
if err != nil {
return errors.Wrapf(err, "error exporting runtime spec for container %s to JSON", c.ID())
if err := c.saveSpec(spec); err != nil {
return err
}
if err := ioutil.WriteFile(jsonPath, fileJSON, 0644); err != nil {
return errors.Wrapf(err, "error writing runtime spec JSON to file for container %s", c.ID())
}
logrus.Debugf("Created OCI spec for container %s at %s", c.ID(), jsonPath)
c.state.ConfigPath = jsonPath
// With the spec complete, do an OCI create
if err := c.runtime.ociRuntime.createContainer(c, c.config.CgroupParent); err != nil {