Ansible: How to use an Azure RM template in `azure_rm_deployment` module?
ansible, azure
Solution
I see this is rather old question, but I note that there's own field `parameters` in the parameters file, so the right call should be:
- name: Ensure the VM is deployed to Azure
azure_rm_deployment:
state: present
resource_group_name: "{{ resource_group_name }}"
template: "{{ lookup('file', 'VirtualMachineTemplate.json') }}"
parameters: "{{ (lookup('file', 'Parameters.json') | from_json).parameters }}"
Problem
I have a virtual machine ARM template built in the following way: refernce ``` { "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { }, "variables": { }, "resources": [ ], "outputs": { } } ``` with `parameters.json`: ``` { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "adminUserName": { "value": "mytestacct1" }, "adminPassword": { "value": "mytestpass1" } } } ``` I can successfully deploy the machine using this template in PowerShell: ``` New-AzureRmResourceGroupDeployment -ResourceGroupName $rgName -TemplateFile VirtualMachineTemplate.json -TemplateParameterFile Parameters.json ``` However, if I try to use the same template for Ansible `azure_rm_deployment` module in the following task: ``` - name: Ensure the VM is deployed to Azure azure_rm_deployment: state: present resource_group_name: "{{ resource_group_name }}" template: "{{ lookup('file', 'VirtualMachineTemplate.json') }}" parameters: "{{ lookup('file', 'Parameters.json') }}" ``` I get an error: fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "failed_deployment_operations": [], "msg": "Deployment failed with status code: 400 and message: The request content was invalid and could not be deserialized: 'Error converting value \"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json\" to type 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Data.Definitions.DeploymentParameterDefinition'. Path 'properties.parameters.$schema', line 1, position 142.'."} The error is caused by `parameters.json`. If I define the parameters directly in the task: ``` - name: Ensure the VM is deployed to Azure azure_rm_deployment: state: present resource_group_name: "{{ resource_group_name }}" template: "{{ lookup('file', 'VirtualMachineTemplate.json') }}" parameters: adminUserName: value: mytestacct1 adminPassword: value: mytestpass1 ``` It deploys the machine. I'm at loss here. Is there a modification required to the template for the Ansible module? Notes: At the same time I can provision resources and VMs using `azure_rm_storageaccount`, `azure_rm_virtualmachine`, etc. modules, so I guess it's not a library problem; at least not the Microsoft Azure SDK for Python, which is 2.0.0rc5 per requirements. Just to make sure I also tried with `template_link` and `parameters_link` and the error message is the same.