mirror of
https://github.com/ivenator1/proxmox-management.git
synced 2026-07-18 11:28:21 +08:00
[PR #14] [MERGED] Phase 4b: node OS update + manager self-update Python flows #14
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
pull-request
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
ivenator1/proxmox-management#14
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/ivenator1/proxmox-management/pull/14
Author: @ivenator1
Created: 6/2/2026
Status: ✅ Merged
Merged: 6/2/2026
Merged by: @ivenator1
Base:
main← Head:phase-4-vm-remote-node-flows📝 Commits (3)
aa1d723feat: port Phase 2+3 (node OS update + manager self-update) to Pythonb01287etest: add driver + settings tests for Phase 4b; fix reboot_host check_mode13b3365docs: update CLAUDE.md and roadmap for Phase 4b completion📊 Changes
13 files changed (+1170 additions, -48 deletions)
View changed files
📝
CLAUDE.md(+23 -8)📝
ansible/primitives/reboot_host.yml(+1 -0)📝
docs/migration-roadmap.md(+71 -15)📝
fleet-update.yml(+49 -20)📝
proxmox_fleet/cli.py(+22 -2)📝
proxmox_fleet/driver.py(+57 -0)➕
proxmox_fleet/flows/node.py(+196 -0)📝
proxmox_fleet/models/settings.py(+7 -0)📝
proxmox_fleet/status.py(+46 -0)📝
tests/unit/test_driver.py(+215 -3)➕
tests/unit/test_flow_node.py(+378 -0)📝
tests/unit/test_settings.py(+26 -0)➕
tests/unit/test_status_node.py(+79 -0)📄 Description
Summary
fleet-update.ymlintoflows/node.py, completing the migration of all five update phases to Pythonrun_node_update(): is_manager check viapct list, apt dist-upgrade with 5-retry loop, robust reboot check (reboot-required file OR kernel mismatch), proxy wait + 15 s settle post-reboot,node_status()status strings matching the Phase 2 Jinja tree byte-for-byterun_manager_update(): apt on localhost withignore_errors, reboot-required stat, never reboots--use-node-flowflag following the same pattern as all prior phases; legacy Phase 2/3 stays infleet-update.ymlgated byskip_phase_2/3until real-run parity is retiredreboot_host.yml: addedcheck_mode: false— Python owns the dry-run decision by passing eitherapt-get -sor the real command; Ansible check mode is bypassed at the primitive levelfleet-update --use-node-flow --check -e fleet_dry_run=trueproduced identicalfleet_node_datato the legacy Ansible path (all 5 nodes + Ansible-Manager, all OK)vm_updaterole bug: in dry-run mode the skipped "Update VM packages" task overwritesvm_apt_reswith{skipped: true, changed: false}, silently dropping VMs from the Discord notification. Unaffected in real runs; Python driver (--use-vm-flow) is immuneNew files
proxmox_fleet/flows/node.py—NodeFlowOutcome,run_node_update(),run_manager_update()tests/unit/test_status_node.py— 15 parity tests fornode_status(),manager_status(),node_should_report()tests/unit/test_flow_node.py— 16 flow tests: normal, reboot, manager-host skip, idle, rescue, dry-run, apt retry, proxy wait, manager variantsModified files
proxmox_fleet/status.py—node_status(),manager_status(),node_should_report()proxmox_fleet/models/settings.py—manager_lxc_id,apt_proxy_ip,apt_proxy_port,node_dry_run,node_auto_rebootproxmox_fleet/driver.py—_fold_node_outcome(),run_node_phase()(serial abort-on-failure; manager always runs)proxmox_fleet/cli.py—--use-node-flowflagfleet-update.yml— "Merge Python node state" play;skip_phase_2/3gatesansible/primitives/reboot_host.yml—check_mode: falsetests/unit/test_driver.py— 6 newrun_node_phase()tests;ScriptedExecutorgainsdefault=paramtests/unit/test_settings.py— 2 new tests for node/manager fieldsCLAUDE.md,docs/migration-roadmap.md— updated throughoutTest plan
pytest tests/unit/ -q→ 541 passedpython -m mypy proxmox_fleet/→ no issuesfleet-update --use-node-flow --check -e fleet_dry_run=trueon live cluster → all nodes OK, Phase 2/3 skipped in Ansible, Discord notification sentfleet_node_datawith and without flag → byte-identical🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.