ok() {
echo "ok" "$@"
}
fatal() {
echo "$@" >&2
exit 1
}
get_ipv4_for_nic() {
local nic_name=$1
local ip
ip="$(ip -j addr show "${nic_name}" | jq -r '.[0].addr_info | map(select(.family == "inet")) | .[0].local')"
if [ -z "$ip" ]; then
echo "Error: can not get ip for ${nic_name}"
exit 1
fi
echo "$ip"
}
get_fedora_container_ref() {
local repo='quay.io/fedora/fedora'
local tag='45'
echo "${repo}:${tag}"
}
get_fedora_minimal_container_ref() {
local repo='quay.io/fedora/fedora-minimal'
local tag='45'
echo "${repo}:${tag}"
}
get_fcos_stream() {
rpm-ostree status -b --json \
| jq --raw-output '.deployments[0]."base-commit-meta"."ostree.container.image-config" | fromjson | .config.Labels."com.coreos.stream"'
}
is_fcos() {
source /etc/os-release
[ "${ID}" == "fedora" ] && [ "${VARIANT_ID}" == "coreos" ]
}
is_rhcos() {
source /etc/os-release
{ [ "${ID}" == "rhel" ] && [ "${VARIANT_ID}" == "coreos" ]; } || \
[ "${ID}" == "rhcos" ]
}
get_fedora_ver() {
source /etc/os-release
if is_fcos; then
echo "${VERSION_ID}"
fi
}
get_rhel_ver() {
source /etc/os-release
if [ "${ID}" == "rhcos" ]; then
echo "${RHEL_VERSION}"
elif [ "${ID}" == "rhel" ]; then
echo "${VERSION_ID}"
else
fatal "Unknown ID $ID"
fi
}
get_cs_ver() {
source /etc/os-release
if [ "${ID}" == "scos" ] && [ "${VARIANT_ID}" == "coreos" ]; then
source /usr/lib/os-release.stream
echo "${VERSION_ID}"
elif [ "${ID}" == "centos" ] && [ "${VARIANT_ID}" == "coreos" ]; then
echo "${VERSION_ID}"
else
fatal "Unknown ID $ID"
fi
}
get_rhel_maj_ver() {
local ver; ver=$(get_rhel_ver)
echo "${ver%%.*}"
}
is_rhcos9() {
source /etc/os-release
{ [ "${ID}" == "rhcos" ] && [ "${RHEL_VERSION%%.*}" -eq 9 ]; } || \
{ [ "${ID}" == "rhel" ] && [ "${VERSION_ID%%.*}" -eq 9 ]; }
}
is_scos() {
source /etc/os-release
{ [ "${ID}" == "scos" ] || [ "${ID}" == "centos" ]; } && [ "${VARIANT_ID}" == "coreos" ]
}
match_maj_ver() {
local ver=$1
[ "$(get_rhel_maj_ver)" == "${ver}" ] || [ "$(get_cs_ver)" == "${ver}" ]
}
IFS=" " read -r -a cmdline <<< "$(</proc/cmdline)"
cmdline_arg() {
local name="$1" value=""
for arg in "${cmdline[@]}"; do
if [[ "${arg%%=*}" == "${name}" ]]; then
value="${arg#*=}"
fi
done
echo "${value}"
}
is_service_active() {
local service="$1"; shift
local timeout="${1:-60}"; shift
timeout "${timeout}s" \
systemd-run --wait \
--property="After=${service}" \
echo "Waited for $service to finish starting"
systemctl is-active "${service}"
}
vereq() {
[ "$1" == "$2" ]
}
verlt() {
vereq "$1" "$2" && return 1
local lowest
lowest="$(echo -e "$1\n$2" | sort -V | head -n 1)"
[ "$1" == "$lowest" ]
}
verlte() {
vereq "$1" "$2" || verlt "$1" "$2"
}
vergt() {
! verlte "$1" "$2"
}
vergte() {
vereq "$1" "$2" || vergt "$1" "$2"
}
assert_confidential_type_match() {
local cvm_type=$(systemd-detect-virt --cvm)
local expected=$1
[ "${cvm_type}" == "${expected}" ]
}
fatal_print_file() {
local fpath=$1
shift
ls -al "$fpath" >&2
sed -e 's/^/# /' < "$fpath" >&2
fatal "$@"
}
assert_file_has_content() {
local fpath=$1
shift
for re in "$@"; do
if ! grep -q -e "$re" "$fpath"; then
fatal_print_file "$fpath" "File '$fpath' doesn't match regexp '$re'"
fi
done
}
assert_file_has_content_literal() {
local fpath=$1
shift
for s in "$@"; do
if ! grep -q -F -e "$s" "$fpath"; then
fatal_print_file "$fpath" "File '$fpath' doesn't match fixed string list '$s'"
fi
done
}
run_as_core_user() {
sudo -iu core -- "$@" 2>&1 | cat
}