Skip to content

Commit 65e7361

Browse files
authored
v0.8.87: pipeline display-name rename (Config/Monitor/Update) + connectivity output + monitor ITSM (#93)
* v0.8.85: consolidate setup workflow and align pipeline/version metadata * test-run-timings * v0.8.85 follow-up: delete ADO auth+inventory workflows and add merged ADO setup pipeline * v0.8.85 follow-up: move collapsible subscription section into Export-AzLocalAuthValidationReport cmdlet; track test-run-timings.csv * v0.8.85 follow-up: fix live integration test failures (Step.0 ErrorActionPreference, Step.3 path, Step.4 SummaryPath) * Add test-run-timings.csv to repo (test performance metrics) * docs: align pipeline appendix with Setup/Fleet naming * chore: update test run timings * v0.8.85: address PR #91 review findings - manifest, docs, mojibake, prune tests - Get-AzLocalPipelineManifest: collapse legacy authentication-test + inventory-clusters rows into the merged setup-validate-and-inventory entry - appendix-pipelines.md / README.md: replace removed filenames + old Step naming with Setup:/Fleet: numbering; fix section 13 file-layout block and section 14 reference; repair broken cross-doc anchors (README 8.1.1 -> #fleet-01, sideload.md -> #fleet-03); update present-tense Step.7 reference - appendix-pipelines.md: reconcile Setup: 01 trigger docs to the shipped weekly Sunday 08:00 UTC cron - fleet-update-status.yml: fix mojibake in YAML comment - apply-updates-schedule.example.yml: replace Step.5/Step.7 with stable apply-updates.yml / Fleet: 04 references - Tests: add 10 -PruneDeprecated regression tests (6 Copy- + 4 Update-) covering both-removed, single-removed, ID-mismatch-preserved, omitted-flag and -WhatIf paths * docs: clarify sideload-catalog.example.yml header comment (v0.8.7 on-prem solution/SBE update sideloading) * docs: fix grammar in sideload-catalog.example.yml header (introduce -> introduced) * v0.8.86: rename onboarding pipelines Setup -> Config + clarify GitHub Environments are optional - Rename the three onboarding workflow display names from `Setup: 0N` to `Config: 0N` (GitHub Actions `name:` and Azure DevOps `displayName:`/`name:`) so the Actions sidebar / ADO Pipelines list sorts the onboarding workflows ahead of the `Fleet: 0N` operational workflows (C sorts before F; the old `Setup:` prefix sorted after `Fleet:`). Display-name-only change - filenames, AZLOCAL-PIPELINE-ID values, aliases and prune logic are unchanged. - Update bundled pipeline README.md + docs/appendix-pipelines.md (headings, cross-references, anchors, naming rationale) to the Config: NN naming. - README.md (Automation-Pipeline-Examples): clarify that GitHub Environments are OPTIONAL. The branch-scoped federated credential is all OIDC needs, so a blank `environment` input is the supported minimal setup. Environments are a governance wrapper (approval gates, deployment-branch rules, wait timers, per-ring identities); environment-scoped federated credentials are only needed when a run actually names an environment. Mark the environment table, the inline + PowerShell env-scoped credential blocks, the subject-claim table row, and the section-5 secrets script accordingly. - Version bump to 0.8.86: psd1 ModuleVersion + ReleaseNotes, psm1 $script:ModuleVersion, CHANGELOG.md, both README files, docs/release-history, Tests version assertion, and all GENERATED_AGAINST_MODULE_VERSION pins across the bundled GitHub Actions and Azure DevOps templates. Full Pester suite: 1266 passed, 0 failed, 1 skipped. * ci: disable hosted Pester workflow (comment out pull_request + push triggers; keep workflow_dispatch). Suite is run locally before every push. * v0.8.87: rename 'Orphan ARBs' section to 'Non-Azure Local and/or Orphan ARB appliances' New-AzLocalFleetConnectivityStatusSummary (Fleet: 02) markdown output: rename the Orphan ARBs section, add intro line, and expand the caveat to note that an Arc resource bridge with no matching in-scope Azure Local cluster is NOT necessarily orphaned - Arc resource bridge is also used by VMware vSphere and SCVMM. Adds investigate-before-acting guidance. KPI note, causes list, and cluster-table cross-reference updated to match. Output text only; no API or behavioural change. Lock-step version bump 0.8.86 -> 0.8.87: psd1 (ModuleVersion + ReleaseNotes), psm1 ($script:ModuleVersion), CHANGELOG, both README sections + appendix, Tests assertion, docs/release-history.md, and all 20 GENERATED_AGAINST_MODULE_VERSION pins. Full Pester suite green (1266 passed, 0 failed, 1 skipped, 38 not-run). * v0.8.87: collapse Cluster Connectivity (with ARB Status) table by default New-AzLocalFleetConnectivityStatusSummary now wraps the per-cluster Cluster Connectivity (with ARB Status) table in a collapsed <details> block with an 'Expand to view clusters' summary, so the Fleet: 02 step summary stays compact. Added a Pester assertion for the details/summary wrapper. Output text only; no API or behavioural change. Release notes (psd1/CHANGELOG/README/release-history) updated within the in-flight v0.8.87. Full Pester suite green (1267 passed, 0 failed, 1 skipped). * v0.8.87: split Cluster Connectivity table into with/without connectivity issues New-AzLocalFleetConnectivityStatusSummary now renders two per-cluster tables instead of one: - '### Cluster with Connectivity Issues' - clusters that are NOT (Connectivity = Connected AND ARB Status = Running). Shown first and expanded. - '### Cluster without Connectivity Issues' - clusters that ARE Connected with a Running ARB. Collapsed behind an 'Expand to view clusters' details block. Both tables share the same heading columns. Row rendering is factored into a plain scriptblock (no .GetNewClosure()) reused by both tables. Added/updated Pester assertions for both headings, the partitioning, and the collapsed block; fixed the CSV-input context assertion that referenced the old single heading. Release notes (psd1/CHANGELOG/README/release-history) updated within the in-flight v0.8.87 (ReleaseNotes 9872 chars, under the 10000 limit). Full Pester suite green (1270 passed, 0 failed, 1 skipped). Output text only; no API change. * v0.8.87: rename bundled pipeline display names to Config:/Monitor:/Update: scheme Renames all bundled pipeline display names (name: on GitHub Actions, displayName:/name: on Azure DevOps) into a three-group single-digit scheme: Config: 1-3 (onboarding/config), Monitor: 1-3 (day-2 fleet monitoring), Update: 1-4 (update lifecycle), replacing the former Setup: 0N / Fleet: 0N prefixes. Monitor: 2 is Fleet Health Status and Monitor: 3 is Fleet Update Status so the numbering matches alphabetical order. Display name only - filenames, AZLOCAL-PIPELINE-ID values, aliases, and -PruneDeprecated logic are unchanged. Updates the bundled README, appendix-pipelines.md (grouped/ordered conventions, alphabetical file layout), ITSM docs, release docs, the manifest ReleaseNotes, CHANGELOG, the schedule auditor's emitted markdown (Update: 4), and the matching Pester assertions. Full suite green: 1282 passed, 0 failed, 1 skipped.
1 parent 0ae5abe commit 65e7361

38 files changed

Lines changed: 966 additions & 239 deletions

AzLocal.UpdateManagement/Automation-Pipeline-Examples/.itsm/azurelocal-itsm.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,21 @@ triggers:
4848
raiseTicket: false
4949
NotReady:
5050
raiseTicket: false
51+
52+
# ----- Update: 4 - Monitor In-Flight Updates statuses (v0.8.87) -----
53+
# Emitted by Export-AzLocalUpdateRunMonitorReport in update-monitor.xml.
54+
# Wire monitor-updates.yml with raise_itsm_ticket=true to open tickets for
55+
# these. Dedupe key = SHA256(ClusterResourceId|UpdateName|TriggerCategory),
56+
# so a stuck/attempt-gap cluster opens at most ONE incident until it clears.
57+
AttemptWithoutRun:
58+
raiseTicket: true
59+
severity: 3
60+
category: "Update attempt with no observable updateRun" # UpdateLastAttempt tag set, but no updateRun materialised (commonly a URP package pre-install health-check failure)
61+
StepError:
62+
raiseTicket: true
63+
severity: 2
64+
category: "Update step stuck in error" # progress.status == Error while state is still InProgress
65+
LongRunningOverall:
66+
raiseTicket: false # informational backstop; opt-in if you want a ticket per run exceeding the overall-elapsed threshold
67+
LongRunningStep:
68+
raiseTicket: false # informational; opt-in if you want a ticket per run whose current step exceeds the per-step threshold

AzLocal.UpdateManagement/Automation-Pipeline-Examples/README.md

Lines changed: 57 additions & 53 deletions
Large diffs are not rendered by default.

AzLocal.UpdateManagement/Automation-Pipeline-Examples/apply-updates-schedule.example.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
# A cron firing that lands on a day with NO matching schedule rows is
2828
# logged and exits 0 - no errors, no failures.
2929
#
30-
# This file is REQUIRED for the "Fleet: 04 - Apply Updates"
30+
# This file is REQUIRED for the "Update: 3 - Apply Updates"
3131
# (apply-updates.yml) pipeline when triggered by a schedule (not
3232
# workflow_dispatch). If the file is missing, apply-updates.yml throws
3333
# with the exact remediation command.

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates-schedule-audit.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: apply-updates-schedule-audit
2-
# Config: 03 - Apply-Updates Schedule Coverage Audit Pipeline
2+
# Config: 3 - Apply-Updates Schedule Coverage Audit Pipeline
33
# This pipeline runs the read-only Test-AzLocalApplyUpdatesScheduleCoverage advisor
44
# weekly to detect drift between the cron schedule(s) in your apply-updates pipeline
55
# YAML and the UpdateStartWindow tags that operators have placed on Azure Local clusters.
@@ -87,7 +87,7 @@ parameters:
8787
default: false
8888

8989
variables:
90-
GENERATED_AGAINST_MODULE_VERSION: '0.8.86'
90+
GENERATED_AGAINST_MODULE_VERSION: '0.8.87'
9191
REQUIRED_MODULE_VERSION: '${{ parameters.moduleVersion }}'
9292
reportsPath: '$(Build.ArtifactStagingDirectory)/reports'
9393
# v0.8.7 sideload advisor defaults. Override at the pipeline / variable-group
@@ -98,7 +98,7 @@ variables:
9898

9999
stages:
100100
- stage: ScheduleCoverage
101-
displayName: 'Config: 03 - Audit Apply-Updates Schedule Coverage'
101+
displayName: 'Config: 3 - Audit Apply-Updates Schedule Coverage'
102102
jobs:
103103
- job: Audit
104104
displayName: 'Run Schedule Coverage Advisor'

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/apply-updates.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: apply-updates
2-
# Fleet: 04 - Apply Updates to Azure Local Clusters
2+
# Update: 3 - Apply Updates to Azure Local Clusters
33
# This pipeline applies updates to clusters filtered by UpdateRing tag value
44

55
# Author guidance lives OUTSIDE the customise markers so module refreshes
@@ -129,7 +129,7 @@ variables:
129129
# log if the YAML appears stale - prompting you to refresh via
130130
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
131131
- name: GENERATED_AGAINST_MODULE_VERSION
132-
value: '0.8.86'
132+
value: '0.8.87'
133133
# Resolution order for the module version pin (leave all unset to install the latest,
134134
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
135135
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
@@ -252,7 +252,7 @@ stages:
252252

253253
# Stage 2: Apply Updates (with approval gate for production)
254254
- stage: ApplyUpdates
255-
displayName: 'Fleet: 04 - Apply Updates'
255+
displayName: 'Update: 3 - Apply Updates'
256256
dependsOn: CheckReadiness
257257
condition: and(succeeded(), gt(dependencies.CheckReadiness.outputs['ReadinessCheck.readiness.ReadyCount'], 0))
258258

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/assess-update-readiness.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: assess-update-readiness
2-
# Fleet: 01 - Assess Update Readiness (Pre-flight go/no-go gate)
2+
# Update: 1 - Assess Update Readiness (Pre-flight go/no-go gate)
33
# --------------------------------------------------
44
# Runs Get-AzLocalClusterUpdateReadiness and Test-AzLocalClusterHealth -BlockingOnly
55
# against a target UpdateRing (or the whole fleet) BEFORE apply-updates.yml runs.
@@ -70,7 +70,7 @@ variables:
7070
# the version actually installed and to the latest on PSGallery, and emits a warning
7171
# log if the YAML appears stale - prompting you to refresh via
7272
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
73-
GENERATED_AGAINST_MODULE_VERSION: '0.8.86'
73+
GENERATED_AGAINST_MODULE_VERSION: '0.8.87'
7474
# Resolution order for the module version pin (leave all unset to install the latest,
7575
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
7676
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
@@ -82,7 +82,7 @@ pool:
8282

8383
stages:
8484
- stage: Assess
85-
displayName: 'Fleet: 01 - Assess Update Readiness'
85+
displayName: 'Update: 1 - Assess Update Readiness'
8686
jobs:
8787
- job: AssessReadiness
8888
displayName: 'Readiness + blocking health gate'

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-connectivity-status.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: fleet-connectivity-status
2-
# Fleet: 02 - Fleet Connectivity Status Monitoring Pipeline
2+
# Monitor: 1 - Fleet Connectivity Status Monitoring Pipeline
33
# This pipeline surfaces network-connectivity issues across every Azure Local
44
# cluster the service connection can read - four scopes in one pipeline:
55
#
@@ -49,7 +49,7 @@
4949

5050
# Pipeline display name carries the same Step.N - prefix as the filename so the
5151
# ADO pipelines list (sorts by `name:` field) lists pipelines in execution order.
52-
name: 'Fleet: 02 - Fleet Connectivity Status'
52+
name: 'Monitor: 1 - Fleet Connectivity Status'
5353

5454
# BEGIN-AZLOCAL-CUSTOMIZE:schedule-triggers
5555
# Edits inside this block are preserved across Update-AzLocalPipelineExample
@@ -110,7 +110,7 @@ variables:
110110
# the version actually installed and to the latest on PSGallery, and emits a warning
111111
# log if the YAML appears stale - prompting you to refresh via
112112
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
113-
GENERATED_AGAINST_MODULE_VERSION: '0.8.86'
113+
GENERATED_AGAINST_MODULE_VERSION: '0.8.87'
114114
# Resolution order for the module version pin (leave all unset to install the latest,
115115
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
116116
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-health-status.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: fleet-health-status
2-
# Fleet: 07 - Fleet Health Status Monitoring Pipeline
2+
# Monitor: 2 - Fleet Health Status Monitoring Pipeline
33
# This pipeline surfaces 24-hour system health-check failures across every Azure Local
44
# cluster the service connection can read - including clusters that are already
55
# "up to date" with no available updates. The 24-hour health checks continue to run
@@ -105,7 +105,7 @@ variables:
105105
# the version actually installed and to the latest on PSGallery, and emits a warning
106106
# log if the YAML appears stale - prompting you to refresh via
107107
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
108-
GENERATED_AGAINST_MODULE_VERSION: '0.8.86'
108+
GENERATED_AGAINST_MODULE_VERSION: '0.8.87'
109109
# Resolution order for the module version pin (leave all unset to install the latest,
110110
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
111111
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/fleet-update-status.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: fleet-update-status
2-
# Fleet: 06 - Fleet Update Status Monitoring Pipeline
2+
# Monitor: 3 - Fleet Update Status Monitoring Pipeline
33
# This pipeline monitors update status across all Azure Local clusters and generates reports
44
#
55
# USE CASES:
@@ -93,7 +93,7 @@ variables:
9393
# the version actually installed and to the latest on PSGallery, and emits a warning
9494
# log if the YAML appears stale - prompting you to refresh via
9595
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
96-
GENERATED_AGAINST_MODULE_VERSION: '0.8.86'
96+
GENERATED_AGAINST_MODULE_VERSION: '0.8.87'
9797
# Resolution order for the module version pin (leave all unset to install the latest,
9898
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
9999
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).

