Ansible azure_rm_deployment引用来自2个位置的参数

时间:2017-10-03 13:35:06

标签: json azure parameters ansible

我有一个Azure RM模板(@RequestMapping(value = "/update", method = RequestMethod.POST, produces = "application/json", consumes = "application/json") public void fetch(@Valid @RequestBody SampleVO sampleVO, BindingResult result) throws Exception { LOGGER.debug("Incoming VO "+sampleVO); LOGGER.debug("Result after Hibernate Validation "+String.valueOf(result.hasErrors())); if (result.hasErrors()) { for (ObjectError error : result.getAllErrors()) { LOGGER.error("Validation Error: {}", error.getDefaultMessage()); } throw new Exception(""Validation Error"); } } Sample VO: public class SampleVO { private Integer sampleId; private Long sampleType; @SafeHtml(whitelistType = WhiteListType.NONE) private String sampleTypeID; } WindowsVirtualMachine.json),我可以使用以下YML通过Ansible进行部署:

WindowsVirtualMachine.parameters.json

我试图找出是否可以引用2个参数位置;来自JSON的1和来自Ansible YML文件的另一个。如:

---
- name: Deploy Azure ARM template.
  hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - name: Create Azure Deploy
      azure_rm_deployment:
        state: present
        resource_group_name: AnsibleTest
        location: UK South
        template: "{{ lookup('file', 'WindowsVirtualMachine.json') }}"
        parameters: "{{ (lookup('file', 'WindowsVirtualMachine.parameters.json') | from_json).parameters }}"

我问的原因是询问是否可以将template: "{{ lookup('file', 'WindowsVirtualMachine.json') }}" parameters: "{{ (lookup('file', 'WindowsVirtualMachine.parameters.json') | from_json).parameters }}" adminPassword: value: "Password123" 值放在Ansible Vault中,而不是窥探。

我是编码的新手,可悲的是谷歌并没有带给我任何快乐。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

  1. 将密码保存到受Ansible Vault保护的变量中,例如adminPassword_defined_in_vault

  2. 将参数文件转换为模板,即将其重命名为WindowsVirtualMachine.parameters.json.j2

  3. 修改上述模板,因此它包含:

    "adminPassword": {
        "value": "{{ adminPassword_defined_in_vault }}"
    },
    
  4. 在Playbook中使用template查找插件而不是file

    parameters: "{{ (lookup('template', 'WindowsVirtualMachine.parameters.json.j2')).parameters }}"
    

答案 1 :(得分:0)

我怀疑可以直接完成,但你可以将文件读入变量并直接在变量中修改其内容并将其传递给部署。检查Techraf的正确答案;)

令人难过的是,还有其他方法可以实现类似于您所要求的内容,例如Azure Key Vault或使用部署"常量" (在这种情况下可能不起作用,但谁知道)或者您可以动态生成密码,这样您就不必担心保护密码。