Skip to content

WO Release/april2026#9799

Open
atharvau wants to merge 41 commits intoAzure:mainfrom
manaswita-chichili:release/april2026
Open

WO Release/april2026#9799
atharvau wants to merge 41 commits intoAzure:mainfrom
manaswita-chichili:release/april2026

Conversation

@atharvau
Copy link
Copy Markdown
Member


This checklist is used to make sure that common guidelines for a pull request are followed.

Related command

General Guidelines

  • Have you run azdev style <YOUR_EXT> locally? (pip install azdev required)
  • Have you run python scripts/ci/test_index.py -q locally? (pip install wheel==0.30.0 required)
  • My extension version conforms to the Extension version schema

For new extensions:

About Extension Publish

There is a pipeline to automatically build, upload and publish extension wheels.
Once your pull request is merged into main branch, a new pull request will be created to update src/index.json automatically.
You only need to update the version information in file setup.py and historical information in file HISTORY.rst in your PR but do not modify src/index.json.

Atharva and others added 30 commits April 14, 2026 11:03
Add --init-extended-location, --init-context, --init-hierarchy, --service-group,
and --release-train flags to 'az workload-orchestration target create' to reduce
onboarding from 15+ manual steps to a single command.

New commands:
- target prepare: Prepares Arc cluster (cert-mgr, trust-mgr, extension, CL)
- hierarchy create: Creates site hierarchy (SG, Site, Config, SiteRef)

Pre-operation hooks in target create:
1. --init-extended-location: calls target_prepare to set up cluster + CL
2. --init-context: discovers/creates WO context with capability injection
3. --init-hierarchy: creates site hierarchy linked to context
4. Default target-specification: injects Helm v3 in-cluster if not provided

Post-operation hook:
5. --service-group: links target to a service group after creation

8 flag combinations supported (from vanilla to full onboarding).
Includes unit tests for hierarchy, SG link, utils, and target prepare.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Extract _handle_init_context (150 lines) → context_init.py
- Extract _handle_init_hierarchy (100 lines) → hierarchy_init.py
- Add parse_arm_id() to utils.py (replaces 6 inline ARM ID parsers)
- Add invoke_silent() to utils.py (replaces 4 stdout suppression blocks)
- Use DEFAULT_TARGET_SPECIFICATION from consts.py
- _create.py custom code: 400 lines → 60 lines (orchestration only)
- Each onboarding module now has a single clear responsibility

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Move context_id config resolution before --init-hierarchy (hierarchy
  needs context_id for site-reference linking)
- Extract _resolve_context_id_from_config() for clarity
- Fix hierarchy_init.py sub_id: parse from context_id ARM ID or fall
  back to CLI Profile instead of cli_ctx.data (which returns None)

Tested: all 7 flag combinations pass on live AKS cluster

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The cluster preparation logic is now only accessible via
'target create --init-extended-location'. The underlying target_prepare
module is retained as an internal dependency.

Removed from: commands.py, _params.py, _help.py, custom.py

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Hierarchy creation is now only accessible via 'target create --init-hierarchy'.
The underlying modules are retained as internal dependencies.

Removed from: commands.py, _params.py, _help.py, custom.py

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix --release-train help text: 'dev' -> 'stable' to match DEFAULT_RELEASE_TRAIN
- Remove unused imports: PropertyMock from test_target_prepare, json/call from test_sg_link_and_utils
- Fix hierarchy_create.py docstring: remove claim about updating capabilities
- Preserve tags in target_sg_link refresh PUT to avoid dropping metadata

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t flags from target create

- Remove --init-extended-location, --init-context, --init-hierarchy, --release-train from target create
- Add 'target init' as standalone command (wraps target_prepare)
- Keep --service-group and default target-spec on target create
- Aligns with team decision: cluster setup and hierarchy as separate commands

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Implements 'az workload-orchestration target deploy' that chains
review, publish, and install into a single command with LRO polling.

