playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的“描述”,通过执行“剧本”的
内容,让受控主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列ad-hoc模块
操作一样,playbook是将该一系列操作组合起来,统一完成操作。
	playbook使用场景
	当一个设施过于复杂,需要大量的操作时候,且需要不断的重复操作,这时最好使用playbook,其使用
意义类似于脚本一样,可以很方便的批处理任务,但playbook与脚本不同的是,playbook有自己的语法
格式。
	
  1. 单文件剧本示例user_add.yaml
    # 指定主机组
    - hosts: vm
    # 用于远程连接的用户名
      remote_user: root
    # 不收集主机信息
      gather_facts: no
    # 任务列表
      tasks:
    	- name: 添加用户
    	  user: name=xiaoming state=present
    	  tags:
    	    - num1
    	- name: 添加组
    	  group: name=atmgrp state=present
    	  tags:
    	    - num2
    	- name: 复制文件
    	  copy: src=/etc/passwd dest=/home
    	  tags:
    	    - num1
    			
    检查语法
    ansible-playbook --syntax-check user_add.yaml
    预执行
    ansible-playbook -C user_add.yaml
    执行
    ansible-playbook user_add.yaml
    基于标签tags执行
    ansible-playbook -t num1 user_add.yaml
  2. handler触发器示例
    - hosts: vm
      remote_user: root
      gather_facts: no
      tasks:
    	- name: change port
    	  command: sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
    	  notify:
    		- restart httpd server
      handlers:
    	- name: restart httpd server
    	  service: name=httpd state=restarted
    			
  3. 基于角色的剧本示例
    在/etc/ansible/roles内创建角色名目录
    mkdir -pv /etc/ansible/roles/mariadb{tasks,handlers,files}
    任务示例/etc/ansible/roles/mariadb/tasks/main.yaml
    - name: install mariadb
      yum: name=mariadb-server state=present
    - name: mv conf file
      shell: "[ -e /etc/my.cnf ] && mv /etc/my.cnf /etc/my.cnf.bak"
    - name: cp file
      copy: src=my.cnf dest=/etc/my.cnf
    - name: reload mariadb
      shell: "systemctl restart mariadb"
    - name: create db
      shell: mysql -u root -e "create database testdb;grant all on testdb.* to 'test'@'192.168.112.%' identified by 'test1234';flush privileges;"
      notify:
    	- restart mariadb
    			
    触发示例/etc/ansible/roles/mariadb/handlers/main.yaml
    - name: restart mariadb
      service: name=mariadb state=restarted
    			
    引用文件示例/etc/ansible/roles/mariadb/files/my.cnf
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd
    
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid
    
    #
    # include all files from the config directory
    #
    !includedir /etc/my.cnf.d
    			
    主剧本示例install_mariadb.yaml
    - hosts: vm
      remote_user: root
      gather_facts: no
      roles:
    	- mariadb
    			
    检查语法
    ansible-playbook --syntax-check install_mariadb.yaml
    预执行
    ansible-playbook -C install_mariadb.yaml
    执行
    ansible-playbook install_mariadb.yaml

实例