playbook的核心元素:

        tasks: 任务

        variables: 变量

        templates: 模板

        handlers: 处理器

        roles: 角色

组织格式:YAML(被称为另外一种标记语言)

  语法:(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对)

例如:    name:tom

       age:21

       gender:Male

       spourse:

         name:lily

         gender:female

       children:

         —    name:susan

            age: 2

            gender:female

         —    name:sunny

            age: 10

            gender:male

列表:用—引导

字典:包含多个k:v键值对  例如   {name:tom age:21 gender:male}   上面的表示就是一个字典,字典也可以嵌套,如上面的

spourse下又嵌套了一个字典,而children下包含了两个列表,每个列表下又嵌套了一个字典

创建一个playbook文件:vim /root/first.yml  (这类文件必须以.yml或.yaml结尾)

一般的格式为:

   - hosts:

     vars: 

     remote_user:   

     tasks:

     handlers:

hosts 定义单个主机或组,vars定义变量,remote_user定义执行命令的远程用户,tasks定义执行哪些命令,handlers定义调用哪些

处理器

下图是一个简单示例:

如何运行我定义的剧本呢?  使用ansible-playbook命令  例如:ansible-playbook /root/first.yml

变量:

  变量命名:字母数字下划线组成,只能以字母开头

  变量种类:  facts(内置变量)

       自定义变量:(1)通过命令行传递,(2)通过roles传递,(3)主机变量,(4)组变量

  facts:由远程主机发回的主机属性信息,这些信息被保存在ansible变量当中

  例如:ansible 192.168.238.170 -m setup  来获取远程主机上的属性信息,这些属性信息保存在facts中

  通过命令行传递:ansible-playbook test.yml --extra-vars “host=www user=tom“(如果剧本中已有此处定义的变量则会被

覆盖)

    主机变量:在/etc/ansible/hosts中定义,如下图

  

  name=tom就是给主机192.168.238.168单独定义的变量(主机变量)

  组变量:[group_name:vars]

      var1=value

      var2=value

inventory参数:ansible基于ssh连接inventory(/etc/ansible/hosts)中指定的远程主机时,将以此处指定的属性进行连接

  ansible_ssh_port 连接远程主机使用的端口

  ansible_ssh_user 连接远程主机使用的用户

  ansible_ssh_pass 连接远程主机使用的密码(建议使用基于密钥认证,而不是用此选项)

使用示例:vim /etc/ansible/hosts

第二个剧本:vim /root/second.yml

在playbook中调用变量的方式为{{ variable }}

条件测试:在某task后面添加when子句即可实现条件测试功能,例如:

ansible_os_family 是facts中内置的属性信息   ansible_os_family的信息可以使用ansible all -m setup | grep

ansible_os_family 查看

迭代:

  在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表

例如:

- name: add four users

user: name={{ item }}  state=present

with_items:

  - testuser1

  - testuser2

  - testuser3

  - testuser4

迭代中,列表中的每个元素可以为字典格式

例如:

- name: add two users

user: name={{ item.name }}  state=present  groups={{ item.groups }}

with_items:  

- { name: 'testuser5', groups: 'wheel' }

- { name: 'testuser6', groups: 'root' }

handlers:也是task,但只有其关注的条件满足时,才会被触发执行 例如:

vim /root/fourth.yml

上面的意思是copy中复制过去的文件跟远程主机上的文件不同,就通过notify调用handlers,即重启httpd服务

handler 重启服务是最通用的用法

templates:用于生成文本文件(配置文件);模板文件中可使用jinja2表达式,表达式要定义在{{ }},也可以简单地仅执行变量替

换;

使用示例: vim /etc/ansible/hosts

添加了http_port的变量

接下来:vim /root/httpd.conf

Listen的端口使用 {{ http_port }},这样是为了调用此变量

接下来: vim /root/fourth.yml

修改copy为template

ansible-playbook /root/fourth.yml,这时192.168.238.168就会监听为8080端口,  而不是默认的80端口了

roles:roles用于实现“代码复用”,roles以特定的层次型格式组织起来的playbook元素(variables, tasks, templates,

handlers);可被playbook以role的名字直接进行调用

