Ansible:将variables设置为文件内容

我正在使用ec2模块与ansible-playbook我想设置一个variables的文件的内容。 以下是我目前正在做的事情。

  1. Var与文件名
  2. shell任务来cat该文件
  3. 使用cat的结果传递给ec2模块。

我的剧本的例子内容。

 vars: amazon_linux_ami: "ami-fb8e9292" user_data_file: "base-ami-userdata.sh" tasks: - name: user_data_contents shell: cat {{ user_data_file }} register: user_data_action - name: launch ec2-instance local_action: ... user_data: "{{ user_data_action.stdout }}" 

我认为有一个更简单的方法来做到这一点,但我找不到它searchAnsible文档。

您可以在Ansible中使用查找来获取文件的内容,例如

 user_data: "{{ lookup('file', user_data_file) }}" 

以下是文档中的一个完整示例 :

 - hosts: all vars: contents: "{{ lookup('file', '/etc/foo.txt') }}" tasks: - debug: msg="the value of foo.txt is {{ contents }}" 

您可以使用获取模块将文件从远程主机复制到本地, 查找模块读取获取文件的内容。

查找只适用于本地主机。 如果要从远程使用include_vars的variables文件中检索variables: {{ varfile }}{{ varfile }}应该是{"key":"value"}forms的字典,如果在冒号后面包含空格,会发现ansible会给您带来麻烦。