Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 3 additions & 17 deletions parts/linux/cloud-init/artifacts/cse_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,7 @@ installContainerdWithComponentsJson() {
last_index=$((array_size - 1))
fi
packageVersion=${sortedPackageVersions[${last_index}]}
# containerd version is expected to be in the format major.minor.patch-hotfix
# e.g., 1.4.3-1. Then containerdMajorMinorPatchVersion=1.4.3 and containerdHotFixVersion=1
containerdMajorMinorPatchVersion="$(echo "$packageVersion" | cut -d- -f1)"
containerdHotFixVersion="$(echo "$packageVersion" | cut -d- -s -f2)"
if [ -z "$containerdMajorMinorPatchVersion" ] || [ "$containerdMajorMinorPatchVersion" = "null" ] || [ "$containerdHotFixVersion" = "null" ]; then
echo "invalid containerd version: $packageVersion"
exit $ERR_CONTAINERD_VERSION_INVALID
fi
logs_to_events "AKS.CSE.installContainerRuntime.installStandaloneContainerd" "installStandaloneContainerd ${containerdMajorMinorPatchVersion} ${containerdHotFixVersion}"
logs_to_events "AKS.CSE.installContainerRuntime.installStandaloneContainerd" "installStandaloneContainerd ${packageVersion}"
echo "in installContainerRuntime - CONTAINERD_VERSION = ${packageVersion}"

}
Expand All @@ -109,14 +101,8 @@ installContainerdWithManifestJson() {
else
echo "WARNING: containerd version not found in manifest, defaulting to hardcoded."
fi
containerd_patch_version="$(echo "$containerd_version" | cut -d- -f1)"
containerd_revision="$(echo "$containerd_version" | cut -d- -f2)"
if [ -z "$containerd_patch_version" ] || [ "$containerd_patch_version" = "null" ] || [ "$containerd_revision" = "null" ]; then
echo "invalid container version: $containerd_version"
exit $ERR_CONTAINERD_INSTALL_TIMEOUT
fi
logs_to_events "AKS.CSE.installContainerRuntime.installStandaloneContainerd" "installStandaloneContainerd ${containerd_patch_version} ${containerd_revision}"
echo "in installContainerRuntime - CONTAINERD_VERSION = ${containerd_patch_version}"
logs_to_events "AKS.CSE.installContainerRuntime.installStandaloneContainerd" "installStandaloneContainerd ${containerd_version}"
echo "in installContainerRuntime - CONTAINERD_VERSION = ${containerd_version}"
Comment on lines 101 to +105
}

