Skip to content

Latest commit

 

History

History
732 lines (482 loc) · 39.1 KB

File metadata and controls

732 lines (482 loc) · 39.1 KB

@azure-tools/typespec-azure-resource-manager

TypeSpec Azure Resource Manager library

Install

npm install @azure-tools/typespec-azure-resource-manager

Usage

Add the following in tspconfig.yaml:

linter:
  extends:
    - "@azure-tools/typespec-azure-resource-manager/all"

RuleSets

Available ruleSets:

  • @azure-tools/typespec-azure-resource-manager/all

Rules

Name Description
@azure-tools/typespec-azure-resource-manager/arm-no-record Don't use Record types for ARM resources.
@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts Operation paths must be unique when compared case-insensitively.
@azure-tools/typespec-azure-resource-manager/arm-common-types-version Specify the ARM common-types version using @armCommonTypesVersion.
@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes Ensure delete operations have the appropriate status codes.
@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes Ensure put operations have the appropriate status codes.
@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes Ensure post operations have the appropriate status codes.
@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment @armResourceAction should not be used with @segment.
@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property Warn about duplicate properties in resources.
@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property Check for invalid resource envelope properties.
@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format Check for valid versions.
@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars Arm resource key must contain only alphanumeric characters.
@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern The resource name parameter should be defined with a 'pattern' restriction.
@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response [RPC 008]: PUT, GET, PATCH & LIST must return the same resource schema.
@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars Arm resource name must contain only alphanumeric characters.
@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state Check for properly configured provisioningState property.
@azure-tools/typespec-azure-resource-manager/version-progression Validate that ARM service versions all use unique dates and are declared in strictly increasing chronological order.
@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key Validate that custom resource contains a key property.
@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage Verify the usage of @customAzureResource decorator.
@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels Tracked Resources must use 3 or fewer levels of nesting.
@azure-tools/typespec-azure-resource-manager/arm-resource-operation Validate ARM Resource operations.
@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation Check for resources that must have a delete operation.
@azure-tools/typespec-azure-resource-manager/empty-updateable-properties Should have updateable properties.
@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator Each resource interface must have an @armResourceOperations decorator.
@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb Actions must be HTTP Post or Get operations.
@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation Tenant and Extension resources should not define a list by subscription operation.
@azure-tools/typespec-azure-resource-manager/lro-location-header A 202 response should include a Location response header.
@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers Array properties should describe their identifying properties with x-ms-identifiers. Decorate the property with @OpenAPI.extension("x-ms-identifiers", #[id-prop]) where "id-prop" is a list of the names of identifying properties in the item type.
@azure-tools/typespec-azure-resource-manager/no-response-body Check that the body is empty for 202 and 204 responses, and not empty for other success (2xx) responses.
@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint Check for missing Operations interface.
@azure-tools/typespec-azure-resource-manager/patch-envelope Patch envelope properties should match the resource properties.
@azure-tools/typespec-azure-resource-manager/arm-resource-patch Validate ARM PATCH operations.
@azure-tools/typespec-azure-resource-manager/resource-name Check the resource name.
@azure-tools/typespec-azure-resource-manager/retry-after Check if retry-after header appears in response body.
@azure-tools/typespec-azure-resource-manager/unsupported-type Check for unsupported ARM types.
@azure-tools/typespec-azure-resource-manager/secret-prop RPC-v1-13: Check that property with names indicating sensitive information(e.g. contains auth, password, token, secret, etc.) are marked with @secret decorator.
@azure-tools/typespec-azure-resource-manager/no-empty-model ARM Properties with type:object that don't reference a model definition are not allowed. ARM doesn't allow generic type definitions as this leads to bad customer experience.

Decorators

Azure.ResourceManager

@armCommonTypesVersion

This decorator is used either on a namespace or a version enum value to indicate the version of the Azure Resource Manager common-types to use for refs in emitted Swagger files.

@Azure.ResourceManager.armCommonTypesVersion(version: valueof string | EnumMember)
Target

Namespace | EnumMember

Parameters
Name Type Description
version valueof string | EnumMember The Azure.ResourceManager.CommonTypes.Versions for the desired common-types version or an equivalent string value like "v5".

@armLibraryNamespace

@armLibraryNamespace designates a namespace as containign Azure Resource Manager Provider information.

@Azure.ResourceManager.armLibraryNamespace
Target

Namespace

Parameters

None

Examples
@armLibraryNamespace
namespace Microsoft.Contoso;

@armProviderNamespace

@armProviderNamespace sets the Azure Resource Manager provider name. It will default to use the Namespace element value unless an override value is specified.

@Azure.ResourceManager.armProviderNamespace(providerNamespace?: valueof string)
Target

Namespace

Parameters
Name Type Description
providerNamespace valueof string Provider namespace
Examples
@armProviderNamespace
namespace Microsoft.Contoso;
@armProviderNamespace("Microsoft.Contoso")
namespace Microsoft.ContosoService;

@armProviderNameValue

@armResourceType sets the value fo the decorated string property to the type of the Azure Resource Manager resource.

@Azure.ResourceManager.armProviderNameValue
Target

Operation

Parameters

None

@armResourceAction

@Azure.ResourceManager.armResourceAction(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceCheckExistence

Marks the operation as being a check existence (HEAD) operation

@Azure.ResourceManager.armResourceCheckExistence(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceCollectionAction

Marks the operation as being a collection action

@Azure.ResourceManager.armResourceCollectionAction
Target

Operation

Parameters

None

@armResourceCreateOrUpdate

@Azure.ResourceManager.armResourceCreateOrUpdate(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceDelete

@Azure.ResourceManager.armResourceDelete(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceList

@Azure.ResourceManager.armResourceList(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceOperations

This decorator is used to identify interfaces containing resource operations. By default, it marks the interface with the @autoRoute decorator so that all of its contained operations will have their routes generated automatically.

The decorator also adds a @tag decorator bearing the name of the interface so that all of the operations will be grouped based on the interface name in generated clients.

The optional resourceOperationOptions parameter provides additional options. allowStaticRoutes turns off autoRout for the interface, so individual operations can choose static (@route) or automatic (@autoRoute) routing.

resourceType: Model specifies the resource type for the operations in the interface

omitTags: true: turns off the default tagging of operations in the interface, so that individual operations must be individually tagged

@Azure.ResourceManager.armResourceOperations(resourceOperationOptions?: unknown | valueof Azure.ResourceManager.ResourceOperationOptions)
Target

Interface

Parameters
Name Type Description
resourceOperationOptions unknown | valueof ResourceOperationOptions Options for routing the operations in the interface and associating them with a specific resource

@armResourceRead

@Azure.ResourceManager.armResourceRead(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armResourceUpdate

@Azure.ResourceManager.armResourceUpdate(resourceModel: Model, resourceName?: valueof string)
Target

Operation

Parameters
Name Type Description
resourceModel Model Resource model
resourceName valueof string Optional. The name of the resource. If not provided, the name of the resource model will be used.

@armVirtualResource

This decorator is used on Azure Resource Manager resources that are not based on Azure.ResourceManager common types.

@Azure.ResourceManager.armVirtualResource(provider?: valueof string)
Target

Model

Parameters
Name Type Description
provider valueof string Optional. The resource provider namespace for the virtual resource.

@extensionResource

@extensionResource marks an Azure Resource Manager resource model as an Extension resource. Extension resource extends other resource types. URL path is appended to another segment {scope} which refers to another Resource URL.

{resourceUri}/providers/Microsoft.Contoso/accessPermissions

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.extensionResource
Target

Model

Parameters

None

@identifiers

This decorator is used to indicate the identifying properties of objects in the array, e.g. size The properties that are used as identifiers for the object needs to be provided as a list of strings.

@Azure.ResourceManager.identifiers(properties: valueof string[])
Target

ModelProperty | unknown[]

Parameters
Name Type Description
properties valueof string[] The list of properties that are used as identifiers for the object. This needs to be provided as a list of strings.
Examples
model Pet {
  @identifiers(#["size"])
  dog: Dog;
}

@locationResource

@locationResource marks an Azure Resource Manager resource model as a location based resource.

Deprecated: This decorator is deprecated. Use @parentResource with ArmLocationResource instead. See the Location Resource sample for the recommended approach.

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.locationResource
Target

Model

Parameters

None

@resourceBaseType

This decorator sets the base type of the given resource.

@Azure.ResourceManager.resourceBaseType(baseTypeIt: "Tenant" | "Subscription" | "ResourceGroup" | "Location" | "Extension")
Target

Model

Parameters
Name Type Description
baseTypeIt "Tenant" | "Subscription" | "ResourceGroup" | "Location" | "Extension" The built-in parent of the resource, this can be "Tenant", "Subscription", "ResourceGroup", "Location", or "Extension"

@resourceGroupResource

@resourceGroupResource marks an Azure Resource Manager resource model as a resource group level resource. This is the default option for Azure Resource Manager resources. It is provided for symmetry and clarity, and you typically do not need to specify it.

/subscription/{id}/resourcegroups/{rg}/providers/Microsoft.Contoso/employees

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.resourceGroupResource
Target

Model

Parameters

None

@singleton

@singleton marks an Azure Resource Manager resource model as a singleton resource.

Singleton resources only have a single instance with a fixed key name. .../providers/Microsoft.Contoso/monthlyReports/default

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.singleton(keyValue?: valueof string | "default")
Target

Model

Parameters
Name Type Description
keyValue valueof string | "default" The name of the singleton resource. Default name is "default".

@subscriptionResource

@subscriptionResource marks an Azure Resource Manager resource model as a subscription resource.

Subscription resources have REST API paths like: /subscription/{id}/providers/Microsoft.Contoso/employees

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.subscriptionResource
Target

Model

Parameters

None

@tenantResource

@tenantResource marks an Azure Resource Manager resource model as a Tenant resource/Root resource/Top-Level resource.

Tenant resources have REST API paths like: /provider/Microsoft.Contoso/FooResources

See more details on different Azure Resource Manager resource type here.

@Azure.ResourceManager.tenantResource
Target

Model

Parameters

None

@useLibraryNamespace

Declare the Azure Resource Manager library namespaces used in this provider. This allows sharing Azure Resource Manager resource types across specifications

@Azure.ResourceManager.useLibraryNamespace(...namespaces: Namespace[])
Target

Namespace

Parameters
Name Type Description
namespaces Namespace[] The namespaces of Azure Resource Manager libraries used in this provider

Azure.ResourceManager.Legacy

@armExternalType

Signifies that a Resource is represented using a library type in generated SDKs.

@Azure.ResourceManager.Legacy.armExternalType
Target

The model to that is an external resource Model

Parameters

None

@armOperationRoute

Signifies that an operation is an Azure Resource Manager operation and optionally associates the operation with a route template.

@Azure.ResourceManager.Legacy.armOperationRoute(route?: valueof Azure.ResourceManager.Legacy.ArmOperationOptions)
Target

The operation to associate the model with Operation

Parameters
Name Type Description
route valueof ArmOperationOptions Optional route to associate with the operation

@customAzureResource

This decorator is used on resources that do not satisfy the definition of a resource but need to be identified as such.

@Azure.ResourceManager.Legacy.customAzureResource(options?: valueof Azure.ResourceManager.Legacy.CustomResourceOptions)
Target

Model

Parameters
Name Type Description
options valueof CustomResourceOptions Options for customizing the behavior of the resource

@externalTypeRef

Specify an external reference that should be used when emitting this type.

@Azure.ResourceManager.Legacy.externalTypeRef(jsonRef: valueof string)
Target

Model | ModelProperty

Parameters
Name Type Description
jsonRef valueof string External reference(e.g. "../../common.json#/definitions/Foo")

@feature

Decorator to associate a feature with a model, interface, or namespace

@Azure.ResourceManager.Legacy.feature(featureName: EnumMember)
Target

The target to associate the feature with Model | Operation | Interface | Namespace

Parameters
Name Type Description
featureName EnumMember The feature to associate with the target

@featureOptions

Decorator to define options for a specific feature

@Azure.ResourceManager.Legacy.featureOptions(options: valueof Azure.ResourceManager.Legacy.ArmFeatureOptions)
Target

The enum member that represents the feature EnumMember

Parameters
Name Type Description
options valueof ArmFeatureOptions The options for the feature

@features

Decorator to define a set of features

@Azure.ResourceManager.Legacy.features(features: Enum)
Target

The service namespace Namespace

Parameters
Name Type Description
features Enum The enum that contains the features

@renamePathParameter

Renames a path parameter in an Azure Resource Manager operation.

@Azure.ResourceManager.Legacy.renamePathParameter(sourceParameterName: valueof string, targetParameterName: valueof string)
Target

The operation or interface to modify Operation

Parameters
Name Type Description
sourceParameterName valueof string The name of the parameter to rename
targetParameterName valueof string The new name for the parameter