Ansible为了层次化、结构化地组织Playbook,使用了角色(roles)。Roles能够根据层次型结构自动装载变量文件、task以 
及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地 
include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。
创建roles时一般需要以下步骤:首先创建以roles命名的目录。然后在roles目标下分别创建以个角色名称命令的目录,如 
websevers等,在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用 
不到的目录可以创建为空目录。最后在Playbook文件中调用各角色进行使用

roles内各目录含义解释
files:用来存放由copy模块或script模块调用的文件。
templates:用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的 
task文件。
handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
meta:此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系
目录结构
[root@baiduyun zabbix]# tree /etc/ansible/roles/
/etc/ansible/roles/
├── zabbix-agent
│   ├── files
│   │   ├── check_service.conf 
│   │   ├── php-fpm_status.sh
│   │   
│   ├── tasks
│   │   ├── main.yml
│   │   └── zabbix-agent.yml
│   ├── templates
│   │   └── zabbix_agentd.j2
│   └── vars

cat check_service.conf 
UserParameter=php[*],/etc/zabbix/scripts/php-fpm_status.sh $1
[root@baiduyun files]# cat php-fpm_status.sh 
#########################################################################
# File Name: php-fpm_status.sh
#########################################################################
#!/bin/bash

listenqueue(){       #处于等待状态中的连接数,如果不为0,需要增加php-fpm进程数
    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "listen queue:"|grep -vE "len|max"|awk 
'{print$3}'
}

listenqueuelen(){  #处于等待连接队列的套接字大小
    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "listen queue len" |awk '{print$4}'
}

idle(){          #处于空闲状态的进程数
    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "idle processes" |awk '{print$3}'
}
active(){       #处于活动状态的进程数
    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "active" |awk '{print$3}'|grep -v 
"process"
}
total(){        #进程总数
    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "total processes" |awk '{print$3}'
}

mactive(){    #从php-fpm启动到现在的进程处于活动状态数

    wget --quiet -O - http://127.0.0.1:9996/status?auto |grep "max active processes:" |awk '{print$4}'
}

$1

[root@baiduyun tasks]# cat main.yml 
- include: zabbix-agent.yml
tags: zabbix-agent

[root@baiduyun tasks]# cat zabbix-agent.yml 
- name: Install Zabbix-Agent RPM
  yum:
    name: https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm 
    state: installed

- name: Install zabbix-agent 
  register: zabbix-agent
  yum:
    name: zabbix-agent
    ignore_errors: true

- name: create zabbix scripts directory
  file:
    path: /etc/zabbix/scripts
    state: directory
    mode: 0755

- name: Sync zabbix-agentd.conf
  template: 
    src: /etc/ansible/roles/zabbix-agent/templates/zabbix_agentd.j2 
    dest: /etc/zabbix/zabbix_agentd.conf 
    owner: root 
    group: root 
    mode: 0644

- name: php status
  copy:
    src: /etc/ansible/roles/zabbix-agent/files/php-fpm_status.sh
    dest: /etc/zabbix/scripts
    owner: root
    group: root
    mode: 0644

- name: php moban
  copy:
    src: /etc/ansible/roles/zabbix-agent/files/check_service.conf
    dest: /etc/zabbix/zabbix_agentd.d/
    owner: root
    group: root
    mode: 0644

  - name: zabbix-server start and enable
  systemd:
    name: zabbix-agent
    enabled: yes
    state: started

[root@baiduyun templates]# cat zabbix_agentd.j2 
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=139.9.72.161
ListenPort=10050
ServerActive=139.9.72.161
Hostname={{agent_hostname}}
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/*.conf

执行
ansible-playbook /etc/ansible/zabbix-agent.yml -i /etc/ansible/ssh/hosts -e "hosts=baidu 
agent_hostname=baiduyun" -b