- Supports --skip-review and --skip-install flags
- Supports --config-file for pre-review configuration
- Uses send_raw_request with ARM resource auth
- Polls LRO via Location/Azure-AsyncOperation headers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add --solution-template-name + --solution-template-version (friendly name)
  as alternative to --solution-template-version-id (ARM ID)
- Add --solution-template-rg for cross-RG templates
- Add --resume-from publish|install with --solution-version-id
- Add --solution-dependencies pass-through to review
- Add --config for pre-review configuration set
- Proper mutual exclusivity validation between ARM ID and friendly name
- Dynamic step counter adjusts based on active steps

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The review LRO response nests the solution version ARM ID at
properties.id, not properties.properties.id or the top-level id.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Config set needs --solution flag to use solution templates (not config templates)
- Improved solutionVersionId extraction debug logging

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove --skip-review, --skip-install, --no-wait from target deploy
- Fix disallowed HTML tags in help (wrap placeholders in backticks)
- Add short aliases: --stv-id, --stv, --ct-version for long options
- Remove --no-wait example from help

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove 'Next steps' and 'Extended Location JSON' print lines
- Keep diagnostic summary and success message
- CLI framework already prints the return dict as JSON

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Counter now increments only on step start, not on status update.
Shows [1/3]...[1/3] OK, [2/3]...[2/3] OK, [3/3]...[3/3] OK.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep it only on error paths for debugging.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When --site-id is provided, automatically creates a site-reference
linking the site to the context after creation. Site reference name
is derived from the site name (e.g., mySite -> mySite-ref).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…deploy

Users can use individual commands (target review/publish/install) for
partial operations. Deploy is now always a full chain.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
target install now supports two flows:
1. Full deploy: --solution-template-name + --stv (or --stv-id)
   Runs: config-set (opt) → review → publish → install
2. Direct install: --solution-version-id (old flow)
   Runs: install only

Removed: target deploy command, _params, _help, commands.py registration.
Kept: target_deploy.py module (used internally by install pre_operations).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…late

Config-set now auto-derives template info from solution template args:
  config-template-rg → solution-template-rg or --resource-group
  config-template-name → solution-template-name
  config-template-version → solution-template-version

Usage simplified to:
  az wo target install -g rg -n target --solution-template-name X --stv 1.0.0 --configuration values.yaml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Better reflects the command's purpose - it prepares the cluster,
not a specific target.

Command: az workload-orchestration cluster init -c cluster -g rg -l region

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Per Shubham's feedback: don't touch --target-specification.
Upcoming non-K8s workloads may change this, marked as future work.
Users must provide --target-specification explicitly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Solution templates can be in any RG, so friendly name resolution
uses the target's --resource-group. For cross-RG templates, use
the full ARM ID via --solution-template-version-id.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Removed --stv-id and --stv aliases. Use full names:
  --solution-template-version-id
  --solution-template-version

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Removed:
- --skip-cert-manager, --skip-trust-manager
- --kube-config, --kube-context
- Failed extension auto-reinstall logic

Kept args: -c, -g, -l, --release-train, --extension-version,
--extension-name, --custom-location-name

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Creates full resource stack in one command:
  1. Site (with level label)
  2. Configuration (in specified region)
  3. ConfigurationReference (links site to config)

Supports:
  - ResourceGroup: single site via --resource-group + shorthand/YAML
  - ServiceGroup: nested hierarchy up to 3 levels via YAML file

Usage:
  az wo hierarchy create -g rg --configuration-location eastus2euap --hierarchy-spec 'name=X level=factory'
  az wo hierarchy create --configuration-location eastus2euap --hierarchy-spec hierarchy.yaml

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…onfigs

- ResourceGroup flow: Site + Config + ConfigRef (3 resources)
- ServiceGroup flow: recursive SG + Site + Config + ConfigRef (up to 3 levels, 12 resources)
- Configs are always RG-scoped (--resource-group required)
- RBAC propagation wait after each SG creation (polls site list)
- Removed old hierarchy_create.py, using clean v2

