azureazure-resource-managerazure-rm-templatecountry-codesiso-3166

How to convert country names to ISO 3166-1 alpha-2 values in arm template


I have an ARM-template and I would like convert country name like "United States" and I would like to get the ISO 3166-1 alpha 2 code like "US". This converted value I would use for name of resource group. I tryed use condicion "if", but this options i can use in case when Parametr "CountryString" contains only two country. I am not able to find solutions for parameter "CountryObject" which contains more than two country. Is there a way to do this?

{
"$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
        "CountryString": {
        "type": "string",
        "metadata": { "Description": "Select a country from the list." },
        "defaultValue": "United States",
        "allowedValues": [ "United States", "Germany"]
    },
    "CountryObject": {
        "type": "object",
        "defaultValue": {
            "United States": "US",
            "Germany": "DE",
            "United Kingdom": "GB"
        }
    }
},
"variables": {
     "OutputString": {
        "type": "string",
        "value": "[if(equals('United States', parameters('CountryString')), 'US','DE')]"
    },
      "Outputobject": {
        "type": "string",
        "value": "[if(equals('United States', parameters('CountryObject')), 'US','DE')]"
    },
     "rgName": "[concat('rg-',variables('Outputobject').value, '-rgname')]"
},

   "resources": [
    {
        "type": "Microsoft.Resources/resourceGroups",
        "apiVersion": "2019-08-01",
        "location": "East Asia",
        "name": "[variables('rgName')]",
        "properties": {}
    }],
"outputs": {
    "OutputString": {
        "type": "string",
        "value": "[variables('OutputString').value]"
    },
        "Outputobject": {
        "type": "string",
        "value": "[variables('Outputobject').value]"
    }
}}

Deploy to azure

Template here


Solution

  • Instead of using the if statement, treat the CountryObject like a hashtable.

          "value": "[parameters('CountryObject')[parameters('CountryString')]]"
    
    

    The whole thing.

    {
      "$schema": "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#",
      "contentVersion": "1.0.0.1",
      "parameters": {
        "CountryString": {
          "type": "string",
          "metadata": { "Description": "Select a country from the list." },
          "defaultValue": "United States",
          "allowedValues": [ "United States", "Germany" ]
        },
        "CountryObject": {
          "type": "object",
          "defaultValue": {
            "United States": "US",
            "Germany": "DE",
            "United Kingdom": "GB"
          }
        }
      },
      "variables": {
        "OutputString": {
          "type": "string",
          "value": "[parameters('CountryObject')[parameters('CountryString')]]"
        }  },
    
      "resources": [],
      "outputs": {
        "OutputString": {
          "type": "string",
          "value": "[variables('OutputString').value]"
        }
      }
    }