feat: full cloud-init tool parity with Python provisioning#909
Merged
Conversation
Add all development tools that were in the Python vm_provisioning.py but missing from the Rust cloud_init implementation: - GitHub CLI (gh) via official apt repo - Azure CLI via InstallAzureCLIDeb script - Node.js 22.x via NodeSource - Claude Code AI assistant - Go 1.24.1 - Python 3.13 + python-is-python3 - uv package manager - tmux configuration (status bar, socket permissions) - Docker post-install (add user to docker group) - npm global prefix configuration - .bashrc PATH additions (Go, Cargo, npm) Updates both cloud-init code paths: - cloud_init.rs: YAML-based cloud-init config (packages + runcmd) - vm.rs: shell-script based cloud-init provisioning Removes broken amplihack make install (target doesn't exist). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
5f3728b to
ca546ad
Compare
Quality audit findings: - default_dev_setup_commands() now takes username parameter instead of hardcoding 'azureuser' (HIGH: would fail for non-default usernames) - tmux socket dir uses dynamic UID via id -u instead of hardcoded 1000 (MEDIUM: would fail if user UID != 1000) - Added version verification step to shell-script cloud-init path (matches YAML path's existing verification) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Quality audit cycle 2 findings: - rustc --version ran as root but Rust is installed in user homedir (HIGH: verification always failed even when install succeeded) - Standardize on apt-get upgrade instead of full-upgrade to match shell-script path and avoid unexpected package removal (MEDIUM) - Remove unnecessary ripgrep reinstall (only needed with full-upgrade) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Quality audit cycle 3: eliminate predictable /tmp path for GitHub CLI GPG keyring download. Download directly to /etc/apt/keyrings/ in both cloud-init code paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.
Summary
Adds all development tools from the Python vm_provisioning.py that were missing from the Rust cloud-init implementation. The Simard VM showed that only Rust and .NET were installed — gh, az CLI, Node.js, Claude, Go, and other tools were never provisioned.
Changes
Updates both cloud-init code paths (YAML in cloud_init.rs and shell-script in vm.rs):
make install(target does not exist)Merge-Ready Evidence
QA-team
tests/agentic-scenarios/cloud-init-tool-parity.yamlgadugi-test validate: ✅ 3/3 valid, 0 invalidgadugi-test run: ✅ 3/3 passed (cloud-init-tool-parity + 2 existing scenarios)Docs
Changed surfaces reviewed:
cloud_init.rs,vm.rs— both are internal provisioning code with no CLI/API/config impact. No user-facing documentation changes needed.Quality Audit (4 cycles, final clean)
default_dev_setup_commands(username)$(id -u username)rustc --versionran as root but Rust installed in user homedir →su - user -c ...full-upgradevsapt-get upgrade) → standardized onapt-get upgrade/tmppath → download directly to/etc/apt/keyrings/CI
Scope
3 files changed, all directly related:
rust/crates/azlin-azure/src/cloud_init.rs— YAML cloud-init generatorrust/crates/azlin-azure/src/vm.rs— shell-script cloud-init generatortests/agentic-scenarios/cloud-init-tool-parity.yaml— QA scenario