mirror of https://github.com/containers/podman.git
pod config: add a `CreateCommand` field
Add a `CreateCommand` field to the pod config which includes the entire `os.Args` at pod-creation. Similar to the already existing field in a container config, we need this information to properly generate generic systemd unit files for pods. It's a prerequisite to support the `--new` flag for pods. Also add the `CreateCommand` to the pod-inspect data, which can come in handy for debugging, general inspection and certainly for the tests that are added along with the other changes. Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
This commit is contained in:
parent
7b85d5c6d2
commit
636881ece5
|
@ -18,6 +18,9 @@ type InspectPodData struct {
|
||||||
Namespace string `json:"Namespace,omitempty"`
|
Namespace string `json:"Namespace,omitempty"`
|
||||||
// Created is the time when the pod was created.
|
// Created is the time when the pod was created.
|
||||||
Created time.Time
|
Created time.Time
|
||||||
|
// CreateCommand is the full command plus arguments of the process the
|
||||||
|
// container has been created with.
|
||||||
|
CreateCommand []string `json:"CreateCommand,omitempty"`
|
||||||
// State represents the current state of the pod.
|
// State represents the current state of the pod.
|
||||||
State string `json:"State"`
|
State string `json:"State"`
|
||||||
// Hostname is the hostname that the pod will set.
|
// Hostname is the hostname that the pod will set.
|
||||||
|
|
|
@ -1538,6 +1538,18 @@ func WithPodHostname(hostname string) PodCreateOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithPodCreateCommand adds the full command plus arguments of the current
|
||||||
|
// process to the pod config.
|
||||||
|
func WithPodCreateCommand() PodCreateOption {
|
||||||
|
return func(pod *Pod) error {
|
||||||
|
if pod.valid {
|
||||||
|
return define.ErrPodFinalized
|
||||||
|
}
|
||||||
|
pod.config.CreateCommand = os.Args
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WithPodLabels sets the labels of a pod.
|
// WithPodLabels sets the labels of a pod.
|
||||||
func WithPodLabels(labels map[string]string) PodCreateOption {
|
func WithPodLabels(labels map[string]string) PodCreateOption {
|
||||||
return func(pod *Pod) error {
|
return func(pod *Pod) error {
|
||||||
|
|
|
@ -64,6 +64,10 @@ type PodConfig struct {
|
||||||
// Time pod was created
|
// Time pod was created
|
||||||
CreatedTime time.Time `json:"created"`
|
CreatedTime time.Time `json:"created"`
|
||||||
|
|
||||||
|
// CreateCommand is the full command plus arguments of the process the
|
||||||
|
// container has been created with.
|
||||||
|
CreateCommand []string `json:"CreateCommand,omitempty"`
|
||||||
|
|
||||||
// ID of the pod's lock
|
// ID of the pod's lock
|
||||||
LockID uint32 `json:"lockID"`
|
LockID uint32 `json:"lockID"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -489,6 +489,7 @@ func (p *Pod) Inspect() (*define.InspectPodData, error) {
|
||||||
Name: p.Name(),
|
Name: p.Name(),
|
||||||
Namespace: p.Namespace(),
|
Namespace: p.Namespace(),
|
||||||
Created: p.CreatedTime(),
|
Created: p.CreatedTime(),
|
||||||
|
CreateCommand: p.config.CreateCommand,
|
||||||
State: podState,
|
State: podState,
|
||||||
Hostname: p.config.Hostname,
|
Hostname: p.config.Hostname,
|
||||||
Labels: p.Labels(),
|
Labels: p.Labels(),
|
||||||
|
|
|
@ -93,5 +93,6 @@ func createPodOptions(p *specgen.PodSpecGenerator) ([]libpod.PodCreateOption, er
|
||||||
options = append(options, libpod.WithInfraContainerPorts(ports))
|
options = append(options, libpod.WithInfraContainerPorts(ports))
|
||||||
}
|
}
|
||||||
options = append(options, libpod.WithPodCgroups())
|
options = append(options, libpod.WithPodCgroups())
|
||||||
|
options = append(options, libpod.WithPodCreateCommand())
|
||||||
return options, nil
|
return options, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,4 +57,26 @@ var _ = Describe("Podman pod inspect", func() {
|
||||||
podData := inspect.InspectPodToJSON()
|
podData := inspect.InspectPodToJSON()
|
||||||
Expect(podData.ID).To(Equal(podid))
|
Expect(podData.ID).To(Equal(podid))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman pod inspect (CreateCommand)", func() {
|
||||||
|
podName := "myTestPod"
|
||||||
|
createCommand := []string{"pod", "create", "--name", podName, "--hostname", "rudolph", "--share", "net"}
|
||||||
|
|
||||||
|
// Create the pod.
|
||||||
|
session := podmanTest.Podman(createCommand)
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
// Inspect the pod and make sure that the create command is
|
||||||
|
// exactly how we created the pod.
|
||||||
|
inspect := podmanTest.Podman([]string{"pod", "inspect", podName})
|
||||||
|
inspect.WaitWithDefaultTimeout()
|
||||||
|
Expect(inspect.ExitCode()).To(Equal(0))
|
||||||
|
Expect(inspect.IsJSONOutputValid()).To(BeTrue())
|
||||||
|
podData := inspect.InspectPodToJSON()
|
||||||
|
// Let's get the last len(createCommand) items in the command.
|
||||||
|
inspectCreateCommand := podData.CreateCommand
|
||||||
|
index := len(inspectCreateCommand) - len(createCommand)
|
||||||
|
Expect(inspectCreateCommand[index:]).To(Equal(createCommand))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue