-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8565 from jwhonce/wip/testing
hack/podman-socat captures the API stream
- Loading branch information
Showing
1 changed file
with
122 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
#!/bin/bash -e | ||
# Execute podman while capturing the API stream | ||
# | ||
# Script will run an instance of podman sand-boxed, the API stream will be captured and then formatted for readability. | ||
|
||
if [[ $(id -u) != 0 ]]; then | ||
echo >&2 "$0 must be run as root." | ||
exit 2 | ||
fi | ||
|
||
if ! command -v socat >/dev/null 2>&1; then | ||
echo 1>&2 "socat not found on PATH" | ||
fi | ||
|
||
PODMAN=${PODMAN:-podman} | ||
if ! command -v "$PODMAN" >/dev/null 2>&1; then | ||
echo 1>&2 "$PODMAN not found on PATH" | ||
fi | ||
|
||
function usage() { | ||
echo 1>&2 $0 '[-v] [-h]' | ||
} | ||
|
||
while getopts "vh" arg; do | ||
case $arg in | ||
v) | ||
VERBOSE='-v' | ||
export PODMAN_LOG_LEVEL=debug | ||
;; | ||
h) | ||
usage | ||
exit 0 | ||
;; | ||
\?) | ||
usage | ||
exit 2 | ||
;; | ||
esac | ||
done | ||
shift $((OPTIND - 1)) | ||
|
||
function cleanup() { | ||
set +xeuo pipefail | ||
rm -r "$1" | ||
kill -9 $REAP_PIDS | ||
|
||
sed -e 's/^> /\nClient Request> /' -e 's/^< /\nServer Response< /' -i /tmp/podman-socat.log | ||
} | ||
|
||
# Create temporary directory for storage | ||
export TMPDIR=$(mktemp -d /tmp/podman.XXXXXXXXXX) | ||
trap "cleanup $TMPDIR" EXIT | ||
|
||
# Need locations to store stuff | ||
mkdir -p "${TMPDIR}"/{podman,crio,crio-run,cni/net.d,ctnr,tunnel} | ||
|
||
export REGISTRIES_CONFIG_PATH=${TMPDIR}/registry.conf | ||
cat >"$REGISTRIES_CONFIG_PATH" <<-EOT | ||
[registries.search] | ||
registries = ['docker.io'] | ||
[registries.insecure] | ||
registries = [] | ||
[registries.block] | ||
registries = [] | ||
EOT | ||
|
||
export CNI_CONFIG_PATH=${TMPDIR}/cni/net.d | ||
cat >"$CNI_CONFIG_PATH"/87-podman-bridge.conflist <<-EOT | ||
{ | ||
"cniVersion": "0.3.0", | ||
"name": "podman", | ||
"plugins": [{ | ||
"type": "bridge", | ||
"bridge": "cni0", | ||
"isGateway": true, | ||
"ipMasq": true, | ||
"ipam": { | ||
"type": "host-local", | ||
"subnet": "10.88.0.0/16", | ||
"routes": [{ | ||
"dst": "0.0.0.0/0" | ||
}] | ||
} | ||
}, | ||
{ | ||
"type": "portmap", | ||
"capabilities": { | ||
"portMappings": true | ||
} | ||
} | ||
] | ||
} | ||
EOT | ||
|
||
PODMAN_ARGS="--storage-driver=vfs \ | ||
--root=${TMPDIR}/crio \ | ||
--runroot=${TMPDIR}/crio-run \ | ||
--cni-config-dir=$CNI_CONFIG_PATH \ | ||
--cgroup-manager=systemd \ | ||
" | ||
if [[ -n $VERBOSE ]]; then | ||
PODMAN_ARGS="$PODMAN_ARGS --log-level=$PODMAN_LOG_LEVEL --syslog=true" | ||
fi | ||
PODMAN="$PODMAN $PODMAN_ARGS" | ||
|
||
PODMAN_HOST="${TMPDIR}/podman/podman-socat.sock" | ||
SOCAT_HOST="${TMPDIR}/podman/podman.sock" | ||
|
||
cat <<-EOT | ||
Podman service running at unix:$SOCAT_HOST | ||
See /tmp/podman-socat.log for API stream capture | ||
See /tmp/podman-service.log for service logging | ||
usage: sudo bin/podman-remote --url unix:$SOCAT_HOST images | ||
^C to exit | ||
EOT | ||
|
||
$PODMAN system service --timeout=0 "unix:$PODMAN_HOST" >/tmp/podman-service.log 2>&1 & | ||
REAP_PIDS=$! | ||
|
||
socat -v "UNIX-LISTEN:$SOCAT_HOST",fork,reuseaddr,unlink-early "UNIX-CONNECT:$PODMAN_HOST" >/tmp/podman-socat.log 2>&1 |