AzLocal.UpdateManagement/Automation-Pipeline-Examples/azure-devops/manage-updatering-tags.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AZLOCAL-PIPELINE-ID: manage-updatering-tags
2-
# Config: 02 - Manage UpdateRing Tags
2+
# Config: 2 - Manage UpdateRing Tags
33
# This pipeline creates or updates UpdateRing tags on Azure Local clusters from a CSV file
44
#
55
# WORKFLOW:
@@ -46,7 +46,7 @@ variables:
4646
# log if the YAML appears stale - prompting you to refresh via
4747
# Copy-AzLocalPipelineExample -Update. See Automation-Pipeline-Examples/README.md section 5.
4848
- name: GENERATED_AGAINST_MODULE_VERSION
49-
value: '0.8.86'
49+
value: '0.8.87'
5050
# Resolution order for the module version pin (leave all unset to install the latest,
5151
# which is the default "fix-forward" behaviour): queue-time parameter > pipeline variable
5252
# 'REQUIRED_MODULE_VERSION' overridden at queue time > empty (latest).
@@ -58,7 +58,7 @@ pool:
5858

5959
stages:
6060
- stage: ManageTags
61-
displayName: 'Config: 02 - Manage UpdateRing Tags'
61+
displayName: 'Config: 2 - Manage UpdateRing Tags'
6262
jobs:
6363
- job: ApplyTags
6464
displayName: 'Apply UpdateRing Tags'

0 commit comments

Comments
 (0)