arazzo: 1.0.1 info: title: Microsoft Azure Deploy Template to a New Resource Group summary: Create a resource group, start an ARM template deployment, and poll until it succeeds. description: >- The canonical Azure Resource Manager provisioning flow. The workflow creates (or updates) a resource group in the target subscription, starts a template deployment at resource group scope, and then polls the deployment until its provisioning state reaches a terminal value. It branches on the reported provisioning state so a Succeeded deployment ends cleanly while a Failed or Canceled deployment short-circuits. Every step spells out its request inline so the flow can be read and executed without opening the underlying OpenAPI description. version: 1.0.0 sourceDescriptions: - name: azureResourceManager url: ../openapi/azure-resource-manager-openapi.yml type: openapi workflows: - workflowId: deploy-template-to-resource-group summary: Provision a resource group and deploy an ARM template into it, polling to completion. description: >- Creates the resource group, submits a template deployment, then repeatedly gets the deployment until provisioningState is terminal, branching on the result. inputs: type: object required: - accessToken - subscriptionId - resourceGroupName - location - deploymentName - template properties: accessToken: type: string description: An Azure Resource Manager OAuth2 bearer access token. subscriptionId: type: string description: The ID of the target subscription. resourceGroupName: type: string description: The name of the resource group to create and deploy into. location: type: string description: The Azure region for the resource group (e.g. eastus). deploymentName: type: string description: The name of the deployment. template: type: object description: The inline ARM template content to deploy. parameters: type: object description: Name/value pairs that define the deployment parameters. apiVersion: type: string description: The Azure Resource Manager API version. default: '2024-03-01' steps: - stepId: createResourceGroup description: >- Create or update the target resource group in the chosen location so the deployment has a scope to land in. operationId: ResourceGroups_CreateOrUpdate parameters: - name: Authorization in: header value: Bearer $inputs.accessToken - name: subscriptionId in: path value: $inputs.subscriptionId - name: resourceGroupName in: path value: $inputs.resourceGroupName - name: api-version in: query value: $inputs.apiVersion requestBody: contentType: application/json payload: location: $inputs.location successCriteria: - condition: $statusCode == 200 outputs: resourceGroupId: $response.body#/id resourceGroupName: $response.body#/name - stepId: startDeployment description: >- Start an incremental template deployment at resource group scope using the supplied inline template and parameters. operationId: Deployments_CreateOrUpdate parameters: - name: Authorization in: header value: Bearer $inputs.accessToken - name: subscriptionId in: path value: $inputs.subscriptionId - name: resourceGroupName in: path value: $inputs.resourceGroupName - name: deploymentName in: path value: $inputs.deploymentName - name: api-version in: query value: $inputs.apiVersion requestBody: contentType: application/json payload: properties: template: $inputs.template parameters: $inputs.parameters mode: Incremental successCriteria: - condition: $statusCode == 201 outputs: deploymentId: $response.body#/id provisioningState: $response.body#/properties/provisioningState - stepId: pollDeployment description: >- Get the deployment and inspect its provisioning state. The step branches to completion when the state is Succeeded and to failure when it is Failed or Canceled; any other (in-progress) state loops back to poll again. operationId: Deployments_Get parameters: - name: Authorization in: header value: Bearer $inputs.accessToken - name: subscriptionId in: path value: $inputs.subscriptionId - name: resourceGroupName in: path value: $inputs.resourceGroupName - name: deploymentName in: path value: $inputs.deploymentName - name: api-version in: query value: $inputs.apiVersion successCriteria: - condition: $statusCode == 200 outputs: provisioningState: $response.body#/properties/provisioningState outputsBag: $response.body#/properties/outputs onSuccess: - name: deploymentSucceeded type: end criteria: - context: $response.body condition: $.properties.provisioningState == "Succeeded" type: jsonpath - name: deploymentFailed type: end criteria: - context: $response.body condition: $.properties.provisioningState == "Failed" || $.properties.provisioningState == "Canceled" type: jsonpath - name: keepPolling type: goto stepId: pollDeployment criteria: - context: $response.body condition: $.properties.provisioningState != "Succeeded" && $.properties.provisioningState != "Failed" && $.properties.provisioningState != "Canceled" type: jsonpath outputs: resourceGroupId: $steps.createResourceGroup.outputs.resourceGroupId deploymentId: $steps.startDeployment.outputs.deploymentId finalProvisioningState: $steps.pollDeployment.outputs.provisioningState deploymentOutputs: $steps.pollDeployment.outputs.outputsBag