mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-09-09 17:17:53 +00:00
Add build-tagged splits for libimage-dependent code
The common v0.57.7 vendor bump added !remote build tags to libimage,
causing podman-remote builds to fail. This change splits files that
use libimage into separate _local and _remote variants:
- pkg/specgen/specgen_{local,remote}.go: Image field storage and methods
- pkg/api/handlers/types_local.go: ImageDataToImageInspect function
- cmd/podman/utils/error_local.go: ExitCodeFromBuildError function
This allows type definitions to be shared between remote and local
builds while keeping libimage-dependent implementations local-only.
Signed-off-by: Lokesh Mandvekar <lsm5@redhat.com>
This commit is contained in:
parent
b80a4693c2
commit
4231526e18
46 changed files with 503 additions and 235 deletions
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package containers
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package images
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package images
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -5,10 +5,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
buildahCLI "github.com/containers/buildah/pkg/cli"
|
||||
"github.com/containers/podman/v4/cmd/podman/registry"
|
||||
)
|
||||
|
||||
|
|
@ -25,29 +22,6 @@ func (o OutputErrors) PrintErrors() (lastError error) {
|
|||
return
|
||||
}
|
||||
|
||||
/*
|
||||
For remote client, server does not returns error with exit code
|
||||
|
||||
instead returns a message and we cast it to a new error.
|
||||
|
||||
Following function performs parsing on build error and returns
|
||||
exit status which was expected for this current build
|
||||
*/
|
||||
func ExitCodeFromBuildError(errorMsg string) (int, error) {
|
||||
if strings.Contains(errorMsg, "exit status") {
|
||||
errorSplit := strings.Split(errorMsg, " ")
|
||||
if errorSplit[len(errorSplit)-2] == "status" {
|
||||
tmpSplit := strings.Split(errorSplit[len(errorSplit)-1], "\n")
|
||||
exitCodeRemote, err := strconv.Atoi(tmpSplit[0])
|
||||
if err == nil {
|
||||
return exitCodeRemote, nil
|
||||
}
|
||||
return buildahCLI.ExecErrorCodeGeneric, err
|
||||
}
|
||||
}
|
||||
return buildahCLI.ExecErrorCodeGeneric, errors.New("message does not contains a valid exit code")
|
||||
}
|
||||
|
||||
// HandleOSExecError checks the given error for an exec.ExitError error and
|
||||
// sets the same podman exit code as the error.
|
||||
// No error will be returned in this case to make sure things like podman
|
||||
|
|
|
|||
33
cmd/podman/utils/error_local.go
Normal file
33
cmd/podman/utils/error_local.go
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
//go:build !remote
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
buildahCLI "github.com/containers/buildah/pkg/cli"
|
||||
)
|
||||
|
||||
/*
|
||||
For remote client, server does not returns error with exit code
|
||||
instead returns a message and we cast it to a new error.
|
||||
|
||||
Following function performs parsing on build error and returns
|
||||
exit status which was expected for this current build
|
||||
*/
|
||||
func ExitCodeFromBuildError(errorMsg string) (int, error) {
|
||||
if strings.Contains(errorMsg, "exit status") {
|
||||
errorSplit := strings.Split(errorMsg, " ")
|
||||
if errorSplit[len(errorSplit)-2] == "status" {
|
||||
tmpSplit := strings.Split(errorSplit[len(errorSplit)-1], "\n")
|
||||
exitCodeRemote, err := strconv.Atoi(tmpSplit[0])
|
||||
if err == nil {
|
||||
return exitCodeRemote, nil
|
||||
}
|
||||
return buildahCLI.ExecErrorCodeGeneric, err
|
||||
}
|
||||
}
|
||||
return buildahCLI.ExecErrorCodeGeneric, errors.New("message does not contains a valid exit code")
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
__podman_debug()
|
||||
{
|
||||
if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then
|
||||
if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then
|
||||
echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
|
||||
fi
|
||||
}
|
||||
|
|
@ -21,7 +21,7 @@ __podman_get_completion_results() {
|
|||
local requestComp lastParam lastChar args
|
||||
|
||||
# Prepare the command to request completions for the program.
|
||||
# Calling ${words[0]} instead of directly podman allows to handle aliases
|
||||
# Calling ${words[0]} instead of directly podman allows handling aliases
|
||||
args=("${words[@]:1}")
|
||||
requestComp="${words[0]} __complete ${args[*]}"
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ __podman_get_completion_results() {
|
|||
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
||||
__podman_debug "lastParam ${lastParam}, lastChar ${lastChar}"
|
||||
|
||||
if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
|
||||
if [[ -z ${cur} && ${lastChar} != = ]]; then
|
||||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go method.
|
||||
__podman_debug "Adding extra empty parameter"
|
||||
|
|
@ -39,7 +39,7 @@ __podman_get_completion_results() {
|
|||
# When completing a flag with an = (e.g., podman -n=<TAB>)
|
||||
# bash focuses on the part after the =, so we need to remove
|
||||
# the flag part from $cur
|
||||
if [[ "${cur}" == -*=* ]]; then
|
||||
if [[ ${cur} == -*=* ]]; then
|
||||
cur="${cur#*=}"
|
||||
fi
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ __podman_get_completion_results() {
|
|||
directive=${out##*:}
|
||||
# Remove the directive
|
||||
out=${out%:*}
|
||||
if [ "${directive}" = "${out}" ]; then
|
||||
if [[ ${directive} == "${out}" ]]; then
|
||||
# There is not directive specified
|
||||
directive=0
|
||||
fi
|
||||
|
|
@ -65,22 +65,36 @@ __podman_process_completion_results() {
|
|||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
local shellCompDirectiveKeepOrder=32
|
||||
|
||||
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
||||
if (((directive & shellCompDirectiveError) != 0)); then
|
||||
# Error code. No completion.
|
||||
__podman_debug "Received error from custom completion go code"
|
||||
return
|
||||
else
|
||||
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
if (((directive & shellCompDirectiveNoSpace) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
__podman_debug "Activating no space"
|
||||
compopt -o nospace
|
||||
else
|
||||
__podman_debug "No space directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
if (((directive & shellCompDirectiveKeepOrder) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
# no sort isn't supported for bash less than < 4.4
|
||||
if [[ ${BASH_VERSINFO[0]} -lt 4 || ( ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 4 ) ]]; then
|
||||
__podman_debug "No sort directive not supported in this version of bash"
|
||||
else
|
||||
__podman_debug "Activating keep order"
|
||||
compopt -o nosort
|
||||
fi
|
||||
else
|
||||
__podman_debug "No sort directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
if (((directive & shellCompDirectiveNoFileComp) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
__podman_debug "Activating no file completion"
|
||||
compopt +o default
|
||||
else
|
||||
|
|
@ -94,7 +108,7 @@ __podman_process_completion_results() {
|
|||
local activeHelp=()
|
||||
__podman_extract_activeHelp
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
if (((directive & shellCompDirectiveFilterFileExt) != 0)); then
|
||||
# File extension filtering
|
||||
local fullFilter filter filteringCmd
|
||||
|
||||
|
|
@ -107,13 +121,12 @@ __podman_process_completion_results() {
|
|||
filteringCmd="_filedir $fullFilter"
|
||||
__podman_debug "File filtering command: $filteringCmd"
|
||||
$filteringCmd
|
||||
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
|
||||
elif (((directive & shellCompDirectiveFilterDirs) != 0)); then
|
||||
# File completion for directories only
|
||||
|
||||
# Use printf to strip any trailing newline
|
||||
local subdir
|
||||
subdir=$(printf "%s" "${completions[0]}")
|
||||
if [ -n "$subdir" ]; then
|
||||
subdir=${completions[0]}
|
||||
if [[ -n $subdir ]]; then
|
||||
__podman_debug "Listing directories in $subdir"
|
||||
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
||||
else
|
||||
|
|
@ -128,7 +141,7 @@ __podman_process_completion_results() {
|
|||
__podman_handle_special_char "$cur" =
|
||||
|
||||
# Print the activeHelp statements before we finish
|
||||
if [ ${#activeHelp[*]} -ne 0 ]; then
|
||||
if ((${#activeHelp[*]} != 0)); then
|
||||
printf "\n";
|
||||
printf "%s\n" "${activeHelp[@]}"
|
||||
printf "\n"
|
||||
|
|
@ -152,17 +165,17 @@ __podman_extract_activeHelp() {
|
|||
local endIndex=${#activeHelpMarker}
|
||||
|
||||
while IFS='' read -r comp; do
|
||||
if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then
|
||||
if [[ ${comp:0:endIndex} == $activeHelpMarker ]]; then
|
||||
comp=${comp:endIndex}
|
||||
__podman_debug "ActiveHelp found: $comp"
|
||||
if [ -n "$comp" ]; then
|
||||
if [[ -n $comp ]]; then
|
||||
activeHelp+=("$comp")
|
||||
fi
|
||||
else
|
||||
# Not an activeHelp line but a normal completion
|
||||
completions+=("$comp")
|
||||
fi
|
||||
done < <(printf "%s\n" "${out}")
|
||||
done <<<"${out}"
|
||||
}
|
||||
|
||||
__podman_handle_completion_types() {
|
||||
|
|
@ -218,7 +231,7 @@ __podman_handle_standard_completion_case() {
|
|||
done < <(printf "%s\n" "${completions[@]}")
|
||||
|
||||
# If there is a single completion left, remove the description text
|
||||
if [ ${#COMPREPLY[*]} -eq 1 ]; then
|
||||
if ((${#COMPREPLY[*]} == 1)); then
|
||||
__podman_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
|
||||
comp="${COMPREPLY[0]%%$tab*}"
|
||||
__podman_debug "Removed description from single completion, which is now: ${comp}"
|
||||
|
|
@ -235,8 +248,8 @@ __podman_handle_special_char()
|
|||
if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then
|
||||
local word=${comp%"${comp##*${char}}"}
|
||||
local idx=${#COMPREPLY[*]}
|
||||
while [[ $((--idx)) -ge 0 ]]; do
|
||||
COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"}
|
||||
while ((--idx >= 0)); do
|
||||
COMPREPLY[idx]=${COMPREPLY[idx]#"$word"}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
|
@ -262,7 +275,7 @@ __podman_format_comp_descriptions()
|
|||
|
||||
# Make sure we can fit a description of at least 8 characters
|
||||
# if we are to align the descriptions.
|
||||
if [[ $maxdesclength -gt 8 ]]; then
|
||||
if ((maxdesclength > 8)); then
|
||||
# Add the proper number of spaces to align the descriptions
|
||||
for ((i = ${#comp} ; i < longest ; i++)); do
|
||||
comp+=" "
|
||||
|
|
@ -274,8 +287,8 @@ __podman_format_comp_descriptions()
|
|||
|
||||
# If there is enough space for any description text,
|
||||
# truncate the descriptions that are too long for the shell width
|
||||
if [ $maxdesclength -gt 0 ]; then
|
||||
if [ ${#desc} -gt $maxdesclength ]; then
|
||||
if ((maxdesclength > 0)); then
|
||||
if ((${#desc} > maxdesclength)); then
|
||||
desc=${desc:0:$(( maxdesclength - 1 ))}
|
||||
desc+="…"
|
||||
fi
|
||||
|
|
@ -296,9 +309,9 @@ __start_podman()
|
|||
# Call _init_completion from the bash-completion package
|
||||
# to prepare the arguments properly
|
||||
if declare -F _init_completion >/dev/null 2>&1; then
|
||||
_init_completion -n "=:" || return
|
||||
_init_completion -n =: || return
|
||||
else
|
||||
__podman_init_completion -n "=:" || return
|
||||
__podman_init_completion -n =: || return
|
||||
fi
|
||||
|
||||
__podman_debug
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
__podman-remote_debug()
|
||||
{
|
||||
if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then
|
||||
if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then
|
||||
echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
|
||||
fi
|
||||
}
|
||||
|
|
@ -21,7 +21,7 @@ __podman-remote_get_completion_results() {
|
|||
local requestComp lastParam lastChar args
|
||||
|
||||
# Prepare the command to request completions for the program.
|
||||
# Calling ${words[0]} instead of directly podman-remote allows to handle aliases
|
||||
# Calling ${words[0]} instead of directly podman-remote allows handling aliases
|
||||
args=("${words[@]:1}")
|
||||
requestComp="${words[0]} __complete ${args[*]}"
|
||||
|
||||
|
|
@ -29,7 +29,7 @@ __podman-remote_get_completion_results() {
|
|||
lastChar=${lastParam:$((${#lastParam}-1)):1}
|
||||
__podman-remote_debug "lastParam ${lastParam}, lastChar ${lastChar}"
|
||||
|
||||
if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
|
||||
if [[ -z ${cur} && ${lastChar} != = ]]; then
|
||||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go method.
|
||||
__podman-remote_debug "Adding extra empty parameter"
|
||||
|
|
@ -39,7 +39,7 @@ __podman-remote_get_completion_results() {
|
|||
# When completing a flag with an = (e.g., podman-remote -n=<TAB>)
|
||||
# bash focuses on the part after the =, so we need to remove
|
||||
# the flag part from $cur
|
||||
if [[ "${cur}" == -*=* ]]; then
|
||||
if [[ ${cur} == -*=* ]]; then
|
||||
cur="${cur#*=}"
|
||||
fi
|
||||
|
||||
|
|
@ -51,7 +51,7 @@ __podman-remote_get_completion_results() {
|
|||
directive=${out##*:}
|
||||
# Remove the directive
|
||||
out=${out%:*}
|
||||
if [ "${directive}" = "${out}" ]; then
|
||||
if [[ ${directive} == "${out}" ]]; then
|
||||
# There is not directive specified
|
||||
directive=0
|
||||
fi
|
||||
|
|
@ -65,22 +65,36 @@ __podman-remote_process_completion_results() {
|
|||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
local shellCompDirectiveKeepOrder=32
|
||||
|
||||
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
||||
if (((directive & shellCompDirectiveError) != 0)); then
|
||||
# Error code. No completion.
|
||||
__podman-remote_debug "Received error from custom completion go code"
|
||||
return
|
||||
else
|
||||
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
if (((directive & shellCompDirectiveNoSpace) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
__podman-remote_debug "Activating no space"
|
||||
compopt -o nospace
|
||||
else
|
||||
__podman-remote_debug "No space directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
|
||||
if [[ $(type -t compopt) = "builtin" ]]; then
|
||||
if (((directive & shellCompDirectiveKeepOrder) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
# no sort isn't supported for bash less than < 4.4
|
||||
if [[ ${BASH_VERSINFO[0]} -lt 4 || ( ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 4 ) ]]; then
|
||||
__podman-remote_debug "No sort directive not supported in this version of bash"
|
||||
else
|
||||
__podman-remote_debug "Activating keep order"
|
||||
compopt -o nosort
|
||||
fi
|
||||
else
|
||||
__podman-remote_debug "No sort directive not supported in this version of bash"
|
||||
fi
|
||||
fi
|
||||
if (((directive & shellCompDirectiveNoFileComp) != 0)); then
|
||||
if [[ $(type -t compopt) == builtin ]]; then
|
||||
__podman-remote_debug "Activating no file completion"
|
||||
compopt +o default
|
||||
else
|
||||
|
|
@ -94,7 +108,7 @@ __podman-remote_process_completion_results() {
|
|||
local activeHelp=()
|
||||
__podman-remote_extract_activeHelp
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
if (((directive & shellCompDirectiveFilterFileExt) != 0)); then
|
||||
# File extension filtering
|
||||
local fullFilter filter filteringCmd
|
||||
|
||||
|
|
@ -107,13 +121,12 @@ __podman-remote_process_completion_results() {
|
|||
filteringCmd="_filedir $fullFilter"
|
||||
__podman-remote_debug "File filtering command: $filteringCmd"
|
||||
$filteringCmd
|
||||
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
|
||||
elif (((directive & shellCompDirectiveFilterDirs) != 0)); then
|
||||
# File completion for directories only
|
||||
|
||||
# Use printf to strip any trailing newline
|
||||
local subdir
|
||||
subdir=$(printf "%s" "${completions[0]}")
|
||||
if [ -n "$subdir" ]; then
|
||||
subdir=${completions[0]}
|
||||
if [[ -n $subdir ]]; then
|
||||
__podman-remote_debug "Listing directories in $subdir"
|
||||
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
|
||||
else
|
||||
|
|
@ -128,7 +141,7 @@ __podman-remote_process_completion_results() {
|
|||
__podman-remote_handle_special_char "$cur" =
|
||||
|
||||
# Print the activeHelp statements before we finish
|
||||
if [ ${#activeHelp[*]} -ne 0 ]; then
|
||||
if ((${#activeHelp[*]} != 0)); then
|
||||
printf "\n";
|
||||
printf "%s\n" "${activeHelp[@]}"
|
||||
printf "\n"
|
||||
|
|
@ -152,17 +165,17 @@ __podman-remote_extract_activeHelp() {
|
|||
local endIndex=${#activeHelpMarker}
|
||||
|
||||
while IFS='' read -r comp; do
|
||||
if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then
|
||||
if [[ ${comp:0:endIndex} == $activeHelpMarker ]]; then
|
||||
comp=${comp:endIndex}
|
||||
__podman-remote_debug "ActiveHelp found: $comp"
|
||||
if [ -n "$comp" ]; then
|
||||
if [[ -n $comp ]]; then
|
||||
activeHelp+=("$comp")
|
||||
fi
|
||||
else
|
||||
# Not an activeHelp line but a normal completion
|
||||
completions+=("$comp")
|
||||
fi
|
||||
done < <(printf "%s\n" "${out}")
|
||||
done <<<"${out}"
|
||||
}
|
||||
|
||||
__podman-remote_handle_completion_types() {
|
||||
|
|
@ -218,7 +231,7 @@ __podman-remote_handle_standard_completion_case() {
|
|||
done < <(printf "%s\n" "${completions[@]}")
|
||||
|
||||
# If there is a single completion left, remove the description text
|
||||
if [ ${#COMPREPLY[*]} -eq 1 ]; then
|
||||
if ((${#COMPREPLY[*]} == 1)); then
|
||||
__podman-remote_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
|
||||
comp="${COMPREPLY[0]%%$tab*}"
|
||||
__podman-remote_debug "Removed description from single completion, which is now: ${comp}"
|
||||
|
|
@ -235,8 +248,8 @@ __podman-remote_handle_special_char()
|
|||
if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then
|
||||
local word=${comp%"${comp##*${char}}"}
|
||||
local idx=${#COMPREPLY[*]}
|
||||
while [[ $((--idx)) -ge 0 ]]; do
|
||||
COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"}
|
||||
while ((--idx >= 0)); do
|
||||
COMPREPLY[idx]=${COMPREPLY[idx]#"$word"}
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
|
@ -262,7 +275,7 @@ __podman-remote_format_comp_descriptions()
|
|||
|
||||
# Make sure we can fit a description of at least 8 characters
|
||||
# if we are to align the descriptions.
|
||||
if [[ $maxdesclength -gt 8 ]]; then
|
||||
if ((maxdesclength > 8)); then
|
||||
# Add the proper number of spaces to align the descriptions
|
||||
for ((i = ${#comp} ; i < longest ; i++)); do
|
||||
comp+=" "
|
||||
|
|
@ -274,8 +287,8 @@ __podman-remote_format_comp_descriptions()
|
|||
|
||||
# If there is enough space for any description text,
|
||||
# truncate the descriptions that are too long for the shell width
|
||||
if [ $maxdesclength -gt 0 ]; then
|
||||
if [ ${#desc} -gt $maxdesclength ]; then
|
||||
if ((maxdesclength > 0)); then
|
||||
if ((${#desc} > maxdesclength)); then
|
||||
desc=${desc:0:$(( maxdesclength - 1 ))}
|
||||
desc+="…"
|
||||
fi
|
||||
|
|
@ -296,9 +309,9 @@ __start_podman-remote()
|
|||
# Call _init_completion from the bash-completion package
|
||||
# to prepare the arguments properly
|
||||
if declare -F _init_completion >/dev/null 2>&1; then
|
||||
_init_completion -n "=:" || return
|
||||
_init_completion -n =: || return
|
||||
else
|
||||
__podman-remote_init_completion -n "=:" || return
|
||||
__podman-remote_init_completion -n =: || return
|
||||
fi
|
||||
|
||||
__podman-remote_debug
|
||||
|
|
|
|||
|
|
@ -55,6 +55,60 @@ function __podman_remote_perform_completion
|
|||
printf "%s\n" "$directiveLine"
|
||||
end
|
||||
|
||||
# this function limits calls to __podman_remote_perform_completion, by caching the result behind $__podman_remote_perform_completion_once_result
|
||||
function __podman_remote_perform_completion_once
|
||||
__podman_remote_debug "Starting __podman_remote_perform_completion_once"
|
||||
|
||||
if test -n "$__podman_remote_perform_completion_once_result"
|
||||
__podman_remote_debug "Seems like a valid result already exists, skipping __podman_remote_perform_completion"
|
||||
return 0
|
||||
end
|
||||
|
||||
set --global __podman_remote_perform_completion_once_result (__podman_remote_perform_completion)
|
||||
if test -z "$__podman_remote_perform_completion_once_result"
|
||||
__podman_remote_debug "No completions, probably due to a failure"
|
||||
return 1
|
||||
end
|
||||
|
||||
__podman_remote_debug "Performed completions and set __podman_remote_perform_completion_once_result"
|
||||
return 0
|
||||
end
|
||||
|
||||
# this function is used to clear the $__podman_remote_perform_completion_once_result variable after completions are run
|
||||
function __podman_remote_clear_perform_completion_once_result
|
||||
__podman_remote_debug ""
|
||||
__podman_remote_debug "========= clearing previously set __podman_remote_perform_completion_once_result variable =========="
|
||||
set --erase __podman_remote_perform_completion_once_result
|
||||
__podman_remote_debug "Successfully erased the variable __podman_remote_perform_completion_once_result"
|
||||
end
|
||||
|
||||
function __podman_remote_requires_order_preservation
|
||||
__podman_remote_debug ""
|
||||
__podman_remote_debug "========= checking if order preservation is required =========="
|
||||
|
||||
__podman_remote_perform_completion_once
|
||||
if test -z "$__podman_remote_perform_completion_once_result"
|
||||
__podman_remote_debug "Error determining if order preservation is required"
|
||||
return 1
|
||||
end
|
||||
|
||||
set -l directive (string sub --start 2 $__podman_remote_perform_completion_once_result[-1])
|
||||
__podman_remote_debug "Directive is: $directive"
|
||||
|
||||
set -l shellCompDirectiveKeepOrder 32
|
||||
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
|
||||
__podman_remote_debug "Keeporder is: $keeporder"
|
||||
|
||||
if test $keeporder -ne 0
|
||||
__podman_remote_debug "This does require order preservation"
|
||||
return 0
|
||||
end
|
||||
|
||||
__podman_remote_debug "This doesn't require order preservation"
|
||||
return 1
|
||||
end
|
||||
|
||||
|
||||
# This function does two things:
|
||||
# - Obtain the completions and store them in the global __podman_remote_comp_results
|
||||
# - Return false if file completion should be performed
|
||||
|
|
@ -65,17 +119,17 @@ function __podman_remote_prepare_completions
|
|||
# Start fresh
|
||||
set --erase __podman_remote_comp_results
|
||||
|
||||
set -l results (__podman_remote_perform_completion)
|
||||
__podman_remote_debug "Completion results: $results"
|
||||
__podman_remote_perform_completion_once
|
||||
__podman_remote_debug "Completion results: $__podman_remote_perform_completion_once_result"
|
||||
|
||||
if test -z "$results"
|
||||
if test -z "$__podman_remote_perform_completion_once_result"
|
||||
__podman_remote_debug "No completion, probably due to a failure"
|
||||
# Might as well do file completion, in case it helps
|
||||
return 1
|
||||
end
|
||||
|
||||
set -l directive (string sub --start 2 $results[-1])
|
||||
set --global __podman_remote_comp_results $results[1..-2]
|
||||
set -l directive (string sub --start 2 $__podman_remote_perform_completion_once_result[-1])
|
||||
set --global __podman_remote_comp_results $__podman_remote_perform_completion_once_result[1..-2]
|
||||
|
||||
__podman_remote_debug "Completions are: $__podman_remote_comp_results"
|
||||
__podman_remote_debug "Directive is: $directive"
|
||||
|
|
@ -171,9 +225,13 @@ end
|
|||
# Remove any pre-existing completions for the program since we will be handling all of them.
|
||||
complete -c podman-remote -e
|
||||
|
||||
# this will get called after the two calls below and clear the $__podman_remote_perform_completion_once_result global
|
||||
complete -c podman-remote -n '__podman_remote_clear_perform_completion_once_result'
|
||||
# The call to __podman_remote_prepare_completions will setup __podman_remote_comp_results
|
||||
# which provides the program's completion choices.
|
||||
complete -c podman-remote -n '__podman_remote_prepare_completions' -f -a '$__podman_remote_comp_results'
|
||||
|
||||
# If this doesn't require order preservation, we don't use the -k flag
|
||||
complete -c podman-remote -n 'not __podman_remote_requires_order_preservation && __podman_remote_prepare_completions' -f -a '$__podman_remote_comp_results'
|
||||
# otherwise we use the -k flag
|
||||
complete -k -c podman-remote -n '__podman_remote_requires_order_preservation && __podman_remote_prepare_completions' -f -a '$__podman_remote_comp_results'
|
||||
|
||||
# This file is generated with "podman-remote completion"; see: podman-completion(1)
|
||||
|
|
|
|||
|
|
@ -55,6 +55,60 @@ function __podman_perform_completion
|
|||
printf "%s\n" "$directiveLine"
|
||||
end
|
||||
|
||||
# this function limits calls to __podman_perform_completion, by caching the result behind $__podman_perform_completion_once_result
|
||||
function __podman_perform_completion_once
|
||||
__podman_debug "Starting __podman_perform_completion_once"
|
||||
|
||||
if test -n "$__podman_perform_completion_once_result"
|
||||
__podman_debug "Seems like a valid result already exists, skipping __podman_perform_completion"
|
||||
return 0
|
||||
end
|
||||
|
||||
set --global __podman_perform_completion_once_result (__podman_perform_completion)
|
||||
if test -z "$__podman_perform_completion_once_result"
|
||||
__podman_debug "No completions, probably due to a failure"
|
||||
return 1
|
||||
end
|
||||
|
||||
__podman_debug "Performed completions and set __podman_perform_completion_once_result"
|
||||
return 0
|
||||
end
|
||||
|
||||
# this function is used to clear the $__podman_perform_completion_once_result variable after completions are run
|
||||
function __podman_clear_perform_completion_once_result
|
||||
__podman_debug ""
|
||||
__podman_debug "========= clearing previously set __podman_perform_completion_once_result variable =========="
|
||||
set --erase __podman_perform_completion_once_result
|
||||
__podman_debug "Successfully erased the variable __podman_perform_completion_once_result"
|
||||
end
|
||||
|
||||
function __podman_requires_order_preservation
|
||||
__podman_debug ""
|
||||
__podman_debug "========= checking if order preservation is required =========="
|
||||
|
||||
__podman_perform_completion_once
|
||||
if test -z "$__podman_perform_completion_once_result"
|
||||
__podman_debug "Error determining if order preservation is required"
|
||||
return 1
|
||||
end
|
||||
|
||||
set -l directive (string sub --start 2 $__podman_perform_completion_once_result[-1])
|
||||
__podman_debug "Directive is: $directive"
|
||||
|
||||
set -l shellCompDirectiveKeepOrder 32
|
||||
set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
|
||||
__podman_debug "Keeporder is: $keeporder"
|
||||
|
||||
if test $keeporder -ne 0
|
||||
__podman_debug "This does require order preservation"
|
||||
return 0
|
||||
end
|
||||
|
||||
__podman_debug "This doesn't require order preservation"
|
||||
return 1
|
||||
end
|
||||
|
||||
|
||||
# This function does two things:
|
||||
# - Obtain the completions and store them in the global __podman_comp_results
|
||||
# - Return false if file completion should be performed
|
||||
|
|
@ -65,17 +119,17 @@ function __podman_prepare_completions
|
|||
# Start fresh
|
||||
set --erase __podman_comp_results
|
||||
|
||||
set -l results (__podman_perform_completion)
|
||||
__podman_debug "Completion results: $results"
|
||||
__podman_perform_completion_once
|
||||
__podman_debug "Completion results: $__podman_perform_completion_once_result"
|
||||
|
||||
if test -z "$results"
|
||||
if test -z "$__podman_perform_completion_once_result"
|
||||
__podman_debug "No completion, probably due to a failure"
|
||||
# Might as well do file completion, in case it helps
|
||||
return 1
|
||||
end
|
||||
|
||||
set -l directive (string sub --start 2 $results[-1])
|
||||
set --global __podman_comp_results $results[1..-2]
|
||||
set -l directive (string sub --start 2 $__podman_perform_completion_once_result[-1])
|
||||
set --global __podman_comp_results $__podman_perform_completion_once_result[1..-2]
|
||||
|
||||
__podman_debug "Completions are: $__podman_comp_results"
|
||||
__podman_debug "Directive is: $directive"
|
||||
|
|
@ -171,9 +225,13 @@ end
|
|||
# Remove any pre-existing completions for the program since we will be handling all of them.
|
||||
complete -c podman -e
|
||||
|
||||
# this will get called after the two calls below and clear the $__podman_perform_completion_once_result global
|
||||
complete -c podman -n '__podman_clear_perform_completion_once_result'
|
||||
# The call to __podman_prepare_completions will setup __podman_comp_results
|
||||
# which provides the program's completion choices.
|
||||
complete -c podman -n '__podman_prepare_completions' -f -a '$__podman_comp_results'
|
||||
|
||||
# If this doesn't require order preservation, we don't use the -k flag
|
||||
complete -c podman -n 'not __podman_requires_order_preservation && __podman_prepare_completions' -f -a '$__podman_comp_results'
|
||||
# otherwise we use the -k flag
|
||||
complete -k -c podman -n '__podman_requires_order_preservation && __podman_prepare_completions' -f -a '$__podman_comp_results'
|
||||
|
||||
# This file is generated with "podman completion"; see: podman-completion(1)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
$_ -replace '\s|#|@|\$|;|,|''|\{|\}|\(|\)|"|`|\||<|>|&','`$&'
|
||||
}
|
||||
|
||||
[scriptblock]$__podman_remoteCompleterBlock = {
|
||||
[scriptblock]${__podman_remoteCompleterBlock} = {
|
||||
param(
|
||||
$WordToComplete,
|
||||
$CommandAst,
|
||||
|
|
@ -40,6 +40,7 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
$ShellCompDirectiveNoFileComp=4
|
||||
$ShellCompDirectiveFilterFileExt=8
|
||||
$ShellCompDirectiveFilterDirs=16
|
||||
$ShellCompDirectiveKeepOrder=32
|
||||
|
||||
# Prepare the command to request completions for the program.
|
||||
# Split the command at the first space to separate the program and arguments.
|
||||
|
|
@ -69,13 +70,22 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go method.
|
||||
__podman-remote_debug "Adding extra empty parameter"
|
||||
# We need to use `"`" to pass an empty argument a "" or '' does not work!!!
|
||||
$RequestComp="$RequestComp" + ' `"`"'
|
||||
# PowerShell 7.2+ changed the way how the arguments are passed to executables,
|
||||
# so for pre-7.2 or when Legacy argument passing is enabled we need to use
|
||||
# `"`" to pass an empty argument, a "" or '' does not work!!!
|
||||
if ($PSVersionTable.PsVersion -lt [version]'7.2.0' -or
|
||||
($PSVersionTable.PsVersion -lt [version]'7.3.0' -and -not [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -or
|
||||
(($PSVersionTable.PsVersion -ge [version]'7.3.0' -or [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -and
|
||||
$PSNativeCommandArgumentPassing -eq 'Legacy')) {
|
||||
$RequestComp="$RequestComp" + ' `"`"'
|
||||
} else {
|
||||
$RequestComp="$RequestComp" + ' ""'
|
||||
}
|
||||
}
|
||||
|
||||
__podman-remote_debug "Calling $RequestComp"
|
||||
# First disable ActiveHelp which is not supported for Powershell
|
||||
$env:PODMAN_REMOTE_ACTIVE_HELP=0
|
||||
${env:PODMAN_REMOTE_ACTIVE_HELP}=0
|
||||
|
||||
#call the command store the output in $out and redirect stderr and stdout to null
|
||||
# $Out is an array contains each line per element
|
||||
|
|
@ -100,7 +110,7 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
}
|
||||
|
||||
$Longest = 0
|
||||
$Values = $Out | ForEach-Object {
|
||||
[Array]$Values = $Out | ForEach-Object {
|
||||
#Split the output in name and description
|
||||
$Name, $Description = $_.Split("`t",2)
|
||||
__podman-remote_debug "Name: $Name Description: $Description"
|
||||
|
|
@ -145,6 +155,11 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
}
|
||||
}
|
||||
|
||||
# we sort the values in ascending order by name if keep order isn't passed
|
||||
if (($Directive -band $ShellCompDirectiveKeepOrder) -eq 0 ) {
|
||||
$Values = $Values | Sort-Object -Property Name
|
||||
}
|
||||
|
||||
if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) {
|
||||
__podman-remote_debug "ShellCompDirectiveNoFileComp is called"
|
||||
|
||||
|
|
@ -227,6 +242,6 @@ filter __podman-remote_escapeStringWithSpecialChars {
|
|||
}
|
||||
}
|
||||
|
||||
Register-ArgumentCompleter -CommandName 'podman-remote' -ScriptBlock $__podman_remoteCompleterBlock
|
||||
Register-ArgumentCompleter -CommandName 'podman-remote' -ScriptBlock ${__podman_remoteCompleterBlock}
|
||||
|
||||
# This file is generated with "podman-remote completion"; see: podman-completion(1)
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
$_ -replace '\s|#|@|\$|;|,|''|\{|\}|\(|\)|"|`|\||<|>|&','`$&'
|
||||
}
|
||||
|
||||
[scriptblock]$__podmanCompleterBlock = {
|
||||
[scriptblock]${__podmanCompleterBlock} = {
|
||||
param(
|
||||
$WordToComplete,
|
||||
$CommandAst,
|
||||
|
|
@ -40,6 +40,7 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
$ShellCompDirectiveNoFileComp=4
|
||||
$ShellCompDirectiveFilterFileExt=8
|
||||
$ShellCompDirectiveFilterDirs=16
|
||||
$ShellCompDirectiveKeepOrder=32
|
||||
|
||||
# Prepare the command to request completions for the program.
|
||||
# Split the command at the first space to separate the program and arguments.
|
||||
|
|
@ -69,13 +70,22 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go method.
|
||||
__podman_debug "Adding extra empty parameter"
|
||||
# We need to use `"`" to pass an empty argument a "" or '' does not work!!!
|
||||
$RequestComp="$RequestComp" + ' `"`"'
|
||||
# PowerShell 7.2+ changed the way how the arguments are passed to executables,
|
||||
# so for pre-7.2 or when Legacy argument passing is enabled we need to use
|
||||
# `"`" to pass an empty argument, a "" or '' does not work!!!
|
||||
if ($PSVersionTable.PsVersion -lt [version]'7.2.0' -or
|
||||
($PSVersionTable.PsVersion -lt [version]'7.3.0' -and -not [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -or
|
||||
(($PSVersionTable.PsVersion -ge [version]'7.3.0' -or [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -and
|
||||
$PSNativeCommandArgumentPassing -eq 'Legacy')) {
|
||||
$RequestComp="$RequestComp" + ' `"`"'
|
||||
} else {
|
||||
$RequestComp="$RequestComp" + ' ""'
|
||||
}
|
||||
}
|
||||
|
||||
__podman_debug "Calling $RequestComp"
|
||||
# First disable ActiveHelp which is not supported for Powershell
|
||||
$env:PODMAN_ACTIVE_HELP=0
|
||||
${env:PODMAN_ACTIVE_HELP}=0
|
||||
|
||||
#call the command store the output in $out and redirect stderr and stdout to null
|
||||
# $Out is an array contains each line per element
|
||||
|
|
@ -100,7 +110,7 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
}
|
||||
|
||||
$Longest = 0
|
||||
$Values = $Out | ForEach-Object {
|
||||
[Array]$Values = $Out | ForEach-Object {
|
||||
#Split the output in name and description
|
||||
$Name, $Description = $_.Split("`t",2)
|
||||
__podman_debug "Name: $Name Description: $Description"
|
||||
|
|
@ -145,6 +155,11 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
}
|
||||
}
|
||||
|
||||
# we sort the values in ascending order by name if keep order isn't passed
|
||||
if (($Directive -band $ShellCompDirectiveKeepOrder) -eq 0 ) {
|
||||
$Values = $Values | Sort-Object -Property Name
|
||||
}
|
||||
|
||||
if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) {
|
||||
__podman_debug "ShellCompDirectiveNoFileComp is called"
|
||||
|
||||
|
|
@ -227,6 +242,6 @@ filter __podman_escapeStringWithSpecialChars {
|
|||
}
|
||||
}
|
||||
|
||||
Register-ArgumentCompleter -CommandName 'podman' -ScriptBlock $__podmanCompleterBlock
|
||||
Register-ArgumentCompleter -CommandName 'podman' -ScriptBlock ${__podmanCompleterBlock}
|
||||
|
||||
# This file is generated with "podman completion"; see: podman-completion(1)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#compdef podman
|
||||
compdef _podman podman
|
||||
|
||||
# zsh completion for podman -*- shell-script -*-
|
||||
|
||||
|
|
@ -17,8 +18,9 @@ _podman()
|
|||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
local shellCompDirectiveKeepOrder=32
|
||||
|
||||
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace
|
||||
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder
|
||||
local -a completions
|
||||
|
||||
__podman_debug "\n========= starting completion logic =========="
|
||||
|
|
@ -136,6 +138,11 @@ _podman()
|
|||
noSpace="-S ''"
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then
|
||||
__podman_debug "Activating keep order."
|
||||
keepOrder="-V"
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
# File extension filtering
|
||||
local filteringCmd
|
||||
|
|
@ -171,7 +178,7 @@ _podman()
|
|||
return $result
|
||||
else
|
||||
__podman_debug "Calling _describe"
|
||||
if eval _describe "completions" completions $flagPrefix $noSpace; then
|
||||
if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then
|
||||
__podman_debug "_describe found some completions"
|
||||
|
||||
# Return the success of having called _describe
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#compdef podman-remote
|
||||
compdef _podman-remote podman-remote
|
||||
|
||||
# zsh completion for podman-remote -*- shell-script -*-
|
||||
|
||||
|
|
@ -17,8 +18,9 @@ _podman-remote()
|
|||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
local shellCompDirectiveKeepOrder=32
|
||||
|
||||
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace
|
||||
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder
|
||||
local -a completions
|
||||
|
||||
__podman-remote_debug "\n========= starting completion logic =========="
|
||||
|
|
@ -136,6 +138,11 @@ _podman-remote()
|
|||
noSpace="-S ''"
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then
|
||||
__podman-remote_debug "Activating keep order."
|
||||
keepOrder="-V"
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
# File extension filtering
|
||||
local filteringCmd
|
||||
|
|
@ -171,7 +178,7 @@ _podman-remote()
|
|||
return $result
|
||||
else
|
||||
__podman-remote_debug "Calling _describe"
|
||||
if eval _describe "completions" completions $flagPrefix $noSpace; then
|
||||
if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then
|
||||
__podman-remote_debug "_describe found some completions"
|
||||
|
||||
# Return the success of having called _describe
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package compat
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package compat
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package libpod
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package libpod
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,16 +1,10 @@
|
|||
package handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/containers/common/libimage"
|
||||
"github.com/containers/podman/v4/pkg/domain/entities"
|
||||
docker "github.com/docker/docker/api/types"
|
||||
dockerContainer "github.com/docker/docker/api/types/container"
|
||||
dockerNetwork "github.com/docker/docker/api/types/network"
|
||||
"github.com/docker/go-connections/nat"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
)
|
||||
|
||||
|
|
@ -167,96 +161,3 @@ type ExecStartConfig struct {
|
|||
Height uint16 `json:"h"`
|
||||
Width uint16 `json:"w"`
|
||||
}
|
||||
|
||||
func ImageDataToImageInspect(ctx context.Context, l *libimage.Image) (*ImageInspect, error) {
|
||||
options := &libimage.InspectOptions{WithParent: true, WithSize: true}
|
||||
info, err := l.Inspect(ctx, options)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ports, err := portsToPortSet(info.Config.ExposedPorts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// TODO: many fields in Config still need wiring
|
||||
config := dockerContainer.Config{
|
||||
User: info.User,
|
||||
ExposedPorts: ports,
|
||||
Env: info.Config.Env,
|
||||
Cmd: info.Config.Cmd,
|
||||
Volumes: info.Config.Volumes,
|
||||
WorkingDir: info.Config.WorkingDir,
|
||||
Entrypoint: info.Config.Entrypoint,
|
||||
Labels: info.Labels,
|
||||
StopSignal: info.Config.StopSignal,
|
||||
}
|
||||
|
||||
rootfs := docker.RootFS{}
|
||||
if info.RootFS != nil {
|
||||
rootfs.Type = info.RootFS.Type
|
||||
rootfs.Layers = make([]string, 0, len(info.RootFS.Layers))
|
||||
for _, layer := range info.RootFS.Layers {
|
||||
rootfs.Layers = append(rootfs.Layers, string(layer))
|
||||
}
|
||||
}
|
||||
|
||||
graphDriver := docker.GraphDriverData{
|
||||
Name: info.GraphDriver.Name,
|
||||
Data: info.GraphDriver.Data,
|
||||
}
|
||||
// Add in basic ContainerConfig to satisfy docker-compose
|
||||
cc := new(dockerContainer.Config)
|
||||
cc.Hostname = info.ID[0:11] // short ID is the hostname
|
||||
cc.Volumes = info.Config.Volumes
|
||||
|
||||
dockerImageInspect := docker.ImageInspect{
|
||||
Architecture: info.Architecture,
|
||||
Author: info.Author,
|
||||
Comment: info.Comment,
|
||||
Config: &config,
|
||||
ContainerConfig: cc,
|
||||
Created: l.Created().Format(time.RFC3339Nano),
|
||||
DockerVersion: info.Version,
|
||||
GraphDriver: graphDriver,
|
||||
ID: "sha256:" + l.ID(),
|
||||
Metadata: docker.ImageMetadata{},
|
||||
Os: info.Os,
|
||||
OsVersion: info.Version,
|
||||
Parent: info.Parent,
|
||||
RepoDigests: info.RepoDigests,
|
||||
RepoTags: info.RepoTags,
|
||||
RootFS: rootfs,
|
||||
Size: info.Size,
|
||||
Variant: "",
|
||||
VirtualSize: info.VirtualSize,
|
||||
}
|
||||
return &ImageInspect{dockerImageInspect}, nil
|
||||
}
|
||||
|
||||
// portsToPortSet converts libpod's exposed ports to docker's structs
|
||||
func portsToPortSet(input map[string]struct{}) (nat.PortSet, error) {
|
||||
ports := make(nat.PortSet)
|
||||
for k := range input {
|
||||
proto, port := nat.SplitProtoPort(k)
|
||||
switch proto {
|
||||
// See the OCI image spec for details:
|
||||
// https://github.com/opencontainers/image-spec/blob/e562b04403929d582d449ae5386ff79dd7961a11/config.md#properties
|
||||
case "tcp", "":
|
||||
p, err := nat.NewPort("tcp", port)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create tcp port from %s: %w", k, err)
|
||||
}
|
||||
ports[p] = struct{}{}
|
||||
case "udp":
|
||||
p, err := nat.NewPort("udp", port)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create tcp port from %s: %w", k, err)
|
||||
}
|
||||
ports[p] = struct{}{}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid port proto %q in %q", proto, k)
|
||||
}
|
||||
}
|
||||
return ports, nil
|
||||
}
|
||||
|
|
|
|||
107
pkg/api/handlers/types_local.go
Normal file
107
pkg/api/handlers/types_local.go
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
//go:build !remote
|
||||
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/containers/common/libimage"
|
||||
docker "github.com/docker/docker/api/types"
|
||||
dockerContainer "github.com/docker/docker/api/types/container"
|
||||
"github.com/docker/go-connections/nat"
|
||||
)
|
||||
|
||||
func ImageDataToImageInspect(ctx context.Context, l *libimage.Image) (*ImageInspect, error) {
|
||||
options := &libimage.InspectOptions{WithParent: true, WithSize: true}
|
||||
info, err := l.Inspect(ctx, options)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
ports, err := portsToPortSet(info.Config.ExposedPorts)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// TODO: many fields in Config still need wiring
|
||||
config := dockerContainer.Config{
|
||||
User: info.User,
|
||||
ExposedPorts: ports,
|
||||
Env: info.Config.Env,
|
||||
Cmd: info.Config.Cmd,
|
||||
Volumes: info.Config.Volumes,
|
||||
WorkingDir: info.Config.WorkingDir,
|
||||
Entrypoint: info.Config.Entrypoint,
|
||||
Labels: info.Labels,
|
||||
StopSignal: info.Config.StopSignal,
|
||||
}
|
||||
|
||||
rootfs := docker.RootFS{}
|
||||
if info.RootFS != nil {
|
||||
rootfs.Type = info.RootFS.Type
|
||||
rootfs.Layers = make([]string, 0, len(info.RootFS.Layers))
|
||||
for _, layer := range info.RootFS.Layers {
|
||||
rootfs.Layers = append(rootfs.Layers, string(layer))
|
||||
}
|
||||
}
|
||||
|
||||
graphDriver := docker.GraphDriverData{
|
||||
Name: info.GraphDriver.Name,
|
||||
Data: info.GraphDriver.Data,
|
||||
}
|
||||
// Add in basic ContainerConfig to satisfy docker-compose
|
||||
cc := new(dockerContainer.Config)
|
||||
cc.Hostname = info.ID[0:11] // short ID is the hostname
|
||||
cc.Volumes = info.Config.Volumes
|
||||
|
||||
dockerImageInspect := docker.ImageInspect{
|
||||
Architecture: info.Architecture,
|
||||
Author: info.Author,
|
||||
Comment: info.Comment,
|
||||
Config: &config,
|
||||
ContainerConfig: cc,
|
||||
Created: l.Created().Format(time.RFC3339Nano),
|
||||
DockerVersion: info.Version,
|
||||
GraphDriver: graphDriver,
|
||||
ID: "sha256:" + l.ID(),
|
||||
Metadata: docker.ImageMetadata{},
|
||||
Os: info.Os,
|
||||
OsVersion: info.Version,
|
||||
Parent: info.Parent,
|
||||
RepoDigests: info.RepoDigests,
|
||||
RepoTags: info.RepoTags,
|
||||
RootFS: rootfs,
|
||||
Size: info.Size,
|
||||
Variant: "",
|
||||
VirtualSize: info.VirtualSize,
|
||||
}
|
||||
return &ImageInspect{dockerImageInspect}, nil
|
||||
}
|
||||
|
||||
// portsToPortSet converts libpod's exposed ports to docker's structs
|
||||
func portsToPortSet(input map[string]struct{}) (nat.PortSet, error) {
|
||||
ports := make(nat.PortSet)
|
||||
for k := range input {
|
||||
proto, port := nat.SplitProtoPort(k)
|
||||
switch proto {
|
||||
// See the OCI image spec for details:
|
||||
// https://github.com/opencontainers/image-spec/blob/e562b04403929d582d449ae5386ff79dd7961a11/config.md#properties
|
||||
case "tcp", "":
|
||||
p, err := nat.NewPort("tcp", port)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create tcp port from %s: %w", k, err)
|
||||
}
|
||||
ports[p] = struct{}{}
|
||||
case "udp":
|
||||
p, err := nat.NewPort("udp", port)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to create tcp port from %s: %w", k, err)
|
||||
}
|
||||
ports[p] = struct{}{}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid port proto %q in %q", proto, k)
|
||||
}
|
||||
}
|
||||
return ports, nil
|
||||
}
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package autoupdate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package checkpoint
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package abi
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package abi
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package abi
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package abi
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package abi
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//go:build !linux
|
||||
// +build !linux
|
||||
//go:build !linux && !remote
|
||||
// +build !linux,!remote
|
||||
|
||||
package specgen
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//go:build linux && cgo
|
||||
// +build linux,cgo
|
||||
//go:build linux && cgo && !remote
|
||||
// +build linux,cgo,!remote
|
||||
|
||||
package generate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//go:build linux && !cgo
|
||||
// +build linux,!cgo
|
||||
//go:build linux && !cgo && !remote
|
||||
// +build linux,!cgo,!remote
|
||||
|
||||
package generate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package kube
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
//go:build freebsd
|
||||
//go:build freebsd && !remote
|
||||
|
||||
package generate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//go:build !linux && !freebsd
|
||||
// +build !linux,!freebsd
|
||||
//go:build !linux && !freebsd && !remote
|
||||
// +build !linux,!freebsd,!remote
|
||||
|
||||
package generate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
//go:build !linux && !freebsd
|
||||
// +build !linux,!freebsd
|
||||
//go:build !linux && !freebsd && !remote
|
||||
// +build !linux,!freebsd,!remote
|
||||
|
||||
package generate
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
//go:build !remote
|
||||
|
||||
package generate
|
||||
|
||||
import (
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import (
|
|||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/containers/common/libimage"
|
||||
nettypes "github.com/containers/common/libnetwork/types"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/podman/v4/libpod/define"
|
||||
|
|
@ -558,20 +557,7 @@ type SpecGenerator struct {
|
|||
ContainerResourceConfig
|
||||
ContainerHealthCheckConfig
|
||||
|
||||
image *libimage.Image `json:"-"`
|
||||
resolvedImageName string `json:"-"`
|
||||
}
|
||||
|
||||
// SetImage sets the associated for the generator.
|
||||
func (s *SpecGenerator) SetImage(image *libimage.Image, resolvedImageName string) {
|
||||
s.image = image
|
||||
s.resolvedImageName = resolvedImageName
|
||||
}
|
||||
|
||||
// Image returns the associated image for the generator.
|
||||
// May be nil if no image has been set yet.
|
||||
func (s *SpecGenerator) GetImage() (*libimage.Image, string) {
|
||||
return s.image, s.resolvedImageName
|
||||
cacheLibImage
|
||||
}
|
||||
|
||||
type Secret struct {
|
||||
|
|
|
|||
22
pkg/specgen/specgen_local.go
Normal file
22
pkg/specgen/specgen_local.go
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
//go:build !remote
|
||||
|
||||
package specgen
|
||||
|
||||
import "github.com/containers/common/libimage"
|
||||
|
||||
type cacheLibImage struct {
|
||||
image *libimage.Image `json:"-"`
|
||||
resolvedImageName string `json:"-"`
|
||||
}
|
||||
|
||||
// SetImage sets the associated for the generator.
|
||||
func (s *SpecGenerator) SetImage(image *libimage.Image, resolvedImageName string) {
|
||||
s.image = image
|
||||
s.resolvedImageName = resolvedImageName
|
||||
}
|
||||
|
||||
// Image returns the associated image for the generator.
|
||||
// May be nil if no image has been set yet.
|
||||
func (s *SpecGenerator) GetImage() (*libimage.Image, string) {
|
||||
return s.image, s.resolvedImageName
|
||||
}
|
||||
9
pkg/specgen/specgen_remote.go
Normal file
9
pkg/specgen/specgen_remote.go
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
//go:build remote
|
||||
|
||||
package specgen
|
||||
|
||||
// Empty stub we do not use any libimage on the remote client,
|
||||
// this drastically decreases binary size for the remote client.
|
||||
//
|
||||
//nolint:unused // this is needed for the local client
|
||||
type cacheLibImage struct{}
|
||||
Loading…
Add table
Reference in a new issue