roles的文件结构:

    files/:此角色中用到的所有文件均放置于此目录中;

    templates/:Jinja2模板文件存放位置

    tasks/:任务列表文件;可以有多个,但至少有一个叫做main.yml的文件

    handlers/:处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件

      vars/:变量字典文件;可以有多个,但至少有一个叫做main.yml的文件

    meta/:此角色的特殊设定及依赖关系

例如:mkdir /etc/ansible/roles   cd /etc/ansible/roles    mkdir  web1/{files,templates,tasks,handlers,vars,meta}

(1)vim web1/vars/main.yml

  

(2) vim web1/tasks/main.yml

这里的template指的是相对路径-->web1/templates

(3) vim web1/handlers/main.yml

cp /root/httpd.conf   /etc/ansible/roles/web1/templates/

vim /etc/ansible/roles/web1/templates/httpd.conf

将User和Group都替换为上面定义的变量

在roles之外定义一个调用roles的文件,vim /etc/ansible/web1.yml  这个文件的文件名必须以.yml结尾

hosts:web1 指在/etc/ansible/hosts中定义的组,上面有定义

最后的 -  web1  指的是/etc/ansible/roles/web1 目录

这时只需更改上面的hosts指定的值就可对不同的主机实现代码重用了

还可以通过role传递变量,例如

还可以调用多个role,例如

每次运行palybook都会把里面的内容都运行一遍,而有时只想运行一些内容,这时可以使用tags

vim /etc/ansible/roles/web1/tasks/main.yml

使用命令ansible-playbook -t conf web1.yml  就只执行定义了conf的tags的那个标签的任务,此处就是install config file

tags可以定义在多处

ansible的playbook组件的更多相关文章

  1. ansible入门及组件介绍

    Ansible简介 Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置.批量程序部署.批量运行命令等功能.Ansible是基于模块工作的,ansible提供一个框架,通过模块实 ...

  2. ansible基础-playbook剧本的使用

    ansible基础-playbook剧本的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...

  3. Ansible之playbook的使用总结 - 运维笔记

    之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...

  4. 自动化运维工具——ansible剧本playbook(三)

    一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...

  5. Ansible之playbook剧本

    Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...

  6. Ansible进阶--playbook的使用

    一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...

  7. ansible学习-playbook的YAML语法

    [一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...

  8. Ansible基于playbook批量修改主机名实战

    Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...

  9. 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群

    首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...

随机推荐

  1. JqGrid单选

    You have to do some more stuff: 1. Set multiboxonly to true and multiselect to true 2. Define the ev ...

  2. [SQL]根据刚刚插入数据的 ID 向另外一张表插入数据(插入的其他字段数据需要对字符串进行分析)

    比如做一个学生选课系统 数据库有3张表 students(ID,Name,Age) ,courses(ID,Name),selectedcourses(studentID,courseID)括号里是字 ...

  3. springMVC之HelloWorld

    一.总结 1.web项目一定要把引用的jar包放在WEB-INF/lib下(common-logging1.2,spring4.1.6所有包,其实不需要那么多,懒得筛选了,) 2.web.xml中要初 ...

  4. The 2013 ACM-ICPC Asia Changsha Regional Contest - J

    Josephina and RPG Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge A role-playin ...

  5. MongoDB基本操作命令

    由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...

  6. Fiddler录制jmeter脚本--V4.4..0.1版本

      圣诞节到了,圣诞老人送平安,我们送技术,我们知道以前jmeter的脚本来源有三个,手动书写.badboy录制.自带的录制功能(jmeter3.0该功能还比较好),目前我们又多了一个fiddler生 ...

  7. &&和||的那点事儿

    以前一直以为&&和||的运算结果就是布尔值,但今天看到一段代码又填补的一些知识漏洞. var a = (1&&2&&5) || 3; console.l ...

  8. 002..NET MVC实现自己的TempBag

    原文链接:http://www.dotnetbips.com/articles/bc422c95-02cc-4d05-9c5c-fa89d0e78cc0.aspx 1.前言 本来今天是想发那篇关于在W ...

  9. Swift 学习一函数&函数属性&懒加载

    函数 函数相当于OC中的方法 格式: func 函数名(参数列表) -> 返回值类型 {    代码块    return 返回值} func 函数名(参数列表){  // 返回值为Void 可 ...

  10. Leaf-spine data center architectures

    http://longwhiteclouds.com/2015/03/26/configuring-scalable-low-latency-l2-leaf-spine-network-fabrics ...