我有存储在项目存储库中的配置文件的模板。我想做的是在从存储库克隆项目之后,使用Ansible的模板模块在远程服务器上使用该模板创建配置文件。
查看template模块的文档,似乎src
属性仅支持本地文件。
我想避免使用我的Ansible playbook存储配置模板,因为我更有意义的是将这些项目特定模板保存在项目存储库中。
我可以使用模板模块的替代方案吗?
答案 0 :(得分:21)
如果您的模板将在远程主机上,那么您有两个选择。
首先,您可以使用与fetch模块完全相反的copy模块,在克隆远程主机上的存储库后将模板恢复。
这个剧本看起来像是:
- name : clone repo on remote hosts
git :
repo : {{ git_repo_src }}
dest : {{ git_repo_dest }}
- name : fetch template from single remote host
run_once : true
fetch :
src : {{ template_path }}/{{ template_file }}
dest : /tmp/{{ template_file }}
flat : yes
fail_on_missing : yes
- name : template remote hosts
template :
src : /tmp/{{ template_file }}
dest : {{ templated_file_dest }}
owner : {{ templated_file_owner }}
group : {{ templated_file_group }}
mode : {{ templated_file_mode }}
获取任务使用run_once
来确保它只会困扰从其运行的第一个主机复制模板。假设您游戏中的所有这些主机都获得相同的回购,那么这应该没问题,但如果您需要确保从特定主机复制它,那么您可以将它与delegate_to
结合使用。
或者你可以让Ansible在本地克隆repo并直接使用它:
- name : clone repo on remote hosts
git :
repo : {{ git_repo_src }}
dest : {{ git_repo_dest }}
- name : clone repo on Ansible host
hosts : localhost
connection : local
git :
repo : {{ git_repo_src }}
dest : {{ git_repo_local_dest }}
- name : template remote hosts
template :
src : {{ template_local_src }}
dest : {{ templated_file_dest }}
owner : {{ templated_file_owner }}
group : {{ templated_file_group }}
mode : {{ templated_file_mode }}