Beefcake
Beefcake

Reputation: 801

Microsoft.Compute/virtualMachines/extensions' has incorrect segment lengths

I'm unable to deploy this NESTED template because of an Custom Script Extension (CompDesc) that I've added to it. I am prompted with the following error when trying to deploy:

Error: Code=InvalidTemplate; Message=Deployment template validation failed: 'The template resource 'CompDesc' for type 'Microsoft.Compute/virtualMachines/extensions' at line '207' and column '6' has incorrect segment lengths. A nested resource type must have identical number of segments as its resource name. A root resource type must have segment length one greater than its resource name. Please see https://aka.ms/arm-template/#resources for usage details.'.

As you can see it already has a DSC extension which I have tested and deployed perfectly fine, but I also need to add this CSE for a small .ps1 script.

I have checked out: Azure website resource template error and Set ARM Template Web appSetting

I have tried:

I know it has something to do with the naming convention, but I'm unsure on how to fix it. Bear in mind, that this is a nested template. From what I read and understand from the error, nested templates must have identical segments as its resource name, which I've tried.

Please, any ideas?

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Password for the Virtual Machine."
      }
    },
    "adminUsername": {
      "type": "string",
      "minLength": 1,
      "metadata": {
        "description": "Username for the Virtual Machine."
      }
    },
    "computerDescription": {
      "type": "string",
      "metadata": {
        "description": "The description name of the VM."
      }
    },
    "nicName": {
      "type": "string",
      "metadata": {
        "description": "The name of the VM nic"
      }
    },
    "nodeConfigurationName": {
      "type": "string",
      "metadata": {
        "description": "The name of the node configuration, on the Azure Automation DSC pull server, that this node will be configured as"
      }
    },
    "projectTag": {
      "type": "string",
      "metadata": {
        "description": "name of the Project"
      }
    },
    "registrationKey": {
      "type": "securestring",
      "metadata": {
        "description": "Registration key to use to onboard to the Azure Automation DSC pull/reporting server"
      }
    },
    "registrationUrl": {
      "type": "string",
      "metadata": {
        "description": "The URL to register against the DSC automation server"
      }
    },
    "sasToken": {
      "type": "securestring",
      "metadata": {
        "description": "Generated SAS token to be used."
      }
    },
    "virtualNetworkName": {
      "type": "string",
      "metadata": {
        "description": "name of the vNet"
      }
    },
    "vmName": {
      "type": "string",
      "defaultValue": "myVM",
      "metadata": {
        "description": "The name of the VM resource"
      }
    },
    "windowsOSVersion": {
      "type": "string",
      "metadata": {
        "description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Allowed values: 2008-R2-SP1, 2012-Datacenter, 2012-R2-Datacenter."
      }
    }
  },
  "variables": {
    // Configuration for the VM
    "imagePublisher": "MicrosoftWindowsServer",
    "imageOffer": "WindowsServer",
    "vmSize": "Standard_A2",
    "vhdStorageAccountName": "[concat('vhdstorage', uniqueString(resourceGroup().id))]",
    "vhdStorageContainerName": "vhds",
    "vhdStorageType": "Standard_LRS",

    // Configuration for network
    "publicIPAddressName": "myPublicIP",
    "publicIPAddressType": "Dynamic",
    "subnetRef": "[concat(variables('vnetId'), '/subnets/', variables('subnetName'))]",
    "subnetName": "default",
    "vnetId": "[resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",


    // Configuration of the DSC
    "allowModuleOverwrite": false,
    "actionAfterReboot": "ContinueConfiguration",
    "configurationFunction": "UpdateLCMforAAPull.ps1\\ConfigureLCMforAAPull",
    "configurationMode": "ApplyAndAutoCorrect",
    "configurationModeFrequencyMins": 15,
    "modulesUrl": "[concat('REDACTED', parameters('sasToken'))]",
    "refreshFrequencyMins": 30,
    "rebootNodeIfNeeded": true,
    "timestamp": "MM/dd/yyyy H:mm:ss tt"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "[variables('vhdStorageAccountName')]",
      "apiVersion": "2016-01-01",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "StorageAccount"
      },
      "sku": {
        "name": "[variables('vhdStorageType')]"
      },
      "kind": "Storage"
    },
    {
      "apiVersion": "2016-03-30",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[variables('publicIPAddressName')]",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "PublicIPAddress"
      },
      "properties": {
        "publicIPAllocationMethod": "[variables('publicIPAddressType')]"
      }
    },
    {
      "apiVersion": "2016-03-30",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "[parameters('nicName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "subnet": {
                "id": "[variables('subnetRef')]"
              }
            }
          }
        ]
      }
    },
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",
      "tags": {
        "displayName": "[concat(parameters('vmName'), parameters('projectTag'))]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('vhdStorageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', parameters('nicName'))]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[variables('vmSize')]"
        },
        "osProfile": {
          "computerName": "[parameters('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "[variables('imagePublisher')]",
            "offer": "[variables('imageOffer')]",
            "sku": "[parameters('windowsOSVersion')]",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "FromImage"
          },
          "dataDisks": [
            {
              "diskSizeGB": 1023,
              "lun": 0,
              "createOption": "Empty"
            }
          ]
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('nicName'))]"
            }
          ]
        },
        "diagnosticsProfile": {
          "bootDiagnostics": {
            "enabled": true,
            "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('vhdStorageAccountName')), '2016-01-01').primaryEndpoints.blob]"
          }
        }
      }
    },
    {
      "name": "CompDesc",
      "type": "extensions",
      "location": "[resourceGroup().location]",
      "apiVersion": "2016-03-30",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines', parameters('vmName'))]"
      ],
      "tags": {
        "displayName": "CompDesc"
      },
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.4",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "[concat('REDACTED', parameters('sasToken'))]"
          ],
          "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File compdesc.ps1', ' ', '\"', parameters('computerDescription'), '\"')]"
        }
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "[concat(parameters('vmName'),'/Microsoft.Powershell.DSC')]",
      "apiVersion": "2015-06-15",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[resourceId('Microsoft.Compute/virtualMachines', parameters('vmName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.Powershell",
        "type": "DSC",
        "typeHandlerVersion": "2.19",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
          "Items": {
            "registrationKeyPrivate": "[parameters('registrationKey')]"
          }
        },
        "settings": {
          "ModulesUrl": "[variables('modulesUrl')]",
          "SasToken": "",
          "ConfigurationFunction": "[variables('configurationFunction')]",
          "Properties": [
            {
              "Name": "RegistrationKey",
              "Value": {
                "UserName": "PLACEHOLDER_DONOTUSE",
                "Password": "PrivateSettingsRef:registrationKeyPrivate"
              },
              "TypeName": "System.Management.Automation.PSCredential"
            },
            {
              "Name": "RegistrationUrl",
              "Value": "[parameters('registrationUrl')]",
              "TypeName": "System.String"
            },
            {
              "Name": "NodeConfigurationName",
              "Value": "[parameters('nodeConfigurationName')]",
              "TypeName": "System.String"
            },
            {
              "Name": "ConfigurationMode",
              "Value": "[variables('configurationMode')]",
              "TypeName": "System.String"
            },
            {
              "Name": "ConfigurationModeFrequencyMins",
              "Value": "[variables('configurationModeFrequencyMins')]",
              "TypeName": "System.Int32"
            },
            {
              "Name": "RefreshFrequencyMins",
              "Value": "[variables('refreshFrequencyMins')]",
              "TypeName": "System.Int32"
            },
            {
              "Name": "RebootNodeIfNeeded",
              "Value": "[variables('rebootNodeIfNeeded')]",
              "TypeName": "System.Boolean"
            },
            {
              "Name": "ActionAfterReboot",
              "Value": "[variables('actionAfterReboot')]",
              "TypeName": "System.String"
            },
            {
              "Name": "AllowModuleOverwrite",
              "Value": "[variables('allowModuleOverwrite')]",
              "TypeName": "System.Boolean"
            },
            {
              "Name": "Timestamp",
              "Value": "[variables('timestamp')]",
              "TypeName": "System.String"
            }
          ]
        }
      }
    }
  ]
}

Upvotes: 1

Views: 2071

Answers (1)

Beefcake
Beefcake

Reputation: 801

My god, an oversight by myself. I forgot to re-upload the nested template to blob storage once I made my changes. So dumb.

Anyway, for those that want to know; https://github.com/blumu/azure-content/blob/master/articles/resource-manager-common-deployment-errors.md

Upvotes: 0

Related Questions