Repository navigation
feat: [5/5] enable native cloud initialization before provisioning - #9904
Draft
Abigail Liang (abigailliang-aks-sig-node) wants to merge 3 commits into
Draft
Abigail Liang (abigailliang-aks-sig-node) wants to merge 3 commits into
Abigail Liang (abigailliang-aks-sig-node) wants to merge 3 commits into
Conversation
Complete the split from #9891 by connecting native Go initialization and removing the shell call together. Add refresh scheduling, preserve cron/cache best-effort handling and fatal boundaries, retain NBC/dry-run behavior, and carry the original integration coverage and generated fixtures. Preserve all original cloud declarations and latest-main status handling. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: be499bac-1283-498e-b5b1-59d8c91047a4
Contributor
Windows Unit Test Results 3 files 18 suites 1m 12s ⏱️ Results for commit 9a99152. ♻️ This comment has been updated with latest results. |
This was referenced Oct 26, 2026
Preserve the published activation branch with an additive merge onto the smaller certificate layers. Keep Go activation and shell-call removal atomic, with all original failure policies and regression coverage unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: be499bac-1283-498e-b5b1-59d8c91047a4
This was referenced Oct 27, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: be499bac-1283-498e-b5b1-59d8c91047a4
Contributor
Contributor
|
Contributor
Abigail Liang (abigailliang-aks-sig-node)
added this pull request to stack #9946
October 28, 2026 23:43
This branch has not been deployed
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this PR does / why we need it:
Part [5/5] of the native ANC cloud-initialization series split from #9891.
Depends on [4/5] #9903, following the three smaller certificate layers.
This PR also hosts the integration acceptance harness for the complete stack.
This is the activation step:
The Go runtime order is certificates, eligible refresh scheduling, then
RepoDepot, followed by the existing provisioning scripts. This is separate
from the PR dependency order.
--provision-configprovisioning, before the existing scripts.both duplicate initialization and an intermediate version with no initialization.
ANC binary, including hotfix binaries.
logged best-effort cases; keep repository error events observable.
the existing certificate failure boundaries.
provisioning-order, real-system and VM-fixture coverage.
NBC retains precedence, including Phase 2.5. Traditional CSE/NBC, the physical
shell artifact, CustomData delivery, and VHD mappings remain unchanged. This PR
does not rewrite the provisioning scripts or remove the shell artifact.
At the initial five-part split (
8d95830), the stack preserved all 107 originalcloud production/test declarations from #9891's final implementation, with
13 additional direct capability tests: five from the previous split and
eight covering the newly isolated runtime/store/protocol boundaries. Relative
to the previously published three-part stack, all 112 declarations were retained
with eight additive tests. The declaration-equivalence and exact non-cloud
transplant comparisons refer to that initial split, before this integration
follow-up added E2E infrastructure. The follow-up does not change ANC's
production cloud initialization implementation or the first four PRs.
Series and merge order
main; includes the migration/dependency Mermaid diagrams.The current base is
abigailliang/anc-cloud-repodepotfor an incremental reviewdiff. After the preceding PRs merge, merge the updated
maininto this branchbefore retargeting to
mainand running required CI. This preserves theincremental diff when prerequisites were squash-merged.
Do not merge this PR into the dependency's feature branch.
This PR remains a draft while its prerequisites and real-VM acceptance are pending.
This PR's original ID, discussion, and branch history are retained through
additive commits; no force push was used. The aggregate #9891 and former
certificate PR #9902 are retained for reference.
Integration acceptance for the complete stack
Test the final PR head, not the preparatory branches in isolation.
The
nativecloudinit=trueselector registers six real-VM scenarios:Ubuntu2204_NativeCloudInit_OptedInUbuntu2204_NativeCloudInit_NotOptedInUbuntu2204_CloudInit_NBCPrecedenceAzureLinuxV3_NativeCloudInit_OptedInAzureLinuxV3_NativeCloudInit_NotOptedInAzureLinuxV3_CloudInit_NBCPrecedenceactual provisioning scripts plus the normal Node Ready and pod checks.
The observer wraps the real legacy initializer in rendered
nodecustomdata.yml;it does not replace provisioning or shell initialization with a success stub.
production endpoint override or VM WireServer redirection is added.
The supported custom-cloud input contract supplies a nonempty RepoDepot
endpoint while retaining public Azure ARM, identity and registry endpoints.
keys and packages. Successful metadata counters and cache checks prevent a
skipped or exhausted RepoDepot path from looking like a happy-path success.
cloudintegrationsuite:actual system trust/TLS, gpg, apt/dnf, cron, ten-attempt cache exhaustion with
Error telemetry, ordinary cron/legacy trust permission failures, certificate
fatal boundaries and observed in-flight HTTP cancellation. On a real VM it
additionally exercises systemd timer/service execution and authorization failure.
repository/keyring contents and the root crontab's contents/inode/timestamp
unchanged. System tests restore repository files/crontab and remove their
unique CA; they must never run on shared or production machines.
Manual CI entrypoint:
.pipelines/e2e-anc-cloud-init.yaml.It requires
Microsoft.Compute/PlatformSettingsOverrideregistration and asubscription without auto-injected RCV1P tags. Strict mode rejects missing
prerequisites, uses current-checkout compilation and explicit native/NBC modes,
disallows missing-VHD/capacity skips, clears skip tags and uses zero retries.
See execution and coverage details.
The YAML has not been registered as an external ADO pipeline or configured
as a GitHub required check. The pipeline owner must register it, run the final
stack head and require its successful result before merging the series.
Adding the YAML alone does not enforce a merge gate.
Validation
Passed locally for integration commit
9a99152566:Existing E2E artifact tests used GNU coreutils/
timeouton macOS.included the Linux
cloudintegrationbuild tag.Ubuntu 22.04 95.16s, Azure Linux 3 80.74s. These execute actual
trust tools, TLS, gpg, apt/dnf and cron rather than mocked command results.
six CLI scenario registrations; real AgentBaker bootstrap rendering/observer
preservation and Azure CustomData size checks; strict pipeline-YAML contract;
shellcheckandbash -nfor the pipeline script.Not run: Azure VM/VHD end-to-end provisioning, Node Ready/pod acceptance,
the public-endpoint custom-cloud fixture on a real VM, and systemd service/timer
execution. Container success is not VM acceptance. Azure Linux's complete public
vendor-repository fixture currently targets AMD64; the vendor AMD repository
does not publish ARM64 metadata. Mariner and Flatcar/ACL full-native acceptance
remain separate coverage.
The initial split also passed native template syntax and declaration/non-cloud
transplant comparisons. Regression cases retain provisioning exit code
0after ordinary cron/cache failures while preserving Error events; cancellation
continues to block provisioning.
Which issue(s) this PR fixes:
No linked issue.