E2E tested: 3-level SG hierarchy created successfully.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… from target install

These are review-specific args. Users can use standalone 'target review'
for advanced scenarios. Keeps target install clean.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Fix undefined 'inner' variable in solutionVersionId extraction
- Replace broad Exception catches with specific types
- Remove stale args from __init__.py (solution_template_rg, solution_instance_name, solution_dependencies)
- Fix line-too-long in hierarchy_create.py
- Remove unnecessary else after return
- Remove unused import time
- Fix ungrouped imports in target_prepare.py
- Add pylint disable for too-few-public-methods on CmdProxy
- Add pylint disable for unused-argument on invoke_cli_command

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 20, 2026 05:56
@azure-client-tools-bot-prd
Copy link
Copy Markdown

Validation for Breaking Change Starting...

Thanks for your contribution!

@azure-client-tools-bot-prd
Copy link
Copy Markdown

Hi @atharvau,
Please write the description of changes which can be perceived by customers into HISTORY.rst.
If you want to release a new extension version, please update the version in setup.py as well.

@yonzhan
Copy link
Copy Markdown
Collaborator

yonzhan commented Apr 20, 2026

Thank you for your contribution! We will review the pull request and get back to you soon.

@github-actions
Copy link
Copy Markdown
Contributor

The git hooks are available for azure-cli and azure-cli-extensions repos. They could help you run required checks before creating the PR.

Please sync the latest code with latest dev branch (for azure-cli) or main branch (for azure-cli-extensions).
After that please run the following commands to enable git hooks:

pip install azdev --upgrade
azdev setup -c <your azure-cli repo path> -r <your azure-cli-extensions repo path>

@github-actions
Copy link
Copy Markdown
Contributor

CodeGen Tools Feedback Collection

Thank you for using our CodeGen tool. We value your feedback, and we would like to know how we can improve our product. Please take a few minutes to fill our codegen survey

CLI Onboarding Simplification release:
- cluster init, hierarchy create (new commands)
- context create --site-id, target create --service-group (enhanced)
- target install with full deploy chain (enhanced)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces “onboarding simplification” workflows for the workload-orchestration extension: new helper modules plus new CLI entry points to reduce multi-step cluster/target/hierarchy setup, and enhancements to existing AAZ commands to optionally run chained operations automatically.

Changes:

  • Add onboarding helper modules (cluster init/prepare, hierarchy create/init, deploy chain, service-group linking, shared utilities/constants).
  • Register new CLI commands (workload-orchestration cluster init, workload-orchestration hierarchy create) and enhance AAZ commands (target install, target create, context create) with onboarding behaviors.
  • Add unit tests for parts of the new onboarding helpers (but some are currently inconsistent with the shipped implementations).

Reviewed changes

