Ansible:如何在`azure_rm_deployment`模块中使用Azure RM模板?

时间:2016-10-16 08:53:37

标签: azure ansible

我有一个以下列方式构建的虚拟机ARM模板: refernce

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
  "contentVersion": "1.0.0.0",
  "parameters": {  },
  "variables": {  },
  "resources": [  ],
  "outputs": {  }
}

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" }
  }
}

我可以在PowerShell中使用此模板成功部署计算机:

New-AzureRmResourceGroupDeployment -ResourceGroupName $rgName -TemplateFile VirtualMachineTemplate.json -TemplateParameterFile Parameters.json

但是,如果我在以下任务中尝试对Ansible azure_rm_deployment模块使用相同的模板:

- 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') }}"

我收到错误:

  

致命:[localhost]:失败! => {“已更改”:false,“failed”:true,“failed_deployment_operations”:[],“msg”:“部署失败,状态码为400,消息:请求内容无效且无法反序列化:'转换值时出错\“https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json \”键入'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Data.Definitions.DeploymentParameterDefinition'.Path'aperties.parameters。$ schema',第1行,第142位。'。“}

错误是由parameters.json引起的。如果我直接在任务中定义参数:

- 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

部署机器。

我在这里失去了。 Ansible模块的模板是否需要修改?

注意:

  • 同时我可以使用azure_rm_storageaccountazure_rm_virtualmachine等模块配置资源和虚拟机,所以我猜这不是库问题;至少不是Microsoft Azure SDK for Python,每个要求是2.0.0rc5。

  • 只是为了确保我也尝试使用template_linkparameters_link,错误消息是相同的。

1 个答案:

答案 0 :(得分:1)

我认为这是一个相当古老的问题,但我注意到参数文件中有自己的字段parameters,所以正确的调用应该是:

- 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 }}"