我有很多文件(Nginx配置)可以用作模板,但是我想使用rysnc / synchronize模块移动它们。
有没有办法做到这一点?
现在我这样做
^(?!.{16})(?=.*?\S{3})(?:[A-Za-z][a-z]* ?\b){1,3}$
模板引擎与移动/复制操作结合在一起,因此,我无法使用它来应用模板并将其保留在源代码中,然后使用rsync对其进行移动。
修改:
重述此内容的另一种方法是:
是否可以应用模板,并将应用的输出保留在源计算机本身中?
答案 0 :(得分:4)
没有一项任务。但是,下面的剧本存根实现了您所希望的:
---
- hosts: localhost
gather_facts: no
tasks:
- name: "1. Create temporary directory"
tempfile:
state: directory
register: temp_file_path
- name: "2. Template source files to temp directory"
template:
src: "{{ item }}"
dest: "{{ temp_file_path.path }}/{{ item | basename | regex_replace('.j2$', '') }}"
loop: "{{ query('fileglob', 'source/*.j2') }}"
delegate_to: localhost
- name: "3. Sync these to the destination"
synchronize:
src: "{{ temp_file_path.path }}/"
dest: "dest"
delete: yes
- name: "4. Delete the temporary directory (optional)"
file:
path: "{{ temp_file_path.path }}"
state: absent
为了进行测试,将这本剧本写到目标localhost并使用本地方法进行连接,我将其开发为仅查找./source/*.j2中的所有.j2文件,然后将创建的文件rsync到./dest/我的工作站。我使用ansible-playbook -i localhost, playbook_name.yml --connection=local
任务1.我们将首先将源文件模板输出到本地主机(使用模板任务上的delegate_to: localhost
选项)。您可以创建一个特定的目录来执行此操作,也可以使用Ansible的tempfile模块在(通常)/ tmp下的某个位置创建一个目录。
任务2。使用模板模块转换在“ ./source/”中找到的jinja模板(任意文件名以.j2结尾),以输出写入上述任务1中创建的目录的文件。
任务3.使用同步模块将它们重新同步到目标服务器(用于测试我在同一盒子上使用./dest)。
任务4.删除上面任务1中创建的临时目录。