Copilot reviewed 22 out of 22 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
src/workload-orchestration/azext_workload_orchestration/tests/test_onboarding/test_target_prepare.py Adds unit tests around target-prepare helpers (preflight/helm/extension/storage-class).
src/workload-orchestration/azext_workload_orchestration/tests/test_onboarding/test_sg_link_and_utils.py Adds tests for SG link helper and onboarding utils/consts.
src/workload-orchestration/azext_workload_orchestration/tests/test_onboarding/test_hierarchy_create.py Adds tests intended for hierarchy creation flow/validation.
src/workload-orchestration/azext_workload_orchestration/tests/test_onboarding/init.py Test package init/documentation for onboarding test suite.
src/workload-orchestration/azext_workload_orchestration/onboarding/utils.py Adds shared utilities (CLI invocation wrappers, ARM ID parsing, progress printing).
src/workload-orchestration/azext_workload_orchestration/onboarding/target_sg_link.py Implements post-create linking of a target to a Service Group + target refresh.
src/workload-orchestration/azext_workload_orchestration/onboarding/target_prepare.py Implements cluster preparation (cert-manager, trust-manager, extension install, custom location).
src/workload-orchestration/azext_workload_orchestration/onboarding/target_deploy.py Adds deploy chain implementation (review→publish→install; pre-install variant).
src/workload-orchestration/azext_workload_orchestration/onboarding/hierarchy_init.py Adds lightweight RG-scoped hierarchy init helper for target-create onboarding.
src/workload-orchestration/azext_workload_orchestration/onboarding/hierarchy_create.py Adds hierarchy creation command supporting RG and ServiceGroup hierarchy types.
src/workload-orchestration/azext_workload_orchestration/onboarding/context_init.py Adds context auto-find/create + capability/hierarchy ensure logic for onboarding.
src/workload-orchestration/azext_workload_orchestration/onboarding/consts.py Introduces onboarding constants (API versions, defaults, timeouts).
src/workload-orchestration/azext_workload_orchestration/onboarding/init.py Exposes onboarding entry points (target_init, hierarchy_create, etc.).
src/workload-orchestration/azext_workload_orchestration/custom.py Imports onboarding custom command handlers for CLI registration.
src/workload-orchestration/azext_workload_orchestration/commands.py Registers new command groups/commands for onboarding workflows.
src/workload-orchestration/azext_workload_orchestration/aaz/latest/workload_orchestration/target/_install.py Enhances target install to optionally run deploy chain before install.
src/workload-orchestration/azext_workload_orchestration/aaz/latest/workload_orchestration/target/_create.py Enhances target create to resolve context-id from config + optional SG link.
src/workload-orchestration/azext_workload_orchestration/aaz/latest/workload_orchestration/context/_create.py Enhances context create to optionally auto-create a site-reference.
src/workload-orchestration/azext_workload_orchestration/_params.py Adds params for new commands and hierarchy-spec parsing.
src/workload-orchestration/azext_workload_orchestration/_help.py Adds help text for new onboarding commands.

Comment on lines +68 to +73
c.argument(
'skip_site_reference',
options_list=['--skip-site-reference'],
action='store_true',
help='Skip auto-creation of site-reference to context.',
)
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The new skip_site_reference argument is registered under the workload-orchestration support create-bundle command context, but it is unrelated to support bundles and is not consumed by that command. This will expose a confusing/unused flag to users; if the intent is to control site-reference creation it should be registered under the relevant context/onboarding command (or removed).

Suggested change
c.argument(
'skip_site_reference',
options_list=['--skip-site-reference'],
action='store_true',
help='Skip auto-creation of site-reference to context.',
)

Copilot uses AI. Check for mistakes.

For ServiceGroup:
az workload-orchestration hierarchy create \\
--configuration-location eastus2euap \\
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The module docstring ServiceGroup example omits --resource-group, but hierarchy_create() requires --resource-group for configuration resources. This example is currently invalid and should be updated to include the required argument.

Suggested change
--configuration-location eastus2euap \\
--resource-group rg --configuration-location eastus2euap \\

Copilot uses AI. Check for mistakes.
Comment on lines +123 to +140
def _put_resource(cli_ctx, url, body, label):
"""PUT a resource via send_raw_request. Logs on failure but doesn't crash."""
try:
resp = send_raw_request(
cli_ctx,
method="PUT",
url=url,
body=json.dumps(body),
resource=ARM_ENDPOINT,
headers=["Content-Type=application/json"],
)
if resp.status_code in (200, 201):
logger.info("%s created/updated successfully", label)
else:
logger.warning("%s PUT returned %d: %s", label, resp.status_code, resp.text)
except Exception as exc:
logger.warning("%s creation failed: %s", label, exc)
raise
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The docstring says this helper "doesn't crash" on failure, but the exception handler re-raises (raise) which will crash the caller. Either update the docstring to match behavior, or change the implementation to truly swallow/log failures if that's desired.

