Azure / Azure/typespec-azure

Define list operation matching rules for resolveArmResources

Open
#5,080 1 comment 0 reactions 1 assignee Claimed by @ArcturusZhang View on GitHub
feature lib:azure-resource-manager triaged:core
Dominant language
TypeScript
Stars
27
Forks
90
Avg merge
1d 22h
Merged PRs (30d)
156

Description

## Context

In Azure/typespec-azure#4851, `resolveArmResources` now creates resource identities only from identity operations (`read` and `createOrUpdate`) and appends list operations afterward.

A simple prefix rule works for resource-group list operations, for example:

```text
resource: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Foo/widgets/{widgetName}
list: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Foo/widgets
```

However, ARM resources can also expose list operations at different scopes for the same resource type, such as subscription-level list for a resource-group-scoped resource:

```text
resource: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Foo/widgets/{widgetName}
list: /subscriptions/{subscriptionId}/providers/Microsoft.Foo/widgets
```

That list path is not a direct prefix of the resource instance path, but it is still semantically a list operation for the same resource type.

## Work item

Define and document the acceptable matching rule for associating `list` operations with resolved resources.

The rule should cover:

- list-by-parent/list-by-resource-group paths that are direct prefixes of the resource instance path
- list-by-subscription paths for resource-group-scoped resources
- extension resource lists at tenant, subscription, resource group, management group, service group, and external-resource scopes
- avoiding false positives where a parent resource list is attached to a child or auxiliary resource merely because the resource type suffix happens to overlap
- generic/variable provider paths where the resource type cannot be concretely identified

## Expected outcome

`resolveArmResources` should attach all semantically valid list operations for a detected resource without using list operations to create new resource identities.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.