介绍

Playbooks 是 Ansible 管理配置、部署应用和编排的语言,可以使用 Playbooks 来描述你想在远程主机执行的策略或者执行的一组步骤过程等

  1. 类似于一组任务集,定义好像项目,组织结构,配置文件等信息,通过task将所要做的事情一步一步的组织在一起就是完整的Playbook

官方Demo资料:https://github.com/ansible/ansible-examples

Playbooks是采用YMAL语言结构,基础语法请参考:http://docs.ansible.com/ansible/YAMLSyntax.html

一个完整的Playbooks结构,以部署tomcat为例:

tomcat/ ———> tomcat的playbook
    ├── hosts ————> 指定安装tomcat的机器清单(Inventory)
    ├── roles ———> 子项清单 (可以有一项或多项的任务)
    │ └── tomcat ——> 安装tomcat
    │ ├── files —-> 存放文件
    │ │ ├── apache-tomcat-7.0.64.tar.gz ——> tomcat安装包
    │ │ ├── jdk-7u79-linux-x64.tar.gz ——-> jdk安装包
    │ │ └── tomcat ———>tomcat服务启动脚本
    │ └── tasks ———>任务项清单
    │ ├── jdk.yml —-> jdk任务列表
    │ ├── main.yml —-> 任务入口
    │ └── tomcat.yml ——>tomcat任务列表
    ├── site.yml ansible playbook执行入口
    ├── tomcat.sh 批量安装shell.
    └── tomcat-testing.sh tomcat安装测试脚本

  Ansible roles 完整示例:

    root@node1 playbook]# tree roles/
    roles/ \ansible所有的信息都放到此目录下面对应的目录中
    └── nginx \角色名称
     ├── default \为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件;
     ├── files \存放有copy或script等模块调用的文件
     ├── handlers \此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler
     ├── meta \应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持
     ├── tasks \至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令
     ├── templates \template模块会自动在此目录中寻找Jinja2模板文件
     └── vars \应当包含一个main.yml文件,用于定义此角色用到的变量

项目结构介绍

 Playbook中的属性介绍:

    name 表示playbook 的名称
    hosts 表示执行的机器清单
    connection:允许你指定ssh parmiko或者local这三种传输方式
    gather_facts:默认每次连接都会执行setup,如果不需要用到变量可以制定这个字段为now
    remote_user : 远程端执行的用户
    tasks: 定义执行的任务清单,顺序执行
    templates : 存放模板文件
    vars: 存放变量
    handlers: 定义以后回调的方法
    file: 存放复制的安装文件,比如安装文件等

PlayBook示例

安装ftp服务:
—-
- hosts: test
remote_user: root
tasks:
- name: install ftp
command: yum -y install ftp

其他

  1. 首次连接或者重装系统之后会出现检查 keys 的提示

    The authenticity ofhost ‘192.168.0.5 (192.168.0.5)’ can’t be established.
    ECDSA key fingerprint is 05:51:e5:c4:d4:66:9b:af:5b:c9:ba:e9:e6:a4:2b:fe.
    Are you sure you want to continue connecting (yes/no)?

  解决办法:

    vim /etc/ansible/ansible.cfg 或者 ~/.ansible.cfg
    [defaults]
    host_key_checking = False
    也可以通过设置系统环境变量来禁止这样的提示
    export ANSIBLE_HOST_KEY_CHECKING=False

  1. 在使用 paramiko 模式时,主机 keys 的检查会很慢

  2. 默认情况下 Ansible 会记录一些模块的参数等信息到每个被控端的 syslog 日志文件里,除非在任务或者剧本里设置了 no_log: True 会不记录日志

参考资料

  1. Ansible-Playbook<br />  http://www.178linux.com/7001

  集群运维ansible的playbook配置及template模板的使用
  http://www.tuicool.com/articles/UvU3ai
  http://rfyiamcool.blog.51cto.com/1030776/1413031

  Playbook Roles and Include Statements
  http://docs.ansible.com/ansible/playbooks_roles.html