Hope sull
Hope sull

Reputation: 11

How do I deploy this ARM template with Terraform? Please Advise

When I deploy this template via Terraform and Azure Devops, I get an Invalid template error while the template deploys normally on the portal. This is the error:

'The template resource '' of type 'microsoft.insights/workbooks' at line '1' and column '1512' is not valid. The name property cannot be null or empty. Please see https://aka.ms/arm-template/#resources for usage details.'." AdditionalInfo=[{"info":{"lineNumber":1,"linePosition":1512,"path":"properties.template.resources[0]"},"type":"TemplateViolation"}]

What modification should I make to deploy via Terraform?

{
    "contentVersion": "1.0.0.0",
    "parameters": {
      "workbookDisplayName": {
        "type": "string",
        "defaultValue": "Azure Firewall Workbook",
        "metadata": {
          "description": "The friendly name for the workbook that is used in the Gallery or Saved List.  This name must be unique within a resource group."
        }
      },
      "workbookType": {
        "type": "string",
        "allowedValues": [
            "workbook",
            "sentinel"
            
          ],
          "defaultValue": "workbook",
        "metadata": {
          "description": "The gallery that the workbook will been shown under. Supported values include workbook, tsg, etc. Usually, this is 'workbook'"
        }
      },
      "DiagnosticsWorkspaceName": {
        "type": "string",
        "defaultValue": "WorkspaceName",
        "metadata": {
          "description": "Provide the workspace name for your Network Diagnostic logs"
        }
      },
      "DiagnosticsWorkspaceSubscription": {
        "type": "string",
        "defaultValue": "WorkspaceSubscriptionID",
        "metadata": {
          "description": "Provide the workspace subscription GUID for your Network Diagnostic logs"
        }
      },
      "DiagnosticsWorkspaceResourceGroup": {
        "type": "string",
        "defaultValue": "ResourceGroupName",
        "metadata": {
          "description": "Provide the workspace resourcegroupname for your Network Diagnostic logs"
        }
      },
      "workbookId": {
        "type": "string",
        "defaultValue": "[newGuid()]",
        "metadata": {
          "description": "The unique guid for this workbook instance"
        }
      }
    },
    "variables": {
            "workbookSourceId": "[concat('/subscriptions/',parameters('DiagnosticsWorkspaceSubscription'),'/resourcegroups/', parameters('DiagnosticsWorkspaceResourceGroup'), '/providers/Microsoft.OperationalInsights/workspaces/',parameters('DiagnosticsWorkspaceName'))]"
  },
    "resources": [
      {
        "name": "[parameters('workbookId')]",
        "type": "microsoft.insights/workbooks",
        "location": "[resourceGroup().location]",
        "apiVersion": "2018-06-17-preview",
        "dependsOn": [],
        "kind": "shared",
        "properties": {
          "displayName": "[parameters('workbookDisplayName')]"}",
          "version": "1.0",
          "sourceId": "[variables('workbookSourceId')]",
          "category": "[parameters('workbookType')]"
        }
      }
    ],
    "outputs": {
      "workbookId": {
        "type": "string",
        "value": "[resourceId( 'microsoft.insights/workbooks', parameters('workbookId'))]"
      }
    },
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#"
  }

Upvotes: 0

Views: 990

Answers (1)

nurisezgin
nurisezgin

Reputation: 1570

I don't know ARM templates but I have really good experience on Terraform AWS & Terraform Azure providers.

First of all, you better take a look Terraform resource page which is here. That would be helpful in understanding resource needs and outcomes.

I might be wrong, because your Terraform script is not visible in the question section. Nevertheless, I guess you might have an issue in Terraform side. As I understood, you are getting error from ARM templates. It is complaining about missing name parameter which is mandatory. You may forget passing parameter names from Terraform to ARM template. I might be wrong, this is just a suggestion, the correct way would be reviewing Terraform azurerm_template_deployment resource.

// ARM Template part
{
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "storageAccountType": {
          "type": "string",
          "defaultValue": "Standard_LRS",
          "allowedValues": [
            "Standard_LRS",
            "Standard_GRS",
            "Standard_ZRS"
          ],
          "metadata": {
            "description": "Storage Account type"
          }
        }
      },
// Terraform resource provisioning
      parameters = {
        "storageAccountType" = "Standard_GRS"
      }

Upvotes: 1

Related Questions