Copilot uses AI. Check for mistakes.
Comment on lines +46 to +70
def target_deploy(
cmd,
resource_group,
target_name,
solution_template_version_id=None,
solution_template_name=None,
solution_template_version=None,
config=None,
config_hierarchy_id=None,
config_template_rg=None,
config_template_name=None,
config_template_version=None,
):
"""Deploy a solution to a target: config-set → review → publish → install.

Standalone deploy function (used internally).
"""
sub_id = _get_subscription_id(cmd)

# --- Resolve solution-template-version-id ---
solution_template_version_id = _resolve_template_version_id(
solution_template_version_id, solution_template_name,
solution_template_version, None,
resource_group, sub_id,
)
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

target_deploy and target_deploy_pre_install introduce a new deploy chain used by target install (review/publish/config-set + LRO polling), but there are currently no unit tests covering success/failure/LRO behaviors. Consider adding tests that mock send_raw_request and validate _extract_solution_version_id, _parse_response/_poll_lro, and config-set invocation to prevent regressions.

Copilot uses AI. Check for mistakes.
- name: Create RG hierarchy with shorthand
text: az workload-orchestration hierarchy create -g my-rg --configuration-location eastus2euap --hierarchy-spec "name=Mehoopany level=factory"
- name: Create ServiceGroup hierarchy from YAML
text: az workload-orchestration hierarchy create --configuration-location eastus2euap --hierarchy-spec "@sg-hierarchy.yaml"
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The ServiceGroup example omits -g/--resource-group, but this command requires --resource-group (and the argument is marked required). The example as written will fail; update it to include the resource group parameter.

Suggested change
text: az workload-orchestration hierarchy create --configuration-location eastus2euap --hierarchy-spec "@sg-hierarchy.yaml"
text: az workload-orchestration hierarchy create -g my-rg --configuration-location eastus2euap --hierarchy-spec "@sg-hierarchy.yaml"

