Merge pull request #22700 from Luap99/libpod-inspect-API-v4

remote API: restore v4 payload in container inspect
This commit is contained in:
openshift-merge-bot[bot]
2024-05-22 12:32:29 +00:00
committed by GitHub
4 changed files with 42 additions and 3 deletions

View File

@ -89,6 +89,10 @@ type InspectContainerConfig struct {
SdNotifyMode string `json:"sdNotifyMode,omitempty"`
// SdNotifySocket is the NOTIFY_SOCKET in use by/configured for the container.
SdNotifySocket string `json:"sdNotifySocket,omitempty"`
// V4PodmanCompatMarshal indicates that the json marshaller should
// use the old v4 inspect format to keep API compatibility.
V4PodmanCompatMarshal bool `json:"-"`
}
// UnmarshalJSON allow compatibility with podman V4 API
@ -136,6 +140,28 @@ func (insp *InspectContainerConfig) UnmarshalJSON(data []byte) error {
return nil
}
func (insp *InspectContainerConfig) MarshalJSON() ([]byte, error) {
// the alias is needed otherwise MarshalJSON will
type Alias InspectContainerConfig
conf := (*Alias)(insp)
if !insp.V4PodmanCompatMarshal {
return json.Marshal(conf)
}
type v4InspectContainerConfig struct {
Entrypoint string `json:"Entrypoint"`
StopSignal uint `json:"StopSignal"`
*Alias
}
stopSignal, _ := signal.ParseSignal(insp.StopSignal)
newConf := &v4InspectContainerConfig{
Entrypoint: strings.Join(insp.Entrypoint, " "),
StopSignal: uint(stopSignal),
Alias: conf,
}
return json.Marshal(newConf)
}
// InspectRestartPolicy holds information about the container's restart policy.
type InspectRestartPolicy struct {
// Name contains the container's restart policy.

View File

@ -144,6 +144,11 @@ func GetContainer(w http.ResponseWriter, r *http.Request) {
utils.InternalServerError(w, err)
return
}
// if client request old v4 payload we should return v4 compatible json
if _, err := utils.SupportedVersion(r, ">=5.0.0"); err != nil {
data.Config.V4PodmanCompatMarshal = true
}
utils.WriteResponse(w, http.StatusOK, data)
}

View File

@ -8,7 +8,7 @@ podman pull $IMAGE &>/dev/null
# Ensure clean slate
podman rm -a -f &>/dev/null
podman run -d --name foo $IMAGE top
podman run -d --name foo --entrypoint='["sh","-c"]' $IMAGE top
# Check exists for none such
t GET libpod/containers/nonesuch/exists 404
@ -44,7 +44,15 @@ t GET libpod/containers/foo/json 200 \
.State.Status=running \
.ImageName=$IMAGE \
.Config.Cmd[0]=top \
.Name=foo
.Name=foo \
.Config.StopSignal="SIGTERM" \
.Config.Entrypoint[0]="sh" \
.Config.Entrypoint[1]="-c"
# now check v4 request return old compatible output
t GET /v4.0.0/libpod/containers/foo/json 200 \
.Config.StopSignal=15 \
.Config.Entrypoint="sh -c"
# List processes of the container
t GET libpod/containers/foo/top 200 \

View File

@ -305,7 +305,7 @@ function t() {
url=http://$HOST:$PORT
case "$path" in
/*) url="$url$path" ;;
libpod/*) url="$url/v4.0.0/$path" ;;
libpod/*) url="$url/v5.0.0/$path" ;;
*) url="$url/v1.41/$path" ;;
esac
fi