在Ansible角色目录中,文件和模板都是作为角色的一部分来存储的。它们都可以被用来创建和配置目标主机的文件、服务以及其他设置。它们的主要区别在于它们如何处理变量。
文件是包含静态配置的纯文本文件。当Ansible在目标主机上复制文件时,其中不包含任何变量的其余部分安装,并复制到目标主机上。
模板是包含动态配置的文件。 它们使用Jinja2语法来插入变量和表达式。 在Ansible在目标主机上复制模板时,Jinja2将处理模板,并将变量及其计算结果插入其中。这样,最终的文件包含了在运行时计算的值。
以下是一个包含文件和模板的Ansible角色目录的示例:
myRole/
├── files/
│ ├── main.cfg
│ └── backup.cfg
├── templates/
│ ├── main.j2
│ └── backup.j2
└── tasks/
└── main.yml
在上面的示例中,files/目录中包含两个文件,main.cfg和backup.cfg,它们都是静态文件。templates/目录中包含两个文件,main.j2和backup.j2,它们都是模板文件。
在任务中,您可以使用copy模块来复制文件,如下所示:
- name: Copy main.cfg file to remote hosts
copy:
src: files/main.cfg
dest: /etc/myApp/
mode: '0644'
- name: Copy backup.cfg file to remote hosts
copy:
src: files/backup.cfg
dest: /etc/myApp/
mode: '0644'
在上面的示例中,copy模块从files/目录中复制文件到/etc/myApp/目录中。请注意,这里没有使用变量。
现在,让我们看看如何在任务中使用模板。
- name: Create main.cfg file from template
template:
src: templates/main.j2
dest: /etc/myApp/
mode: '0644'
-