Repository navigation
Conversation
Windows Unit Test Results 3 files 18 suites 55s ⏱️ Results for commit 93408b9. ♻️ This comment has been updated with latest results. |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The ACL installer and end-to-end artifact-streaming path lack coverage for package extraction, sysext activation, and real service startup.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Enables artifact streaming on Azure Container Linux using the OverlayBD system extension and ACL-specific acr-mirror installation.
Changes:
- Adds ACL package selection and RPM extraction.
- Configures OverlayBD sysext and service lifecycle.
- Extends schemas, documentation, and unit fixtures.
| File | Description |
|---|---|
vhdbuilder/packer/install-dependencies.sh |
Installs and initializes acr-mirror on ACL. |
vhdbuilder/packer/acl-customdata.yaml |
Enables OverlayBD sysext and masks services initially. |
vhdbuilder/packer/acl-customdata.json |
Regenerates ACL Ignition configuration. |
spec/parts/linux/cloud-init/artifacts/test_components.json |
Adds ACL and Flatcar test metadata. |
spec/parts/linux/cloud-init/artifacts/cse_helpers_spec.sh |
Tests ACL metadata selection and fallback. |
spec/parts/linux/cloud-init/artifacts/cse_config_gpu_spec.sh |
Tests ACL service unmasking. |
schemas/components.cue |
Adds ACL component metadata schema. |
parts/linux/cloud-init/artifacts/README-COMPONENTS.md |
Documents ACL metadata behavior. |
parts/linux/cloud-init/artifacts/cse_helpers.sh |
Selects ACL-specific package entries. |
parts/linux/cloud-init/artifacts/cse_config.sh |
Unmasks OverlayBD services during provisioning. |
parts/common/components.json |
Adds the ACL acr-mirror package entry. |
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| if isACL "$OS" "$OS_VARIANT"; then | ||
| bsdtar -C / -xf "$MIRROR_DOWNLOAD_PATH" opt/ || exit "$ERR_ARTIFACT_STREAMING_DOWNLOAD" | ||
| bsdtar -Oxf "$MIRROR_DOWNLOAD_PATH" usr/lib/systemd/system/acr-mirror.service | | ||
| install -m 0644 /dev/stdin /etc/systemd/system/acr-mirror.service || | ||
| exit "$ERR_ARTIFACT_STREAMING_DOWNLOAD" | ||
| env -C /opt/acr/bin ./acr init --min-init || exit "$ERR_ARTIFACT_STREAMING_DOWNLOAD" |
AgentBaker Linux gate detectiveRun: https://msazure.visualstudio.com/CloudNativeCompute/_build/results?buildId=182278061 Detective summary: Packer entered Likely cause / signature: $sigBsdtar. Confidence: High for PR-change-caused dependency/setup regression. Recommended owner/action: PR #9613 should install or otherwise guarantee �sdtar before artifact-streaming extraction, or avoid the �sdtar dependency in install-dependencies.sh for ACL images. Strongest alternative: transient package/feed outage; less likely because downloads immediately before the failure succeeded and the primary error is the local command missing, not an HTTP/package fetch failure. Evidence: Timeline marks ACL Build VHD tasks failed; Build VHD log reaches artifact-streaming downloads then fails with Wiki signature: $sigBsdtar |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical ACL build-tool and backward-compatibility failures, plus incorrect package setup logic, must be resolved.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 2
AgentBaker Linux gate detectiveRun: https://msazure.visualstudio.com/CloudNativeCompute/_build/results?buildId=182333136 Detective summary: ACL artifact-streaming Build VHD failed again when Likely cause / signature: vhd-acl-artifact-streaming-bsdtar-command-not-found; secondary signatures vhd-ubuntu2204fips-cis-cron-rules-regression and vhd-ubuntu2204fips-cis-rule-6-1-3-1-regression. Confidence: High for PR-change-caused ACL artifact-streaming dependency/setup regression; high for recurring CIS baseline drift. Recommended owner/action: PR #9613 should install or guarantee �sdtar before artifact-streaming extraction, or remove the �sdtar dependency; VHD validation owners should continue repair #39802117 for the separate CIS drift. Strongest alternative: transient package/feed outage; less likely because the primary Build VHD error is the local command missing after downloads succeeded, and the same signature was previously observed on this PR. Evidence: Timeline marks ACL Build VHD tasks failed; Build VHD logs show Wiki signatures: $sigBsdtar, $sigCis, $sigRule |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical ACL build and provisioning-path issues prevent artifact streaming from being configured reliably.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 4
Open (6)
Add Ignition activation to the actual ACL template path · New Move ACL OverlayBD activation into idempotent nodePrep · New Avoid unavailable rpm2cpio and cpio tools on ACL · New Gate ACL artifact streaming on image capability or add fallback Use ACL 1.0.0 setup flow instead of legacy enablement Add ACL installer and artifact-streaming E2E test coverage
Resolved since last review (1)
| if isACL "$OS" "$OS_VARIANT"; then | ||
| systemctl unmask overlaybd-tcmu.service overlaybd-snapshotter.service || exit "$ERR_ARTIFACT_STREAMING_INSTALL" | ||
| fi | ||
| retrycmd_if_failure 120 5 25 systemctl --quiet enable --now acr-mirror overlaybd-tcmu overlaybd-snapshotter || exit "$ERR_ARTIFACT_STREAMING_INSTALL" |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
A critical platform-scoping defect and two moderate setup and test-coverage issues remain unresolved.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 5
Open (8)
Restrict ACL systemd services to ACL-specific Flatcar configurations · New Avoid unavailable rpm2cpio and cpio tools on ACL Move ACL OverlayBD activation into idempotent nodePrep Add Ignition activation to the actual ACL template path Gate ACL artifact streaming on image capability or add fallback Add RPM parser tests with valid and corrupt zstd fixtures · New Use ACL 1.0.0 setup flow instead of legacy enablement Add ACL installer and artifact-streaming E2E test coverage
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
Four unresolved moderate issues affect production ACL activation paths, Flatcar compatibility, and extraction test coverage.
Review effort: Balanced
Findings: 5
Open (7)
Restrict ACL systemd services to ACL-specific Flatcar configurations Avoid unavailable rpm2cpio and cpio tools on ACL Move ACL OverlayBD activation into idempotent nodePrep Add Ignition activation to the actual ACL template path Gate ACL artifact streaming on image capability or add fallback Add RPM parser tests with valid and corrupt zstd fixtures Add ACL installer and artifact-streaming E2E test coverage
Resolved since last review (1)
AgentBaker Linux gate detectiveRun: https://msazure.visualstudio.com/CloudNativeCompute/_build/results?buildId=182357334 Detective summary: E2E reported 184 scenarios with 4 failed and 0 flaky. LocalDNS restart-budget validation injected a failing Likely cause / signature: e2e-localdns-restart-budget-hungstart-not-bounded; secondary recurring signature vhd-ubuntu2204fips-cis-cron-rules-regression. Confidence: High for deterministic LocalDNS restart-budget validation regression; high for recurring CIS drift. Recommended owner/action: PR #9613 owner should inspect LocalDNS restart-budget behavior now that artifact streaming changes touch scenario selection/config; VHD validation owners should continue repair #39802117 for the separate CIS drift. Strongest alternative: shared systemd timing flake; less likely because three LocalDNSHostsPlugin variants fail the same injected-fault assertion and the suite reported zero flaky tests. Evidence: E2E log reports |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Critical and moderate issues remain in package integrity/tooling and systemd provisioning order and dependencies.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 7
Open (8)
Masked services block artifact setup · New Unsigned RPM extraction enables root code execution · New Restrict ACL systemd services to ACL-specific Flatcar configurations Avoid unavailable rpm2cpio and cpio tools on ACL Move ACL OverlayBD activation into idempotent nodePrep Add Ignition activation to the actual ACL template path Gate ACL artifact streaming on image capability or add fallback Add ACL installer and artifact-streaming E2E test coverage
Resolved since last review (1)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cache mcr.microsoft.com/acr/v2/artifact-streaming-sysext instead of installing the ACR RPM or enabling a separate OverlayBD extension. Keep exact DALEC revision and architecture pins for local and network-isolated delivery. Defer activation to nodePrep for both CSE and node-controller. Initialize writable paths and ACR configuration before unmasking consumers, preserve GPU containerd settings when materializing its symlink, and fail provisioning before kubelet starts if setup fails. Keep other OS package paths unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0d5fc628-3611-41e9-b6d6-55b92081296b
fb68abe to
ce65176
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The sysext pin lacks required Renovate normalization and revision ordering, while streaming activation lacks test coverage for phase gating, pre-kubelet ordering, failure handling, and disabled nodes.
3 open issues
6 resolved since last review
ACL VHD build invokes unavailable dnf/rpm installer Systemd boot transaction cycle drops provisioning or setup jobs Masked services block artifact setup Restrict ACL systemd services to ACL-specific Flatcar configurations Add Ignition activation to the actual ACL template path Gate ACL artifact streaming on image capability or add fallback
Review effort: Balanced
| if [ "${ARTIFACT_STREAMING_ENABLED}" = "true" ] && isACL "$OS" "$OS_VARIANT"; then | ||
| logs_to_events "AKS.CSE.ensureContainerd.ensureArtifactStreaming" ensureArtifactStreaming || exit $ERR_ARTIFACT_STREAMING_INSTALL |
There was a problem hiding this comment.
🟡 Changes recommended
The streaming scenario enables Secure Boot unconditionally, preventing unsigned ACL images from booting, while tests leave provisioning-phase gating, cached-node activation, and setup-failure propagation unverified.
4 open issues
Review effort: Balanced
| config.EnableArtifactStreaming = true | ||
| }, | ||
| VMConfigMutator: func(vmss *armcompute.VirtualMachineScaleSet) { | ||
| vmss.Properties = addTrustedLaunchToVMSS(vmss.Properties) |
Check each decoded JSON type assertion and guard the file list before indexing it, satisfying errcheck without suppressing lint findings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0d5fc628-3611-41e9-b6d6-55b92081296b
Use azurecontainerregistry/v2/artifact-streaming-sysext for VHD caching, Renovate metadata, and node provisioning, retaining the pinned version and registry overrides. Update the matching ShellSpec expectations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0d5fc628-3611-41e9-b6d6-55b92081296b
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 0d5fc628-3611-41e9-b6d6-55b92081296b
There was a problem hiding this comment.
🟡 Changes recommended
The scenario forces Secure Boot and prevents unsigned ACL images from booting, while the new sysext repository lacks the Renovate rule needed to match published version tags.
5 open issues
Move ACL OverlayBD activation into idempotent nodePrep Add artifact-streaming-sysext to the DALEC Renovate rule · New Use ACL VMSS security profile for unsigned development images Cover PIS activation timing and failure handling in streaming specs Add ACL installer and artifact-streaming E2E test coverage
Review effort: Balanced
| "renovateTag": "OCI_registry=https://mcr.microsoft.com, name=azurecontainerregistry/v2/artifact-streaming-sysext", | ||
| "latestVersion": "v1.0.0-2-azlinux3" |
Use v1.0.0-1-azlinux3 and update the exact-revision resolution and VHD caching tests to match the initial component publication. Validated: 25 focused ShellSpec examples, 0 failures; JSON pin, shell syntax, and whitespace checks. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: da9d0569-0965-44eb-9e2b-1d2ac995e638
There was a problem hiding this comment.
🔵 Needs a closer look
Unconditional Secure Boot prevents unsigned ACL images from booting, and the missing DALEC Renovate rule prevents automatic updates to the new sysext pin.
5 open issues
Move ACL OverlayBD activation into idempotent nodePrep Add artifact-streaming-sysext to the DALEC Renovate rule Use ACL VMSS security profile for unsigned development images Cover PIS activation timing and failure handling in streaming specs Add ACL installer and artifact-streaming E2E test coverage
Review effort: Balanced
|
|
||
| if [ "${ARTIFACT_STREAMING_ENABLED}" = "true" ]; then | ||
| # Defer ACL artifact streaming to nodePrep: keep sysext services masked | ||
| # during PIS image preparation and activate them on the real node. |
There was a problem hiding this comment.
Can you explain why we need to defer?
There was a problem hiding this comment.
"PIS images already contain base_prep.complete, so real nodes skip basePrep. nodePrep runs on real provisioning but not pre-provision-only image preparation."
| @@ -635,9 +635,29 @@ EOF | |||
| } | |||
|
|
|||
| ensureArtifactStreaming() { | |||
There was a problem hiding this comment.
Is this and IPE mutually exclusive?
There was a problem hiding this comment.
I don't know the answer to this.
| @@ -392,29 +392,37 @@ downloadAndInstallCriTools() { | |||
| installAndConfigureArtifactStreaming() { | |||
There was a problem hiding this comment.
Is the caller conditioned on artifact streaming enabled and IPE disabled?
There was a problem hiding this comment.
no, this will be called for all VHD flavors that have a corresponding acr-mirror entry in components.json at build time - as the comment says this is a caching operation only, usage of acr-mirror is gated at node provisioning time
| fi | ||
|
|
||
| # Keep ACL sysexts masked during PIS image preparation; configure them on the real node. | ||
| if [ "${ARTIFACT_STREAMING_ENABLED}" = "true" ] && isACL "$OS" "$OS_VARIANT"; then |
There was a problem hiding this comment.
Just to confirm, is ARTIFACT_STREAMING_ENABLED set to false by default?
There was a problem hiding this comment.
it's set and passed down by AKS RP - it will default to false
Remove the unverified enabled-sysext.conf entry from ACL custom data and regenerate Ignition JSON using strict Butane validation. Preserve all remaining configuration and streaming service masks. Validated: strict Butane regeneration, Ignition configuration equivalence apart from the removed entry, 28 focused ShellSpec examples, and whitespace checks. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: da9d0569-0965-44eb-9e2b-1d2ac995e638
|
There was a problem hiding this comment.
🔵 Needs a closer look
The scenario unconditionally enables Secure Boot instead of respecting ACLBaseImageSigned, causing unsigned development images to fail to boot before artifact-streaming checks can run.
5 open issues
Move ACL OverlayBD activation into idempotent nodePrep Add artifact-streaming-sysext to the DALEC Renovate rule Use ACL VMSS security profile for unsigned development images Cover PIS activation timing and failure handling in streaming specs Add ACL installer and artifact-streaming E2E test coverage
Review effort: Balanced



What this PR does / why we need it:
Enables Artifact Streaming on ACL using the combined ACR mirror, OverlayBD, and overlaybd-snapshotter system extension from
mcr.microsoft.com/azurecontainerregistry/v2/artifact-streaming-sysext.nodePrep, including on PIS-cached VHDs. Use the same provisioning path for CSE and node-controller rather than an early Ignition setup service.The initial pin is
v1.0.0-1-azlinux3, with-x86-64and-arm64architecture suffixes. VHD builds depend on those artifacts being published to the repository above.