day16.5

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分区的磁盘大小: /分区
posted @ 2022-07-01 19:07  Gabydawei  阅读(21)  评论(0编辑  收藏  举报