Berthier Lemieux
Berthier Lemieux

Reputation: 4115

JSON objects as ARM template function argument

Does the ARM template offers a way to define a JSON object inline, as a template function parameter?

Something that could look like this, where I am mixing references, Azure template functions and JSON object.

"value": "[concat(reference('ArrayMaker').outputs.fooBarArray.value], 
          [{ "cat": "Tom", "mouse" : "Jerry"}, { "cat":"Garfield", "mouse":"[reference('MouseTrap').outputs.mouseTrap.value]"} ] )]"

Using variables would seem to be a natural fit for this, but since the value is constructed from a reference, variables can't be used.

Upvotes: 0

Views: 1505

Answers (1)

4c74356b41
4c74356b41

Reputation: 72191

well, not natively. you can hack around with nested deployments, something like this:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "garfiled": {
            "type": "string"
        },
        "catData": {
            "type": "object",
            "defaultValue": {
                "cat": "Tom"
            }
        }
    },
    "variables": {
        "cat": { <<< if you can\need to construct whole variable in the nested template
            "cat": "Garfield",
            "mouse": "[parameters('garfiled')]"
        },
        "t&j": { <<< if you need to pass in part of the variable to the nested template, you can also create another variable to create an object of a proper structure to union with existing object
            "mouse": "Jerry"
        }
    },
    "resources": [],
    "outputs": {
        "garfiled": {
            "type": "object",
            "value": "[variables('cat')]"
        },
        "t&j": {
            "type": "object",
            "value": "[union(variables('t&j'), parameters('catData'))]"
        }
    }
}

You would then use nested template to pass reference to this template and output the result.

Upvotes: 2

Related Questions