playbook详解

一、playbook简介

  • Playbooks是ansible执行任务的另一种完全不同的方式,并且功能特别强大。
    playbooks是真正简单的配置管理和多机器部署系统的基础,并且非常适合部署复杂的应用程序。
  • 官网:playbook官网

二、playbook基本语法

  • playbook使用yaml语法
    yaml语法讲解:yaml语法讲解
    yaml语法检验:yaml语法检验(网络检测工具,敏感信息不要输入)

  • 样本示例:官网示例

  • 先举个栗子
    nginx.yml

    ---
    - hosts: all
      tasks: 
        - name: Install nginx
          yum: name=nginx state=present
        - name: template nginx.conf
          template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 validate='nginx -t -c %s'
          notify: 
            - Restart Nginx Service
      handlers: 
        - name: Restart Nginx Service
          service: name=nginx state=restarted
    
    • 1,第一行表示是YAML文件,非必须
    • 2,- hosts:后面是主机的组命
    • 3,tasks是任务动作的集合,可以有多个任务
    • 4,name是操作的描述或注释
    • 5,yum是使用yum模块执行,后面跟着一些本模块的参数
    • 6,template是模块,src是源文件(jinja2语法的模板文件以 .j2后缀),dest是生成的目标文件。
    • 7,notify执行需要有触发条件,如果文件改变,则会触发notify执行(和handlers组合使用,name和上面必须一样)
    • 8,service模块,后面是参数
  • 检查yml文件语法是否正确:ansible-playbook nginx.yml --syntax-check

  • 一般都是缩进错误,空格错误。一定要使用空格,不要使用tab键
    A YAML file cannot contain tabs as indentation
    yaml文件不能包含制表符作为缩进

  • 执行:ansible-playbook -i hosts nginx.yml

三、playbook常用内置词汇说明

remote_user: root  【远程ssh认证用户】
sudo: yes          【设置"playbook sudo"操作】
sudo_user: admin   【设置"playbook sudo"操作】
gather_facts: no   【设置facts信息收集】
accelerate: no     【设置accelerate模式(在客户端开启守护进程)】
accelerate_port: 8088 【设置accelerate端口】
max_fail_percentage: 30 【设置任务失败比例,超过30%就停止】
serial: 15 【设置并发数目】
vars: 
    nginx_port: 80  【设置变量,可通过模板使用变量。】
    
vars_files: 
    - "vars.yml" 【 变量的文件】
    - ["vars1.yml","vars2.yml"] 【使用列表可传多个文件】

roles: 
    - docker  【角色】
    
tasks:
    - include:tasks.yml  【引入tasks,也可单独写入任务】
    
post_tasks: 
    -name: post_taske   【运行之后的tasks】
    
handles:
    - include:handlers.yml 【由 notify 触发】

四、playbook中的roles角色

  • 官网介绍:roles官网

  • 如果任务多,就可以分别写到不同的角色里。每一个角色再写自己的tasks。这样也好管理。再以roles的方式写入playbook,执行任务。这样在总任务文件中就可以不写tasks了,起到了解耦的作用。

  • 简单示例
    site.yml:统一入口文件
    roles/nginx/tasks/main.yml :角色的入口文件
    site.yml和roles同级目录
    site.yml中:

    ---
    - hosts: ceshi
    gather_facts: no
    
    roles:
      - nginx 
    

    main.yml中:

    ---
    - name: install nginx
      yum: name=nginx state=present
    - name: start service nginx
      service: name=nginx state=restarted
    

    执行:ansible-playbook -i hosts site.yml

五、playbook变量与引用

  • 官网:variables官网

  • (1)、在主机清单里定义变量

    [ceshi:vars]
    key=value 
    
  • (2)、在playbook中定义变量

    vars:
        key:value
    
  • (3)、在命令行使用变量使用

    -e "key=value"
    
  • (4)、在文件中定义并引用
    vars.yml

    ---
    key1: value1
    key2: value2
    

    playbook中

    vars_files: 
        - "vars.yml" 
    

未完待续。。。

你可能感兴趣的:(playbook详解)