Copilot uses AI. Check for mistakes.
Comment on lines +115 to +118
config_name = f"{name}Config"
config_id = (
f"/subscriptions/{sub_id}/resourceGroups/{resource_group}"
f"/providers/{EDGE_RP_NAMESPACE}/configurations/{config_name}"
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

config_name is derived as f"{name}Config", which can easily exceed the stated configuration name limit (MAX_HIERARCHY_NAME_LENGTH = 24) and cause ARM PUT failures at runtime. Consider validating the effective configuration name length up front (and/or using a shorter/safe naming scheme) so users get a clear ValidationError before any resources are created.

Copilot uses AI. Check for mistakes.
:example: Full deploy (friendly name)
az workload-orchestration target install -g rg1 -n target1 --solution-template-name tmpl --solution-template-version 1.0.0
:example: Full deploy with config
az workload-orchestration target install -g rg1 -n target1 --solution-template-name tmpl --stv 1.0.0 --config values.yaml --config-template-rg rg1 --config-template-name tmpl --ct-version 1.0.0
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

The command docstring examples use flags that aren't defined for this command (--stv, --ct-version, and --config-template-*). Since the argument schema only supports --solution-template-version and --config, these examples are misleading and should be updated to the actual options users can pass.

Suggested change
az workload-orchestration target install -g rg1 -n target1 --solution-template-name tmpl --stv 1.0.0 --config values.yaml --config-template-rg rg1 --config-template-name tmpl --ct-version 1.0.0
az workload-orchestration target install -g rg1 -n target1 --solution-template-name tmpl --solution-template-version 1.0.0 --config values.yaml

Copilot uses AI. Check for mistakes.
Comment on lines +108 to +139
def test_failed_extension_gets_deleted_and_reinstalled(self, _, mock_invoke):
from azext_workload_orchestration.onboarding.target_prepare import _ensure_wo_extension
cmd = self._get_mock_cmd()

call_count = [0]
def side_effect(*args, **kwargs):
call_count[0] += 1
if call_count[0] == 1:
# First call: list returns failed extension
return [{
"extensionType": "microsoft.workloadorchestration",
"id": "/sub/rg/ext/wo-ext",
"name": "wo-ext",
"version": "2.1.11",
"provisioningState": "Failed",
}]
elif call_count[0] == 2:
# Second call: delete
return None
else:
# Third call: create
return {"id": "/sub/rg/ext/wo-ext-new"}

mock_invoke.side_effect = side_effect

result = _ensure_wo_extension(
cmd, 'cluster1', 'rg1', 'wo-ext', None, 'preview', False
)

# Should have called: list, delete, create
self.assertEqual(mock_invoke.call_count, 3)

Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

This test expects _ensure_wo_extension() to perform a delete + reinstall when an existing extension is in Failed state (3 invoke_cli_command calls). The current implementation does not issue any delete call, so this test will fail. Either update _ensure_wo_extension() to delete failed extensions before creating, or adjust the test expectations to match the implemented behavior.

Copilot uses AI. Check for mistakes.
Comment on lines +27 to +35
from azext_workload_orchestration.onboarding.hierarchy_create import hierarchy_create
cmd = self._get_mock_cmd()

with self.assertRaises(ValidationError) as ctx:
hierarchy_create(
cmd, name='this-name-is-way-too-long-for-config', # 36 chars
resource_group='rg1', location='eastus',
level_label='Region', skip_context=True,
)
Copy link

Copilot AI Apr 20, 2026

Choose a reason for hiding this comment

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

These tests call hierarchy_create() with keyword args like name, location, level_label, skip_context, and patch helpers such as _arm_put_quiet/invoke_cli_command that do not exist in the current onboarding/hierarchy_create.py implementation. As written, the tests will raise TypeError/AttributeError rather than validating behavior; update the tests to match the new hierarchy_create(cmd, resource_group, configuration_location, hierarchy_spec) API (or adjust the implementation to the intended signature).

Copilot uses AI. Check for mistakes.
@yonzhan yonzhan requested a review from necusjz April 20, 2026 06:03
@yonzhan
Copy link
Copy Markdown
Collaborator

yonzhan commented Apr 20, 2026

WO release

Atharva and others added 9 commits April 20, 2026 11:48
- Add help for 'cluster' and 'hierarchy' command groups
- Fix hierarchy create SG example to include -g
- Add -v alias for --solution-template-version-id
- Add --version alias for --solution-template-version

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When user passes @file.yaml, Azure CLI framework pre-loads the file
content and passes YAML text as the value. Parser now handles 3 modes:
1. File path: hierarchy.yaml (reads file)
2. YAML content: @hierarchy.yaml (CLI pre-loads, parser detects YAML)
3. Shorthand: name=X level=Y (key=value pairs)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
All print() calls in cluster init, hierarchy create, and target install
now write to stderr. The -o flag output (json, table, tsv, yaml) is
clean with no progress messages mixed in.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
RG output:
  📁 MyFactory (factory)
  ├── Site 'MyFactory' ✓
  ├── Configuration 'MyFactoryConfig' ✓
  └── ConfigurationReference ✓

SG output:
  └── 📁 MyCountry (country)
      ├── Site 'MyCountry' ✓
      ├── Configuration 'MyCountryConfig' ✓
      └── ConfigurationReference ✓
      └── 📁 MyRegion (region)
          ...

Removed 'Waiting for RBAC propagation...' message (still waits silently).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1. Fix tree characters in SG hierarchy (proper │├└ nesting)
2. Add --solution-template-rg to target install (ST can be in different RG)
3. Clean deploy completion message (no === banner)
4. Resources shown under parent node correctly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Standardize output across all commands:
- cluster init: tree-style step indicators
- hierarchy create: already had tree output
- target create --service-group: tree-style link message
- target install deploy chain: tree-style progress
- Replace all [OK] with ✓

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants