我正在使用带有ansible-playbook
的ec2模块我想将变量设置为文件的内容。这是我目前正在做的事情。
cat
文件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 }}"
我认为有一种更简单的方法可以做到这一点,但在搜索Ansible文档时我找不到它。
答案 0 :(得分:74)
您可以在Ansible中使用lookups来获取文件的内容,例如
user_data: "{{ lookup('file', user_data_file) }}"
警告:此查找适用于本地文件,而不是远程文件。
这是complete example from the docs:
- hosts: all
vars:
contents: "{{ lookup('file', '/etc/foo.txt') }}"
tasks:
- debug: msg="the value of foo.txt is {{ contents }}"
答案 1 :(得分:8)
您可以使用slurp模块:(感谢@mlissner提出建议)
vars:
amazon_linux_ami: "ami-fb8e9292"
user_data_file: "base-ami-userdata.sh"
tasks:
- name: Load data
slurp:
src: "{{ user_data_file }}"
register: slurped_user_data
- name: Decode data and store as fact # You can skip this if you want to use the right hand side directly...
set_fact:
user_data: "{{ slurped_user_data.content | b64decode }}"
答案 2 :(得分:6)
您可以使用fetch module将文件从远程主机复制到本地,并使用lookup module来读取已获取文件的内容。