mirror of
https://github.com/containers/podman.git
synced 2025-07-02 08:47:43 +08:00
Merge pull request #22700 from Luap99/libpod-inspect-API-v4
remote API: restore v4 payload in container inspect
This commit is contained in:
@ -89,6 +89,10 @@ type InspectContainerConfig struct {
|
|||||||
SdNotifyMode string `json:"sdNotifyMode,omitempty"`
|
SdNotifyMode string `json:"sdNotifyMode,omitempty"`
|
||||||
// SdNotifySocket is the NOTIFY_SOCKET in use by/configured for the container.
|
// SdNotifySocket is the NOTIFY_SOCKET in use by/configured for the container.
|
||||||
SdNotifySocket string `json:"sdNotifySocket,omitempty"`
|
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
|
// UnmarshalJSON allow compatibility with podman V4 API
|
||||||
@ -136,6 +140,28 @@ func (insp *InspectContainerConfig) UnmarshalJSON(data []byte) error {
|
|||||||
return nil
|
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.
|
// InspectRestartPolicy holds information about the container's restart policy.
|
||||||
type InspectRestartPolicy struct {
|
type InspectRestartPolicy struct {
|
||||||
// Name contains the container's restart policy.
|
// Name contains the container's restart policy.
|
||||||
|
@ -144,6 +144,11 @@ func GetContainer(w http.ResponseWriter, r *http.Request) {
|
|||||||
utils.InternalServerError(w, err)
|
utils.InternalServerError(w, err)
|
||||||
return
|
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)
|
utils.WriteResponse(w, http.StatusOK, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ podman pull $IMAGE &>/dev/null
|
|||||||
# Ensure clean slate
|
# Ensure clean slate
|
||||||
podman rm -a -f &>/dev/null
|
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
|
# Check exists for none such
|
||||||
t GET libpod/containers/nonesuch/exists 404
|
t GET libpod/containers/nonesuch/exists 404
|
||||||
@ -44,7 +44,15 @@ t GET libpod/containers/foo/json 200 \
|
|||||||
.State.Status=running \
|
.State.Status=running \
|
||||||
.ImageName=$IMAGE \
|
.ImageName=$IMAGE \
|
||||||
.Config.Cmd[0]=top \
|
.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
|
# List processes of the container
|
||||||
t GET libpod/containers/foo/top 200 \
|
t GET libpod/containers/foo/top 200 \
|
||||||
|
@ -305,7 +305,7 @@ function t() {
|
|||||||
url=http://$HOST:$PORT
|
url=http://$HOST:$PORT
|
||||||
case "$path" in
|
case "$path" in
|
||||||
/*) url="$url$path" ;;
|
/*) url="$url$path" ;;
|
||||||
libpod/*) url="$url/v4.0.0/$path" ;;
|
libpod/*) url="$url/v5.0.0/$path" ;;
|
||||||
*) url="$url/v1.41/$path" ;;
|
*) url="$url/v1.41/$path" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
Reference in New Issue
Block a user