installContainerRuntime() {
Expand Down
52 changes: 24 additions & 28 deletions parts/linux/cloud-init/artifacts/ubuntu/cse_install_ubuntu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -528,9 +528,7 @@ downloadPkgFromVersion() {
}

installContainerd() {
packageVersion="${3:-}"
containerdMajorMinorPatchVersion="$(echo "$packageVersion" | cut -d- -f1)"
containerdHotFixVersion="$(echo "$packageVersion" | cut -d- -f2)"
local packageVersion="${3:-}"
CONTAINERD_DOWNLOADS_DIR="${1:-$CONTAINERD_DOWNLOADS_DIR}"
eval containerdOverrideDownloadURL="${2:-}"

Expand All @@ -539,7 +537,7 @@ installContainerd() {
installContainerdFromOverride ${containerdOverrideDownloadURL} || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
return 0
fi
installContainerdWithAptGet "${containerdMajorMinorPatchVersion}" "${containerdHotFixVersion}" "${CONTAINERD_DOWNLOADS_DIR}" || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
installContainerdWithAptGet "${packageVersion}" "${CONTAINERD_DOWNLOADS_DIR}" || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
}
Comment on lines 530 to 541

installContainerdFromOverride() {
Expand All @@ -555,15 +553,19 @@ installContainerdFromOverride() {
}

installContainerdWithAptGet() {
local containerdMajorMinorPatchVersion="${1}"
local containerdHotFixVersion="${2}"
CONTAINERD_DOWNLOADS_DIR="${3:-$CONTAINERD_DOWNLOADS_DIR}"
# packageVersion is the full version string from components.json, e.g. "2.3.2-ubuntu24.04u2" or "1.7.33-ubuntu22.04u1".
# The major.minor.patch is extracted for version comparison against the currently installed package.
local packageVersion="${1}"
CONTAINERD_DOWNLOADS_DIR="${2:-$CONTAINERD_DOWNLOADS_DIR}"
local containerdMajorMinorPatchVersion
containerdMajorMinorPatchVersion="$(echo "$packageVersion" | cut -d- -f1)"

# Query installed version via dpkg metadata instead of running the containerd
# binary. `containerd -version` takes ~5.7s to load the full runtime just to
# print a version string; dpkg-query is instant.
# dpkg version format: "1.7.31+azure-ubuntu22.04u1" or "1:1.7.31+azure-..."
# Normalize to pure "major.minor.patch" by stripping epoch, +suffix, -suffix.
currentVersion=""
local currentVersion=""
if dpkg -l moby-containerd 2>/dev/null | grep -q "^ii"; then
currentVersion=$(dpkg-query -W -f='${Version}' moby-containerd 2>/dev/null | sed 's/^[0-9]*://' | cut -d '+' -f1 | cut -d '-' -f1)
fi
Expand All @@ -572,26 +574,21 @@ installContainerdWithAptGet() {
currentVersion="0.0.0"
fi

local currentMajorMinor desiredMajorMinor
currentMajorMinor="$(echo $currentVersion | tr '.' '\n' | head -n 2 | paste -sd.)"
desiredMajorMinor="$(echo $containerdMajorMinorPatchVersion | tr '.' '\n' | head -n 2 | paste -sd.)"
semverCompare "$currentVersion" "$containerdMajorMinorPatchVersion"
hasGreaterVersion="$?"
local hasGreaterVersion="$?"

if [ "$hasGreaterVersion" = "0" ] && [ "$currentMajorMinor" = "$desiredMajorMinor" ]; then
echo "currently installed containerd version ${currentVersion} matches major.minor with higher patch ${containerdMajorMinorPatchVersion}. skipping installStandaloneContainerd."
else
echo "installing containerd version ${containerdMajorMinorPatchVersion}"
echo "installing containerd version ${packageVersion}"
logs_to_events "AKS.CSE.installContainerRuntime.removeContainerd" removeContainerd

# if containerd version has been overriden then there should exist a local .deb file for it on aks VHDs (best-effort)
# if no files found then try fetching from packages.microsoft repo
containerdDebFile=$(find "${CONTAINERD_DOWNLOADS_DIR}" -maxdepth 1 -name "moby-containerd_${containerdMajorMinorPatchVersion}*" -print -quit 2>/dev/null) || containerdDebFile=""
if [ -n "${containerdDebFile}" ]; then
logs_to_events "AKS.CSE.installContainerRuntime.installDebPackageFromFile" "installDebPackageFromFile ${containerdDebFile}" || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
return 0
fi
logs_to_events "AKS.CSE.installContainerRuntime.downloadContainerdFromVersion" "downloadContainerdFromVersion ${containerdMajorMinorPatchVersion} ${containerdHotFixVersion}"
containerdDebFile=$(find "${CONTAINERD_DOWNLOADS_DIR}" -maxdepth 1 -name "moby-containerd_${containerdMajorMinorPatchVersion}*" -print -quit 2>/dev/null) || containerdDebFile=""
# No cached deb found — download from packages.microsoft.com
logs_to_events "AKS.CSE.installContainerRuntime.downloadContainerdFromVersion" "downloadContainerdFromVersion ${packageVersion}"
Comment thread
Devinwong marked this conversation as resolved.
containerdDebFile=$(find "${CONTAINERD_DOWNLOADS_DIR}" -maxdepth 1 -name "moby-containerd_${packageVersion}*" 2>/dev/null | sort -V | tail -n1)
if [ -z "${containerdDebFile}" ]; then
echo "Failed to locate cached containerd deb"
Comment on lines +589 to 593
exit $ERR_CONTAINERD_INSTALL_TIMEOUT
Expand All @@ -607,8 +604,6 @@ installStandaloneContainerd() {
# Read UBUNTU_CODENAME from /etc/os-release instead of lsb_release (avoids Python spawn).
UBUNTU_CODENAME=$(. /etc/os-release && echo "${VERSION_CODENAME}")
CONTAINERD_VERSION=$1
# we always default to the .1 patch versons
CONTAINERD_PATCH_VERSION="${2:-1}"

# the user-defined package URL is always picked first, and the other options won't be tried when this one fails
CONTAINERD_PACKAGE_URL="${CONTAINERD_PACKAGE_URL:=}"
Expand All @@ -617,21 +612,22 @@ installStandaloneContainerd() {
return 0
fi

echo "Using specified Containerd Version: ${CONTAINERD_VERSION}-${CONTAINERD_PATCH_VERSION}"
installContainerdWithAptGet "${CONTAINERD_VERSION}" "${CONTAINERD_PATCH_VERSION}" || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
echo "Using specified Containerd Version: ${CONTAINERD_VERSION}"
installContainerdWithAptGet "${CONTAINERD_VERSION}" || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
}
Comment on lines 614 to 617

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1.7.33-ubuntu22.04u1-1 is an invalid version format for sure


downloadContainerdFromVersion() {
# Patch version isn't used here...?
CONTAINERD_VERSION=$1
# packageVersion is the full version string, e.g. "2.3.2-ubuntu24.04u2" or "1.7.33-ubuntu22.04u1".
# The major.minor.patch is extracted for the apt glob pattern.
local packageVersion="$1"
mkdir -p $CONTAINERD_DOWNLOADS_DIR
# Adding updateAptWithMicrosoftPkg since AB e2e uses an older image version with uncached containerd 1.6 so it needs to download from testing repo.
Comment on lines +620 to 624
# And RP no image pull e2e has apt update restrictions that prevent calls to packages.microsoft.com in CSE
# This won't be called for new VHDs as they have containerd 1.6 cached
updateAptWithMicrosoftPkg
apt_get_download 20 30 moby-containerd=${CONTAINERD_VERSION}* || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
cp -al ${APT_CACHE_DIR}moby-containerd_${CONTAINERD_VERSION}* $CONTAINERD_DOWNLOADS_DIR/ || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
echo "Succeeded to download containerd version ${CONTAINERD_VERSION}"
apt_get_download 20 30 moby-containerd=${packageVersion}* || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
cp -al ${APT_CACHE_DIR}moby-containerd_${packageVersion}* $CONTAINERD_DOWNLOADS_DIR/ || exit $ERR_CONTAINERD_INSTALL_TIMEOUT
echo "Succeeded to download containerd version ${packageVersion}"
}

downloadContainerdFromURL() {
Expand Down
9 changes: 3 additions & 6 deletions spec/parts/linux/cloud-init/artifacts/cse_install_spec.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ Describe 'cse_install.sh'
UBUNTU_RELEASE="20.04"
containerdPackage=$(readPackage "containerd")
When call installContainerRuntime
The variable containerdMajorMinorPatchVersion should equal "1.2.3"
The variable containerdHotFixVersion should equal ""
The variable packageVersion should equal "1.2.3"
The output line 3 should equal "mock logs to events calling with AKS.CSE.installContainerRuntime.installStandaloneContainerd"
The output line 4 should equal "in installContainerRuntime - CONTAINERD_VERSION = 1.2.3"
End
Expand All @@ -32,8 +31,7 @@ Describe 'cse_install.sh'
OS="MARINER"
containerdPackage=$(readPackage "containerd")
When call installContainerRuntime
The variable containerdMajorMinorPatchVersion should equal "1.2.3"
The variable containerdHotFixVersion should equal "5.fake"
The variable packageVersion should equal "1.2.3-5.fake"
The output line 3 should equal "mock logs to events calling with AKS.CSE.installContainerRuntime.installStandaloneContainerd"
The output line 4 should equal "in installContainerRuntime - CONTAINERD_VERSION = 1.2.3-5.fake"
End
Expand All @@ -60,8 +58,7 @@ Describe 'cse_install.sh'
OS="AZURELINUX"
containerdPackage=$(readPackage "containerd")
When call installContainerRuntime
The variable containerdMajorMinorPatchVersion should equal "2.0.0"
The variable containerdHotFixVersion should equal "1.fake"
The variable packageVersion should equal "2.0.0-1.fake"
The output line 3 should equal "mock logs to events calling with AKS.CSE.installContainerRuntime.installStandaloneContainerd"
The output line 4 should equal "in installContainerRuntime - CONTAINERD_VERSION = 2.0.0-1.fake"
End
Expand Down
Loading