Arm Library
Sample configuration for arm-library in resource-manager.
import "@typespec/http";import "@typespec/rest";import "@typespec/versioning";import "@azure-tools/typespec-azure-core";import "@azure-tools/typespec-azure-resource-manager";import "./ref-library/int-templates.tsp";import "./ref-library/op-templates.tsp";
using Http;using Rest;using Versioning;using Azure.ResourceManager;
@service(#{ title: "Microsoft.EnvelopeTest" })@useLibraryNamespace(Microsoft.InterfacesTest, Microsoft.OperationsTest)@armProviderNamespace@versioned(Versions)namespace Microsoft.LibraryTest;
/** ARM Library API versions */enum Versions { /** 2021-09-21-preview version */ @armCommonTypesVersion(Azure.ResourceManager.CommonTypes.Versions.v5) `2021-09-21-preview`,}
interface Operations extends Azure.ResourceManager.Operations {}
model AllPropertiesResource is TrackedResource<AllPropertiesProperties> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the all properties resource.") @key("allPropertiesName") @segment("allProperties") @path name: string;
...EntityTagProperty; ...ManagedByProperty; ...ResourceKindProperty; ...ResourcePlanProperty; ...ResourceSkuProperty; ...ManagedServiceIdentityProperty;}
@armResourceOperationsinterface AllProperties extends TrackedResourceOperations<AllPropertiesResource, AllPropertiesProperties> {}
@doc("rp-specific properties for the resource with all envelope properties")model AllPropertiesProperties { @doc("The status of the last operation performed on this resource.") @visibility(Lifecycle.Read) provisioningState?: SystemEnvelopeProvisioningState;
@doc("Name of the resource") displayName?: string = "default";}
@Azure.Core.lroStatus@doc("Envelope provisioning state")union SystemEnvelopeProvisioningState { string, ResourceProvisioningState,
@doc("Working") Working: "Working",}
@armResourceOperationsinterface TrackedOperations extends Microsoft.InterfacesTest.TrackedOperations {}
@armResourceOperationsinterface TrackedChildOperations extends Microsoft.InterfacesTest.TrackedChildOperations {}
@armResourceOperationsinterface TenantOperations extends Microsoft.InterfacesTest.TenantOperations {}
@armResourceOperationsinterface ExtensionOperations extends Microsoft.InterfacesTest.ExtensionOperations {}
@armResourceOperationsinterface Tracked2Operations extends Microsoft.OperationsTest.Tracked2Operations {}import "@typespec/http";import "@typespec/rest";import "@typespec/versioning";import "@azure-tools/typespec-azure-core";import "@azure-tools/typespec-azure-resource-manager";
using Http;using Rest;using Versioning;using Azure.ResourceManager;
#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "cuz"@useDependency(Azure.ResourceManager.CommonTypes.Versions.v3)@armLibraryNamespacenamespace Microsoft.InterfacesTest;
// Tracked resources
/** * A Test Tracked Resource */model TestTrackedResource is TrackedResource<TestTrackedProperties> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the Tracked resource.") @key("trackedResourceName") @segment("trackedResources") @visibility(Lifecycle.Read) @path name: string;}
/** * The operations for a Test Tracked Resource */@armResourceOperations(TestTrackedResource)interface TrackedOperations extends TrackedResourceOperations<TestTrackedResource, TestTrackedProperties> {}
@doc("rp-specific properties for the resource with all envelope properties")model TestTrackedProperties { @doc("The status of the last operation performed on this resource.") @visibility(Lifecycle.Read) provisioningState?: ResourceProvisioningState;
@visibility(Lifecycle.Create, Lifecycle.Read) @doc("Name of the resource") displayName?: string = "default";}
@parentResource(TestTrackedResource)model TestTrackedChild is ProxyResource<TrackedChildProperties> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the Tracked child.") @key("childName") @segment("children") @path name: string;}
@doc("A child of a tracked resource")model TrackedChildProperties { @doc("The flavor of the tracked child") flavor: string;
...DefaultProvisioningStateProperty;}
@doc("Operations for the tracked child")@armResourceOperations(TestTrackedChild)interface TrackedChildOperations extends ProxyResourceOperations<TestTrackedChild> {}
// Tenant resources
@tenantResourcemodel TestTenantResource is ProxyResource<TestTenantProperties> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the tenant resource.") @key("tenantResourceName") @segment("tenantResources") @path name: string;}
@armResourceOperations(TestTenantResource)interface TenantOperations extends ProxyResourceOperations<TestTenantResource>, ResourceUpdate<TestTenantResource, TestTenantProperties> {}
@doc("rp-specific properties for the resource")model TestTenantProperties { @doc("The status of the last operation performed on this resource.") @visibility(Lifecycle.Read) provisioningState?: ResourceProvisioningState;
@doc("Name of the resource") displayName?: string = "default";}
// Extension resources
model TestExtensionResource is ExtensionResource<TestExtensionProperties> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the extension resource.") @key("extensionResourceName") @segment("extensionResources") @path name: string;}
@armResourceOperations(TestExtensionResource)interface ExtensionOperations extends ProxyResourceOperations<TestExtensionResource>, ResourceUpdate<TestExtensionResource, TestExtensionProperties> {}
@doc("rp-specific properties for the resource")model TestExtensionProperties { @doc("The status of the last operation performed on this resource.") @visibility(Lifecycle.Read) provisioningState?: ResourceProvisioningState;
@doc("Name of the resource") displayName?: string = "default";}import "@typespec/http";import "@typespec/rest";import "@typespec/versioning";import "@azure-tools/typespec-azure-core";import "@azure-tools/typespec-azure-resource-manager";
using Http;using Rest;using Versioning;using Azure.ResourceManager;
#suppress "@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint" "cuz"@useDependency(Azure.ResourceManager.CommonTypes.Versions.v3)@armLibraryNamespacenamespace Microsoft.OperationsTest;
// Tracked resourcesmodel TestTrackedResource2 is TrackedResource<TestTrackedProperties2> { @pattern("^[a-zA-Z0-9-]{3,24}$") @doc("The name of the Tracked resource.") @key("trackedResourceName") @segment("trackedResource2s") @path name: string;}
@armResourceOperations(TestTrackedResource2)interface Tracked2Operations { get is ArmResourceRead<TestTrackedResource2>; create is ArmResourceCreateOrReplaceSync<TestTrackedResource2>; update is ArmCustomPatchSync< TestTrackedResource2, Azure.ResourceManager.Foundations.ResourceUpdateModel< TestTrackedResource2, TestTrackedProperties2 > >; delete is ArmResourceDeleteSync<TestTrackedResource2>; listByResourceGroup is ArmResourceListByParent<TestTrackedResource2>; listBySubscription is ArmListBySubscription<TestTrackedResource2>;}
@doc("rp-specific properties for the resource with all envelope properties")model TestTrackedProperties2 { @doc("The status of the last operation performed on this resource.") @visibility(Lifecycle.Read) provisioningState?: ResourceProvisioningState;
@doc("Name of the resource") displayName?: string = "default";}