day16.5
playbook handlers(触发器)
# 当修改完某个服务的配置文件时,应该重启服务 - hosts: web_group tasks: - name: 推送nginx配置文件 copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - {src: "/root/code/nginx.conf",dest: "/etc/nginx/nginx.conf"} notify: nginx_php handlers: - name: nginx_php service: name: nginx state: reloaded
handler注意点
1.无论多少个task调用相同hander,只会在所有tasks执行完成后,触发handles 2.handlers只有在其所在的任务被执行时,才会被运行,如果一个任务中定义了notify调用handiers,但是由于条件判断等原因,该任务未被执行,那么handdiers同样不会被执行 3.handlers只会在每一个play的末尾运行一次,如果想在一个playbook中间运行handlers,则需要使用mera模块来使用 4.如果一个play在运行到调用handlers的语句之前失败了,那么这个handlers将不会被执行。我们可以使用meta模块的-force-handlers选项来强制执行handlers所在play中途运行失败也能运行 5.不能使用handlers代替tasks
ansible任务标签
# 对一个task打一个tag - name: 安装rsync yum: name: rsync state: present when: ansible_hostname != 'db01' tags: install_rsync
# 对一个task打多个tag - name: 安装rsync yum: name: rsync state: present when: ansible_hostname != 'db01' tags: - install_rsync - send_rsync_config
# 对多个task打一个tag - name: 安装rsync yum: name: rsync state: present when: ansible_hostname != 'db01' tags: install_rsync - name: 启动rsync服务 service: name: rsyncd state: started enabled: True when: ansible_hostname == 'backup' tags: install_rsync
使用标签
-t: 执行指定的tag标签任务 --skip-tags:执行--skip-tags之外的标签任务 ansible-playbook -i base/hosts lnmp_wp.yml -t 'install_rsync' ansible-playbook -i base/hosts lnmp_wp.yml --skip-tags 'install_rsync'
playbook的复用
在需要重启的配置文件里加入notify并定义它的变量 - name: 推送配置文件 copy: src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - {src: "/code/nginx.conf",dest: "/etc/nginx/nginx.conf"} - {src: "/code/wordpress.conf",dest: "/etc/nginx/conf.d"} - {src: "/code/www.conf",dest: "/etc/php-fpm.d/"} notify: nginx when: ansible_hostname is match 'web*' 在文件最后写他的配置文件 handlers: - name: rsync service: name: rsync state: restarted - name: nginx service: name: rsync state: restarted
facts缓存
缓存中,记录主机自带的变量,直接调用即可
缓存加载时间:在play执行的时候,会将变量内容放到内存中
缓存清除时间:当该play执行完所有task之后,会将内存中的变量全部删除
## 主机名 ansible_hostname // 显示第一个.之前的主机名 ansible_fqdn // 显示完整的主机名
## 内存 ansible_memtotal_mb // 总内存 ansible_memfree_mb // 空闲内存 ansible_swaptotal_mb // 总虚拟内存 ansible_swapfree_mb // 空闲虚拟内存
## CPU ansible_processor_cores // cpu核心数
## 系统 ansible_os_family // 系统类型 RedHat Debain ansible_distribution // 系统发行版 CentOS ansible_distribution_major_version // 版本号 7 ansible_distribution_version // 详细版本号 7.6
## IP相关 ansible_dns.nameservers // DNS ansible_default_ipv4.address // eth0外网IP ansible_eth0.ipv4.address // eth0外网IP ansible_eth1.ipv4.address // eth1内网IP
## 磁盘 ansible_devices.sda.partitions.sda1.size // sda1分区的磁盘大小:/boot分区 ansible_devices.sda.partitions.sda3.size // sda3分区的磁盘大小: /分区