Description
openedon Jul 18, 2024
Issue Description
If the last line of the health check output is not terminated with a newline character it is not captured in the .State.Health.Log[].Output field.
This is a common scenario when using curl to test a REST API endpoint, Django REST Framework for example does not end the compact response in \n.
"hello" -> ""
"hello\n" -> "hello"
"hello\nworld" -> "hello"
"hello\nworld\n" -> "hello\nworld"
Workaround health-cmd: /bin/sh -c 'curl -fs -A healthcheck/1.0 http://localhost:8080/api/v1/endpoint && echo'
Steps to reproduce the issue
Steps to reproduce the issue
$ podman run -it --rm --name hc-test --health-cmd 'printf "hello"' registry.access.redhat.com/ubi9/ubi read
$ podman inspect hc-test -f '{{json .State.Health}}' | python -m json.tool
Describe the results you received
{
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2024-07-18T22:24:43.367244649+02:00",
"End": "2024-07-18T22:24:43.546221894+02:00",
"ExitCode": 0,
"Output": ""
}
]
}
Describe the results you expected
{
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2024-07-18T22:26:07.126152522+02:00",
"End": "2024-07-18T22:26:07.305904487+02:00",
"ExitCode": 0,
"Output": "hello"
}
]
}
podman info output
host:
arch: amd64
buildahVersion: 1.36.0
cgroupControllers:
- memory
- pids
cgroupManager: systemd
cgroupVersion: v2
conmon:
package: conmon-2.1.12-1.el9.x86_64
path: /usr/bin/conmon
version: 'conmon version 2.1.12, commit: 7ba5bd6c81ff2c10e07aee8c4281d12a2878fa12'
cpuUtilization:
idlePercent: 95.84
systemPercent: 1.03
userPercent: 3.13
cpus: 2
databaseBackend: sqlite
distribution:
distribution: centos
version: "9"
eventLogger: journald
freeLocks: 2040
hostname: host.example.org
idMappings:
gidmap:
- container_id: 0
host_id: 1001
size: 1
- container_id: 1
host_id: 165536
size: 65536
uidmap:
- container_id: 0
host_id: 1001
size: 1
- container_id: 1
host_id: 165536
size: 65536
kernel: 5.14.0-474.el9.x86_64
linkmode: dynamic
logDriver: journald
memFree: 1748193280
memTotal: 7983706112
networkBackend: netavark
networkBackendInfo:
backend: netavark
dns:
package: aardvark-dns-1.9.0-1.el9.x86_64
path: /usr/libexec/podman/aardvark-dns
version: aardvark-dns 1.9.0
package: netavark-1.11.0-1.el9.x86_64
path: /usr/libexec/podman/netavark
version: netavark 1.11.0
ociRuntime:
name: crun
package: crun-1.15-1.el9.x86_64
path: /usr/bin/crun
version: |-
crun version 1.15
commit: e6eacaf4034e84185fd8780ac9262bbf57082278
rundir: /run/user/1001/crun
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +YAJL
os: linux
pasta:
executable: /bin/pasta
package: passt-0^20240624.g1ee2eca-1.el9.x86_64
version: |
pasta 0^20240624.g1ee2eca-1.el9.x86_64
Copyright Red Hat
GNU General Public License, version 2 or later
<https://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
remoteSocket:
exists: false
path: /run/user/1001/podman/podman.sock
rootlessNetworkCmd: pasta
security:
apparmorEnabled: false
capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
rootless: true
seccompEnabled: true
seccompProfilePath: /usr/share/containers/seccomp.json
selinuxEnabled: true
serviceIsRemote: false
slirp4netns:
executable: /bin/slirp4netns
package: slirp4netns-1.3.1-1.el9.x86_64
version: |-
slirp4netns version 1.3.1
commit: e5e368c4f5db6ae75c2fce786e31eef9da6bf236
libslirp: 4.4.0
SLIRP_CONFIG_VERSION_MAX: 3
libseccomp: 2.5.2
swapFree: 5368705024
swapTotal: 5368705024
uptime: 2h 26m 0.00s (Approximately 0.08 days)
variant: ""
plugins:
authorization: null
log:
- k8s-file
- none
- passthrough
- journald
network:
- bridge
- macvlan
- ipvlan
volume:
- local
registries:
search:
- registry.access.redhat.com
- registry.redhat.io
- docker.io
store:
configFile: /home/user/.config/containers/storage.conf
containerStore:
number: 5
paused: 0
running: 5
stopped: 0
graphDriverName: overlay
graphOptions: {}
graphRoot: /home/user/.local/share/containers/storage
graphRootAllocated: 46544191488
graphRootUsed: 10407297024
graphStatus:
Backing Filesystem: xfs
Native Overlay Diff: "true"
Supports d_type: "true"
Supports shifting: "false"
Supports volatile: "true"
Using metacopy: "false"
imageCopyTmpDir: /var/tmp
imageStore:
number: 53
runRoot: /run/user/1001/containers
transientStore: false
volumePath: /home/user/.local/share/containers/storage/volumes
version:
APIVersion: 5.1.1
Built: 1719592558
BuiltTime: Fri Jun 28 18:35:58 2024
GitCommit: ""
GoVersion: go1.22.4 (Red Hat 1.22.4-1.el9)
Os: linux
OsArch: linux/amd64
Version: 5.1.1
Podman in a container
No
Privileged Or Rootless
Rootless
Upstream Latest Release
No
Additional environment details
CentOS Stream 9, Podman 5.1.1 diff to 5.1.2 did not reveal anything that would fix this.
Additional information
If the health check is terminated by \n the output is successfully captured.
$ podman run -it --rm --name hc-test --health-cmd 'printf "hello\n"' registry.access.redhat.com/ubi9/ubi read