Skip to content

Commit

Permalink
Merge pull request #22781 from openshift-cherrypick-robot/cherry-pick…
Browse files Browse the repository at this point in the history
…-22700-to-v5.1

[v5.1] remote API: restore v4 payload in container inspect
  • Loading branch information
openshift-merge-bot[bot] committed May 22, 2024
2 parents bcbc8b0 + 65d26b0 commit 2afd6cb
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 3 deletions.
26 changes: 26 additions & 0 deletions libpod/define/container_inspect.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down
5 changes: 5 additions & 0 deletions pkg/api/handlers/libpod/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand Down
12 changes: 10 additions & 2 deletions test/apiv2/25-containersMore.at
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 \
Expand Down
2 changes: 1 addition & 1 deletion test/apiv2/test-apiv2
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 2afd6cb

Please sign in to comment.