1.handlers 触发器功能
通过notify 监控某个模块,触发对应handlers
例子:只有配置文件发生变化,重启Nginx
剧本问题,无论配置是否分发,Nginx都会重启
任务:只有配置文件发生变化,nginx才会再重启
- hosts: web
gather_facts: false
tasks:
- name: fenfa ngx conf
copy:
src: nginx.xonf
dest: /etc/nginx/conf.d
backup: yes #是否备份源文件
notify: #设置触发条件,当上面配置文件改变执行handlers
- nginx restart
handlers:
- name: reload
systemd:
name: nginx
state: reloaded
2.when
when 一般与ansible中的facts变量一起使用,判断主机系统类型
when也可与register变量一起搭配
比如:
when: (ansible_distribution == "Ubuntu") #判断系统是否是Ubuntu,若是执行ansible_distribution ansible facts变量
when: (ansible_hostname is match("web|lb")) #判断主机名是否是web或lb
when: (ansible_hostname is not match("web|lb"))
举例:给主机清单中的web服务器和lb服务器配置Nginx,yum源
方案1:web和lb放在一起组,修改主机清单
方案2:在剧本中增加when判断
vi nginx.yaml
- hosts: all
gather_facts: ture
tasks:
- name: add nginx yum repo
yum_repositiry:
name: "nginx-stable"
description: "ngixn yum repo"
baseurl: " " #yum源地址
enabled: yes
gpgchechk: no
file: nginx
when: (ansible_hostname is match("web|lb"))
3.with_items循环
with_items一般大多数用于批量重启服务,好多服务,systemd模块可以重启服务,但是不支持多个服务同时管理。
比如:重启web服务器中的Nginx,crond,php-fpm
- hosts: web
gather_facts: false
tasks:
- name: restart 很多服务
systemd: #不支持多个服务同时管理
name: "{{ item }}"
state: stopped
with_items:
- nginx
- crond
- php-fpm
3.1用with_items批量创建用户
#批量建立用户,同时指定用户名,并指定UID
#key1: vlaue1, key2:value2 #key变量名,value内容值
- hosts: web
gather_facts: false
tasks:
- name: add user
user: name={{ item.name}} uid={{ item.uid }}
with_items:
- {name: 'abc12',uid: '2'}
- {name: 'abc13',uid: '3'}
- {name: 'abc14',uid: '4'}
- {name: 'abc15',uid: '5'}
4.ansible循环小结
配合一些模块实现批量操作,比如批量重启/关闭/开启服务,批量添加用户
常用的是with_items,loop功能更多一些