cmd, podman: handle --pod new:POD
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
27f5145445
commit
65d7f22720
|
|
@ -1,8 +1,10 @@
|
||||||
package containers
|
package containers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/containers/common/pkg/config"
|
"github.com/containers/common/pkg/config"
|
||||||
"github.com/containers/libpod/cmd/podman/common"
|
"github.com/containers/libpod/cmd/podman/common"
|
||||||
|
|
@ -105,6 +107,10 @@ func create(cmd *cobra.Command, args []string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, err := createPodIfNecessary(s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
report, err := registry.ContainerEngine().ContainerCreate(registry.GetContext(), s)
|
report, err := registry.ContainerEngine().ContainerCreate(registry.GetContext(), s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -205,3 +211,25 @@ func openCidFile(cidfile string) (*os.File, error) {
|
||||||
}
|
}
|
||||||
return cidFile, nil
|
return cidFile, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// createPodIfNecessary automatically creates a pod when requested. if the pod name
|
||||||
|
// has the form new:ID, the pod ID is created and the name in the spec generator is replaced
|
||||||
|
// with ID.
|
||||||
|
func createPodIfNecessary(s *specgen.SpecGenerator) (*entities.PodCreateReport, error) {
|
||||||
|
if !strings.HasPrefix(s.Pod, "new:") {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
podName := strings.Replace(s.Pod, "new:", "", 1)
|
||||||
|
if len(podName) < 1 {
|
||||||
|
return nil, errors.Errorf("new pod name must be at least one character")
|
||||||
|
}
|
||||||
|
createOptions := entities.PodCreateOptions{
|
||||||
|
Name: podName,
|
||||||
|
Infra: true,
|
||||||
|
Net: &entities.NetOptions{
|
||||||
|
PublishPorts: s.PortMappings,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
s.Pod = podName
|
||||||
|
return registry.ContainerEngine().PodCreate(context.Background(), createOptions)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,10 @@ func run(cmd *cobra.Command, args []string) error {
|
||||||
}
|
}
|
||||||
runOpts.Spec = s
|
runOpts.Spec = s
|
||||||
|
|
||||||
|
if _, err := createPodIfNecessary(s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
report, err := registry.ContainerEngine().ContainerRun(registry.GetContext(), runOpts)
|
report, err := registry.ContainerEngine().ContainerRun(registry.GetContext(), runOpts)
|
||||||
// report.ExitCode is set by ContainerRun even it it returns an error
|
// report.ExitCode is set by ContainerRun even it it returns an error
|
||||||
if report != nil {
|
if report != nil {
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,10 @@ func MakeContainer(ctx context.Context, rt *libpod.Runtime, s *specgen.SpecGener
|
||||||
// If joining a pod, retrieve the pod for use.
|
// If joining a pod, retrieve the pod for use.
|
||||||
var pod *libpod.Pod
|
var pod *libpod.Pod
|
||||||
if s.Pod != "" {
|
if s.Pod != "" {
|
||||||
foundPod, err := rt.LookupPod(s.Pod)
|
pod, err = rt.LookupPod(s.Pod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "error retrieving pod %s", s.Pod)
|
return nil, errors.Wrapf(err, "error retrieving pod %s", s.Pod)
|
||||||
}
|
}
|
||||||
pod = foundPod
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set defaults for unset namespaces
|
// Set defaults for unset namespaces
|
||||||
|
|
@ -130,12 +129,8 @@ func createContainerOptions(rt *libpod.Runtime, s *specgen.SpecGenerator, pod *l
|
||||||
logrus.Debugf("setting container name %s", s.Name)
|
logrus.Debugf("setting container name %s", s.Name)
|
||||||
options = append(options, libpod.WithName(s.Name))
|
options = append(options, libpod.WithName(s.Name))
|
||||||
}
|
}
|
||||||
if s.Pod != "" {
|
if pod != nil {
|
||||||
pod, err := rt.LookupPod(s.Pod)
|
logrus.Debugf("adding container to pod %s", pod.Name)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
logrus.Debugf("adding container to pod %s", s.Pod)
|
|
||||||
options = append(options, rt.WithPod(pod))
|
options = append(options, rt.WithPod(pod))
|
||||||
}
|
}
|
||||||
destinations := []string{}
|
destinations := []string{}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue