diff options
author | Matthew Heon <matthew.heon@pm.me> | 2019-04-15 13:39:22 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-05-01 10:16:23 -0400 |
commit | 869466eb25a41ab0e6daf9bc6ab951d7300d3f9d (patch) | |
tree | 9c0df02d0cb5fea29b6d38ec5199e7ffd9aa3484 | |
parent | eea77b5ae3e7fb8a60d438a79d3a4b30d35bb67c (diff) | |
download | podman-869466eb25a41ab0e6daf9bc6ab951d7300d3f9d.tar.gz podman-869466eb25a41ab0e6daf9bc6ab951d7300d3f9d.tar.bz2 podman-869466eb25a41ab0e6daf9bc6ab951d7300d3f9d.zip |
Add a new function for converting a CreateConfig
Right now, there are two major API calls necessary to turn a
filled-in CreateConfig into the options and OCI spec necessary to
make a libpod Container. I'm intending on refactoring both of
these extensively to unify a few things, so make a common
frontend to both that will prevent API changes from leaking out
of the package.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
-rw-r--r-- | cmd/podman/shared/create.go | 7 | ||||
-rw-r--r-- | pkg/spec/containerconfig.go | 22 | ||||
-rw-r--r-- | pkg/spec/createconfig.go | 2 | ||||
-rw-r--r-- | pkg/spec/spec.go | 2 |
4 files changed, 25 insertions, 8 deletions
diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go index 48476e177..a1b7cee1c 100644 --- a/cmd/podman/shared/create.go +++ b/cmd/podman/shared/create.go @@ -732,12 +732,7 @@ type namespace interface { } func CreateContainerFromCreateConfig(r *libpod.Runtime, createConfig *cc.CreateConfig, ctx context.Context, pod *libpod.Pod) (*libpod.Container, error) { - runtimeSpec, err := cc.CreateConfigToOCISpec(createConfig) - if err != nil { - return nil, err - } - - options, err := createConfig.GetContainerCreateOptions(r, pod) + runtimeSpec, options, err := createConfig.MakeContainerConfig(r, pod) if err != nil { return nil, err } diff --git a/pkg/spec/containerconfig.go b/pkg/spec/containerconfig.go new file mode 100644 index 000000000..62108c012 --- /dev/null +++ b/pkg/spec/containerconfig.go @@ -0,0 +1,22 @@ +package createconfig + +import ( + "github.com/containers/libpod/libpod" + spec "github.com/opencontainers/runtime-spec/specs-go" +) + +// MakeContainerConfig generates all configuration necessary to start a +// container with libpod from a completed CreateConfig struct. +func (config *CreateConfig) MakeContainerConfig(runtime *libpod.Runtime, pod *libpod.Pod) (*spec.Spec, []libpod.CtrCreateOption, error) { + runtimeSpec, err := config.createConfigToOCISpec() + if err != nil { + return nil, nil, err + } + + options, err := config.getContainerCreateOptions(runtime, pod) + if err != nil { + return nil, nil, err + } + + return runtimeSpec, options, nil +} diff --git a/pkg/spec/createconfig.go b/pkg/spec/createconfig.go index 9c674d9f1..76ce8032c 100644 --- a/pkg/spec/createconfig.go +++ b/pkg/spec/createconfig.go @@ -397,7 +397,7 @@ func (c *CreateConfig) createExitCommand() ([]string, error) { } // GetContainerCreateOptions takes a CreateConfig and returns a slice of CtrCreateOptions -func (c *CreateConfig) GetContainerCreateOptions(runtime *libpod.Runtime, pod *libpod.Pod) ([]libpod.CtrCreateOption, error) { +func (c *CreateConfig) getContainerCreateOptions(runtime *libpod.Runtime, pod *libpod.Pod) ([]libpod.CtrCreateOption, error) { var options []libpod.CtrCreateOption var portBindings []ocicni.PortMapping var err error diff --git a/pkg/spec/spec.go b/pkg/spec/spec.go index 383eeadf3..4c839921c 100644 --- a/pkg/spec/spec.go +++ b/pkg/spec/spec.go @@ -89,7 +89,7 @@ func getAvailableGids() (int64, error) { } // CreateConfigToOCISpec parses information needed to create a container into an OCI runtime spec -func CreateConfigToOCISpec(config *CreateConfig) (*spec.Spec, error) { //nolint +func (config *CreateConfig) createConfigToOCISpec() (*spec.Spec, error) { //nolint cgroupPerm := "ro" g, err := generate.New("linux") if err != nil { |