背景
在使用 ansible 编写 playbook 的过程中,我们发现在安装某服务时,例如部署 fastdfs 分布式存储时,有的机器需要启动 tracker 和 storage 两个服务,有的机器只需要启动一个服务即可,它们需要的配置不同,我们要根据不同的机器来做不同的判断,来分发不同的配置文件,这时就会用到 when 来做判断了,并且我们还要使用 jinja2 的循环条件控制语句,还要在 ansible 的清单文件中设置好变量。
一个简单的判断
判断某文件或目录是否存在,存在则直接跳过,否则创建
- name: Check if fdfs_dl_dir is already exists
stat:
path: "{
{ fdfs_dl_dir }}" #这里是一个由引号引起的变量,可在vars目录中指定
register: fdfs_dl
- name: Create download dir
file:
path: "{
{ fdfs_dl_dir }}"
state: directory
mode: 0755
when: fdfs_dl.stat.exists == False
become: true
我们在日常的部署中,这种使用方法能帮我们大大的提高 playbook 的执行效率
针对不同的主机来做判断,如果满足条件,则执行任务,不满足直接略过
- name: Copy tracker init file
template:
src: "{
{ item.src }}"
dest: "{