You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: AzLocal.UpdateManagement/Automation-Pipeline-Examples/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -64,7 +64,7 @@ By the end of this guide you will have:
64
64
-**Fleet Connectivity Status** (Step.4, v0.7.79+, enhanced in v0.7.85) - read-only daily snapshot of Arc agent connectivity, physical NIC health, Azure Resource Bridge status, and the node-count reconciliation between cluster `reportedProperties.nodes` and Arc-tagged physical machines. *Scheduled daily 05:30 UTC + manual.*
65
65
-**Assess Update Readiness** (Step.5) - pre-flight, report-only readiness + blocking-health snapshot, published as JUnit XML. *Manual only.*
66
66
-**Apply Updates** (Step.6) - apply updates to a single `UpdateRing` wave at a time, with WhatIf / dry-run support. *Manual only by default - **you must add a schedule** that lines up with your cluster `UpdateStartWindow` tags, see [Step 6 - Apply Updates](docs/appendix-pipelines.md#step-6---apply-updates) and [section 8](#8-scheduling-maintenance-windows-and-change-freeze-periods).*
67
-
-**Monitor In-Flight Updates** (Step.7, v0.7.90; v0.7.96 surfaces `Status` + deepest `ErrorMessage` columns, adds the `StepError` stuck-step JUnit type for runs that have hit an error inside a step without crossing the long-running threshold, and renders portal-linked Cluster Name / Update Name cells in the markdown summary). Operational snapshot during an active wave: lists each cluster whose latest update run is `InProgress`, with current step, progress (`completed/total steps`), elapsed duration, the LENS-vocab `Status` (`Success`/`Error`/`InProgress`/...), and the deepest `errorMessage` walked out of the nested ARM `steps[]` tree; flags long-running runs (default >6h) AND step-errored stuck runs as JUnit failures in the Checks tab. *Scheduled 5x/day at 20:00, 22:00, 00:00, 02:00, 04:00 UTC (every 2h across the typical overnight maintenance window) + manual; default cadence is editable in `Step.7_monitor-updates.yml` (v0.7.92+).*
67
+
-**Monitor In-Flight Updates** (Step.7, v0.7.90; v0.7.96 surfaces `Status` + deepest `ErrorMessage` columns, adds the `StepError` stuck-step JUnit type for runs that have hit an error inside a step without crossing the long-running threshold, and renders portal-linked Cluster Name / Update Name cells in the markdown summary). Operational snapshot during an active wave: lists each cluster whose latest update run is `InProgress`, with current step, progress (`completed/total steps`), elapsed duration, the `Status` column (`Success`/`Error`/`InProgress`/...), and the deepest `errorMessage` walked out of the nested ARM `steps[]` tree; flags long-running runs (default >6h) AND step-errored stuck runs as JUnit failures in the Checks tab. *Scheduled 5x/day at 20:00, 22:00, 00:00, 02:00, 04:00 UTC (every 2h across the typical overnight maintenance window) + manual; default cadence is editable in `Step.7_monitor-updates.yml` (v0.7.92+).*
68
68
-**Fleet Update Status** (Step.8, formerly Step.7; v0.7.96 promotes `NeedsAttention` into the **Update Failed** bucket, adds a new **Action Required** bucket for `PreparationFailed`, and folds `PreparationInProgress` into **Update In Progress**). Scheduled daily snapshot of fleet update state, surfaced in the Tests tab. Markdown summary's `📜 Update Run History and Error Details` table now also carries portal-linked Cluster Name / Update Name cells plus the deepest-step `ErrorMessage`. *Scheduled daily 06:00 UTC + manual.*
69
69
-**Fleet Health Status** (Step.9, formerly Step.8) - scheduled daily snapshot of 24-hour system health-check failures, surfaced in the Tests tab. *Scheduled daily 07:00 UTC + manual.*
70
70
- An end-to-end "ring-based" rollout pattern: Pilot -> Wave2 -> Production, with each ring gated on the previous wave's success.
Copy file name to clipboardExpand all lines: AzLocal.UpdateManagement/Automation-Pipeline-Examples/docs/appendix-pipelines.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -161,7 +161,7 @@ The table below is the ground truth for what each shipped YAML does **out of the
161
161
162
162
| Aspect | Value |
163
163
|---|---|
164
-
| **Purpose** | In-flight observability for an active update wave. Reports clusters whose latest update run is currently `InProgress` with the CURRENT STEP each cluster is on, the PROGRESS (`completed/total steps`), and the ELAPSED DURATION. Long-running runs are flagged via the `long_running_threshold_hours` input (default 6h) so an operator can spot a stuck cluster without waiting for the next daily `fleet-update-status` snapshot. **No new ARM calls**: data source is `Get-AzLocalUpdateRuns -Latest` (one row per cluster) - the same call already made by `fleet-update-status`. **v0.7.96 enhancements:** (1) every in-flight row now carries the LENS-vocab `Status` column from `properties.progress.status` (`Success` / `Error` / `InProgress` / `NotStarted` / `Skipped` / `Cancelled` / `Unknown`); (2) a new `ErrorMessage` column surfaces the deepest non-empty `errorMessage` walked from the nested `properties.progress.steps[]` tree (mirrors the LENS-Workbook `coalesce(e9Msg..e1Msg)` pattern via the new private `Get-DeepestErrorMessage` helper); (3) runs whose `Status='Error'` but elapsed time is BELOW `long_running_threshold_hours` (the stuck-but-still-fresh Arizona-shaped case) now generate a new `failureType='StepError'` JUnit entry so they appear in the Checks tab WITHOUT needing the long-running threshold to fire; (4) the always-shown Failed-runs block carries an MS Learn TSG link plus the Progress Status column; (5) markdown summary's Cluster Name and Update Name cells render as `<a href="https://portal.azure.com/...">` deep-links to the cluster's Updates blade and the single-instance update-run history view. |
164
+
| **Purpose** | In-flight observability for an active update wave. Reports clusters whose latest update run is currently `InProgress` with the CURRENT STEP each cluster is on, the PROGRESS (`completed/total steps`), and the ELAPSED DURATION. Long-running runs are flagged via the `long_running_threshold_hours` input (default 6h) so an operator can spot a stuck cluster without waiting for the next daily `fleet-update-status` snapshot. **No new ARM calls**: data source is `Get-AzLocalUpdateRuns -Latest` (one row per cluster) - the same call already made by `fleet-update-status`. **v0.7.96 enhancements:** (1) every in-flight row now carries a new `Status` column from `properties.progress.status` (`Success` / `Error` / `InProgress` / `NotStarted` / `Skipped` / `Cancelled` / `Unknown`); (2) a new `ErrorMessage` column surfaces the deepest non-empty `errorMessage` walked from the nested `properties.progress.steps[]` tree (uses a `coalesce(e9Msg..e1Msg)` recursion via the new private `Get-DeepestErrorMessage` helper); (3) runs whose `Status='Error'` but elapsed time is BELOW `long_running_threshold_hours` (the stuck-but-still-fresh Arizona-shaped case) now generate a new `failureType='StepError'` JUnit entry so they appear in the Checks tab WITHOUT needing the long-running threshold to fire; (4) the always-shown Failed-runs block carries an MS Learn TSG link plus the Progress Status column; (5) markdown summary's Cluster Name and Update Name cells render as `<a href="https://portal.azure.com/...">` deep-links to the cluster's Updates blade and the single-instance update-run history view. |
165
165
|**Inputs**|`scope` (`all-clusters` (default) or `by-update-ring`), `update_ring` (only used when `scope=by-update-ring`; single ring, `Prod;Ring2` semicolon-list, or `***` wildcard), `long_running_threshold_hours` (0-48, default 6), `module_version` (optional). |
166
166
|**Trigger**|**Manual only by default** (`workflow_dispatch` / **Run pipeline** button). A commented-out `schedule: cron '*/30 * * * *'` (GH) / `schedules: cron '*/30 * * * *'` (ADO) sample is shipped inside the `# BEGIN-AZLOCAL-CUSTOMIZE:schedule-triggers` block - uncomment it for the duration of an active wave, then re-comment it once the wave drains, so you do not generate 48 empty runs per day between waves. |
167
167
|**Cmdlets invoked**|`Get-AzLocalUpdateRuns`, `Get-AzLocalClusterInventory` (used for ring-scope mode). |
@@ -177,7 +177,7 @@ The table below is the ground truth for what each shipped YAML does **out of the
177
177
178
178
| Aspect | Value |
179
179
|---|---|
180
-
| **Purpose** | Daily fleet-wide snapshot of cluster update state. Read-only. **v0.7.90 pivots the Version Distribution markdown table by YYMM** (leading column `Version` = `2511`, `2604`, ...; new `Update Versions` column lists each distinct full version installed within that YYMM as `<version> x <count>` separated by `<br>`; rows sorted ascending by YYMM so the oldest YYMM is at the top). The underlying `<testsuite name="Fleet Version Distribution">` JUnit XML is unchanged - still one `<testcase>` per distinct full `CurrentVersion` - so machine-readable consumers and CI test-reporters are unaffected. **v0.7.96 reworks the Primary Status bucket cascade to align with the LENS workbook vocabulary:** `NeedsAttention` is now promoted into the **Update Failed** bucket; `PreparationFailed` lands in a new **Action Required** bucket (with its own actionable guidance in the Actions Required callout because the run never started, so re-arming is required); `PreparationInProgress` is folded into **Update In Progress**. The new bucket surfaces via (1) a new `<property name="primaryActionRequired" value="$stActionRequired"/>` JUnit attribute on the primary testsuite, (2) per-testcase `failureType='PreparationFailed'` instead of the generic `UpdateFailure`, (3) a new `ACTION_REQUIRED` `GITHUB_OUTPUT` (`actionRequired` pipeline variable in ADO), (4) `Summary.UpdateFailures` + `Summary.ActionRequired` in `readiness-status.json`, and (5) a new "Action Required (PreparationFailed)" row in the Primary Status markdown table with separate actionable prose in the Actions Required callout. The `📜 Update Run History and Error Details` markdown table renders Cluster Name and Update Name cells as `<a href="https://portal.azure.com/...">` deep-links (cluster's Updates blade + the single-instance update-run history view) - same linking as the Step.7 in-flight table. |
180
+
| **Purpose** | Daily fleet-wide snapshot of cluster update state. Read-only. **v0.7.90 pivots the Version Distribution markdown table by YYMM** (leading column `Version` = `2511`, `2604`, ...; new `Update Versions` column lists each distinct full version installed within that YYMM as `<version> x <count>` separated by `<br>`; rows sorted ascending by YYMM so the oldest YYMM is at the top). The underlying `<testsuite name="Fleet Version Distribution">` JUnit XML is unchanged - still one `<testcase>` per distinct full `CurrentVersion` - so machine-readable consumers and CI test-reporters are unaffected. **v0.7.96 reworks the Primary Status bucket cascade to align with the Azure portal Update Manager `state` filter:** `NeedsAttention` is now promoted into the **Update Failed** bucket; `PreparationFailed` lands in a new **Action Required** bucket (with its own actionable guidance in the Actions Required callout because the run never started, so re-arming is required); `PreparationInProgress` is folded into **Update In Progress**. The new bucket surfaces via (1) a new `<property name="primaryActionRequired" value="$stActionRequired"/>` JUnit attribute on the primary testsuite, (2) per-testcase `failureType='PreparationFailed'` instead of the generic `UpdateFailure`, (3) a new `ACTION_REQUIRED` `GITHUB_OUTPUT` (`actionRequired` pipeline variable in ADO), (4) `Summary.UpdateFailures` + `Summary.ActionRequired` in `readiness-status.json`, and (5) a new "Action Required (PreparationFailed)" row in the Primary Status markdown table with separate actionable prose in the Actions Required callout. The `📜 Update Run History and Error Details` markdown table renders Cluster Name and Update Name cells as `<a href="https://portal.azure.com/...">` deep-links (cluster's Updates blade + the single-instance update-run history view) - same linking as the Step.7 in-flight table. |
181
181
|**Inputs**| Scope (`-AllClusters` or `-ScopeByUpdateRingTag`), `throttle_limit` (optional). v0.7.4-style ITSM toggles are also exposed: `raise_itsm_ticket`, `itsm_config_path`, `itsm_dry_run`, `itsm_force_create` (all optional, default off). |
182
182
|**Trigger**| Manual (`workflow_dispatch` / **Run pipeline** button) **plus** scheduled daily at 06:00 UTC (`cron '0 6 * * *'`). Edit the cron in the YAML to change cadence. |
183
183
|**Cmdlets invoked**|`Get-AzLocalClusterInventory`, `Get-AzLocalClusterUpdateReadiness`, `Get-AzLocalUpdateSummary`, `Get-AzLocalAvailableUpdates`, `Get-AzLocalUpdateRuns`, `Get-AzLocalUpdateRunFailures`, `Get-AzLocalLatestSolutionVersion`. When ITSM is enabled: `Get-AzLocalItsmConfig`. |
Copy file name to clipboardExpand all lines: AzLocal.UpdateManagement/AzLocal.UpdateManagement.psd1
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -226,7 +226,7 @@ Documentation-only release. The three Markdown files that ship inside the publis
226
226
227
227
Apply via `Install-Module AzLocal.UpdateManagement -Force` (or `Update-Module`). If you only consume the cmdlets there is no behaviour change vs v0.7.96 - this is a docs-correctness republish. If you have copied the bundled YAMLs into your CI repo via `Update-AzLocalPipelineExample`, re-run it to refresh the version pin (pin-only short-circuit from v0.7.95 means `-Force` is not required).
228
228
229
-
## Version 0.7.96 - LENS-workbook parity: Status field, ErrorMessage column, StepError JUnit type, always-show unresolved Failed, Step.8 ActionRequired bucket
229
+
## Version 0.7.96 - Portal-parity: Status field, ErrorMessage column, StepError JUnit type, always-show unresolved Failed, Step.8 ActionRequired bucket
0 commit comments