Skip to content

Add reviewed native VCF backup wizard - #1071

Open
mdaneri wants to merge 12 commits into
mainfrom
feature/1066-vcf-backup-wizard
Open

mdaneri wants to merge 12 commits into
mainfrom
feature/1066-vcf-backup-wizard

Conversation

@mdaneri

@mdaneri mdaneri commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

Adds a VCF Helper wizard for reviewed native backup configuration and one initial backup. Administrators first choose one or more products, then connect to each chosen Operations, NSX, vCenter or direct SDDC Manager source before reviewing one combined plan. New configuration requires an enabled, applied VCF Backup SFTP receiver. Administrators confirm TLS identity, discover eligible targets and review destinations, recurrence, retention, credentials and side effects before authorizing writes. Coverage gaps identify components outside the plan without presenting native ineligibility as an execution failure.

Operations recurrence is optional: preserve the exact existing full/incremental schedule by default, create a daily UTC full schedule, or explicitly disable recurrence. Daily full recurrence supports preserving, enabling or disabling incrementals, with a validated minimum 240-minute cadence and explicit fallback-to-full choice. The initial backup remains a separate action. Native writes are checkpointed and never automatically replayed. Successful completion requires native task success, configuration readback and fresh nonempty receiver artifacts for every selected component.

The Backup Operations list lives on VCF Backups beside the receiver settings. It has filters, separate local Date/Time columns and recorded task Elapsed duration. A row opens its status directly, without a redundant ID lookup or configuration wizard. Later successful reconciliation preserves recorded successful completion times. VCF Helper keeps configuration and links to the operations list. Configure VCF Backup always starts a fresh wizard. Read-only reconciliation runs in the background, survives browser closure, deduplicates active requests and reports restart interruption without replay. Status separates backup artifact verification from current-policy drift. Recovery remains available when the receiver is unready; refreshed API credentials are allowed only for the recorded identity. Fleet writes and token refresh recheck the reviewed service, while scheduler keys bind verified appliance identities. Per-group checks allow an earlier approved group to change its own settings while still rejecting drift in the next group.

Reuses the issue-approved Configure VCF Offline Depot wizard and shared grids, with Tasks-style read-only status. Includes operator documentation, synchronized version 0.9.469, route/mypy/UI contract updates and parameter documentation required by CI.

Closes #1066

Validation

  • Focused native, workflow, receiver, browser-route, router-contract, Python-documentation and UI checks; Ruff and scoped mypy for 80 modules. 62 JavaScript/shared-pattern tests passed, including status-only loading/recovery, date/time projection and elapsed handling. Focused reconciliation tests preserve successful completion timestamps and still adopt interrupted jobs. Browser-route checks preserve admin-only operation controls. Native proposal/write/readback round trips cover recurrence and incremental modes, with malformed intervals and unsupported intent rejected before dispatch. Repository checks, 104-page documentation checks, 120-file Markdown lint, strict documentation build and diff checks passed. The complete Python suite remains in canonical CI.
  • Canonical wheel deployed to the receipt-bound test appliance at 192.168.1.242. Integrated-browser checks cover multi-product first-step selection, Vault-backed Operations discovery, the 240-minute minimum, explicit fallback disabled in the exact review, and informative coverage gaps. Earlier checks cover standalone status, close/reopen behavior, column filters retained on refresh and desktop grid height. Original infrastructure and unrelated pending settings were preserved; the current UI batch made no native configuration or backup writes.
  • vCenter initial backup succeeded and matched 14 fresh encrypted files (4,146,518,867 bytes). Operations-managed initial backup succeeded and verified all eight eligible components, with 18 receiver files (731,552,451 bytes) in the original acceptance evidence. No restore exercise has been performed.
  • Live review-only checks passed for all three Operations recurrence modes and confirmed that the actual native schedule remained unchanged. Background read-only reconciliation returned promptly and completed independently of the browser; no native backup/configuration write was replayed. A later native policy change is shown separately from the successful initial backup.
  • Remaining runtime acceptance: direct SDDC Manager still returns a preflight SSH-validation HTTP 400 before configuration; direct NSX has not been configured by this task. Operations/Fleet coverage excludes components reporting backupAllowed=false, and a Fleet SDDC lifecycle-service backup is not proof of the separate legacy SDDC Manager backup. Optional recurrence controls currently apply to Operations; direct products retain their existing controls. Full VCF protection and restore acceptance are not claimed.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-30T20:56:58.228999Z a38d87e Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2d26e22915

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mdaneri

mdaneri commented Oct 29, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: af5535c527

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread atlaso/app/static/vcf-backup.js Resolved
@mdaneri

mdaneri commented Oct 29, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ebeb778f95

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mdaneri

mdaneri commented Oct 29, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 95bbf854bd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread atlaso/app/templates/vcf_helper.html Resolved
@mdaneri

mdaneri commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bb301f898c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mdaneri

mdaneri commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Please review exact head ed26b1c. This batch adds operation column filters and available-height layout, removes the status popup's redundant configuration shortcut, and makes Configure always open a fresh wizard. It also fixes the multi-group preflight finding: immutable identities and the pending group's original settings are rechecked without rejecting settings already changed by an earlier approved group.

Focused workflow, UI/PWA, Python documentation, Ruff/mypy, repository/documentation checks and 52 JavaScript/shared tests passed. The wheel is deployed to the receipt-bound test appliance; integrated-browser checks verified filtering retained on refresh, full desktop height, standalone status and fresh Configure after viewing an existing operation. No native backup writes were replayed.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. 👍

Reviewed commit: ed26b1cbd1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mdaneri

mdaneri commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

@codex review

Please review exact head 32c9304. The wizard now starts with multiple product choices, then queues each selected connection before combined review. Operations daily full recurrence supports preserving, enabling or disabling incrementals with a minimum 240-minute interval and explicit full-backup fallback. Coverage gaps clearly identify excluded components without implying selected backups failed.

Focused native/workflow tests and proposal/write/readback round trips passed, along with 57 JavaScript/shared tests, focused UI/PWA/parameter docs, Ruff/scoped mypy80, repository and documentation checks. Deployed wheel/browser checks verified product multi-selection, Vault-backed Operations discovery, incremental minimum validation and fallback=false in exact review. No native configuration or backup writes were made during this batch.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 32c9304236

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@mdaneri

mdaneri commented Oct 30, 2026

Copy link
Copy Markdown
Owner Author

@codex review

This batch moves Backup Operations to VCF Backups with separate local Date/Time columns and recorded task Elapsed duration. A row loads its status directly; the redundant editable ID/Load status controls are removed. VCF Helper keeps configuration and links to the list. Status-only startup preserves filters, epoch guards, request-local recovery credentials and read-only reconciliation. Later successful reconciliation preserves an already successful job's and steps' finish timestamps.

62 JavaScript/shared tests passed, including startup, direct row loading, date projection, elapsed sorting/formatting and manual/Vault reconciliation without a wizard. Focused timestamp/recovery, page and browser-route checks passed. Ruff/scoped mypy80, repository989, docs104, Markdown120, strict documentation build and diff checks passed. No native configuration or backup writes are part of this batch. Elapsed is recorded Atlaso task runtime including verification/recovery, not native transfer duration.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a38d87effc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1718 to +1720
component_ids = reference.get("component_ids")
if not isinstance(component_ids, list) or component_ids != item["component_ids"]:
raise ValueError("Native backup reference has invalid component coverage")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Compare recorded component coverage independently of ordering

If Fleet returns the same eligible components in a different order when recovery rediscovers inventory, this list comparison rejects the recorded backup reference before querying its task. A focused reproduction with recorded coverage ['a', 'b'] and rediscovered coverage ['b', 'a'] raises Native backup reference has invalid component coverage. Consequently, neither reconciliation nor explicit closure can finish, leaving the global backup reservation held despite unchanged component coverage. Compare membership independently of ordering while retaining duplicate and malformed-input checks.

Useful? React with 👍 / 👎.

Comment on lines +1370 to +1373
with NativeBackup(source, credential) as native:
native.login()
native.discover()
report = {"group_id": group["id"], "checkpoint": group["checkpoint"], "current": native.current(group["native_group_id"])}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Verify the recorded native identity during reconciliation

If Operations advertises a different Fleet service during recovery, NativeBackup.login() adopts its newly advertised endpoint and certificate, but reconciliation discards discovery without comparing that identity to the recorded source. It then interprets saved group/task references against the replacement service; if those identifiers also exist there, unrelated terminal results can authorize reservation release. Unlike the guarded execution path, a focused reconciliation reproduction accepted changed discovery identity and closed recovery. Check immutable appliance and Fleet service identity before interpreting recorded references, while continuing to allow mutable policy drift.

Useful? React with 👍 / 👎.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

Add a VCF Helper wizard for fleet backup configuration

1 participant