ansbile playbook是一系列ansible命令的集合,利用yaml 语言编写,playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的.

Playbook是Ansible的配置,部署,编排语言。他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT程序运行的命令集合。

playbook的构成

playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中即可以让它们联同起来按事先编排的机制同唱一台大戏。其主要有以下四部分构成:

Playbooks
Variables #变量元素,可传递给Tasks/Templates使用;
Tasks #任务元素,即调用模块完成任务;
Templates #模板元素,可根据变量动态生成配置文件;
Hadlers #处理器元素,通常指在某事件满足时触发的操作;
Roles #角色元素

使用Playbook时通过ansible-playbook命令使用,它的参数和ansible命令类似,如参数-k(–ask-pass) 和-K (–ask-sudo) 来询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过规定的单元写在playbook里。

ansible-playbook的简单使用方法:

ansible-playbook /etc/ansible/site.yml 

以下是简单的playbook例子(play可以有多个):

1.使用playbook 实现新增一个用户的功能:

#vim create_user.yml

---
- hosts: test
gather_facts: false
user: root
vars:
user: "user1"
tasks:
- name: create user
user: name="{{ user }}" createhome=yes

各行参数详解:

hosts参数指定了对哪些主机进行参作,test为定义的主机组.
user参数指定了使用什么用户登录远程主机操作;
gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息.
vars参数,指定了变量,这里指定一个user变量,其值为user1,需要注意的是,变量值一定要用引号引住;
task指定了一个任务,其下面的name参数是对任务的描述,在执行过程中会打印出来
user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值,createhome=yes表示创建用户家目录,也是user模块的参数对象. 同样,如果想实现把这个新增的用户删除,只需将该playbook文件的最后一行替换为如下行再执行相应的playbook即可:
user: name="{{ user }}" state=absent remove=yes

2.使用playbook更改一组主机主机名的方法:

---
- hosts : test
remote_user : root
tasks :
- name : show hostname
shell : hostname
- name: show ipaddress
command : ip addr
- hostname : name=benet.develop.com

说明:在tasks任务中,调用了shell和command模块来执行查询命令,- hostname是使用hostname模块的name方法来更改主机名.

3.使用playbook安装apache服务实例:

---
- hosts: test
remote_user: root
tasks:
- name: Install the latest version of apache.
yum: name=httpd state=latest
- name: write the apache config file
copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd service
- name: Start the apache service
service: name=httpd state=started
handlers:
- name: restart httpd service
service: name=httpd state=restarted #注意:在notify中定义内容一定要和tasks中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效。

4.使用playbook安装Nginx实例:

---
- hosts: test
tasks:
- name: Install nginx Depend on the package
yum: pkg={{ item }} state=latest
with_items:
- openssl-devel
- gcc
- pcre-devel
- zlib-devel
- name: Installing NGINX repo rpm
yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm - name: Installing NGINX
yum: name=nginx state=latest - name: write the NGINX config file
copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf
notify:
- restart NGINX service - name: Start the NGINX service
service: name=nginx state=started
handlers:
- name: restart NGINX service
service: name=nginx state=restarted

ansible-playbook - script module

使用script模块可以实现,ansible本机到对象节点上执行本机脚本。有点类似copy+shell+删除copy的脚本的这样一个综合的功能.

这样的好处是ansible所在服务器部署脚本就可以了,无需在所有远程的服务器上都部署一份,避免改动脚本时候要在所有远程服务器上都重新部署一遍.

/usr/bin/ansible-playbook -i /data/devops/etc/hosts.zt_prod /data/devops/etc/config_os_policy.yml -v

config_os_policy.yml

- hosts: all-hosts
remote_user: root
gather_facts: false tasks:
- name: set the system timezone
shell: "timedatectl set-local-rtc 0 && timedatectl set-timezone Asia/Shanghai" - name: modify os parameters
#shell: "/bin/bash /data/devops/bin/modify_os_parameters.sh"
script: "/data/devops/bin/modify_os_parameters.sh" //不需要使用/bin/bash指令.

注意点是,script模块后面是不需要用sh指令的了.  

Ansible 之Playbook的更多相关文章

  1. Ansible进阶--playbook的使用

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

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

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

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

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

  4. ansible学习-playbook的YAML语法

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

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

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

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

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

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

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

  8. 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续

    ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...

  9. Ansible 和 Playbook 暂存

    Ansible  和  Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单  HOST Inventory 模块插件  Playbooks 查看ansible的目录结构 ...

  10. ansible使用playbook的简单例子(ansible2.9.7)

    一,ansible使用playbook的优点 1,用ansible执行一些简单的任务,使用ad-hoc命令就可以解决问题 如果执行复杂的功能,需要大量的操作,执行的ad-hoc命令会不够方便,这时我们 ...

随机推荐

  1. sql2008修改数据库文件名称

    例如我们有数据库a,需修改成b,包括文件名称也修改 1.备份数据a 选择数据库->右键->任务->备份,备份出a.bak 2.右键->任务->还原->数据库,跳出“ ...

  2. asp.net上传大文件-请求筛选模块被配置为拒绝超过请求内容长度的请求

    HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...

  3. Windows / VS下不同类型变量转换

    [时间:2016-07] [状态:Open] [关键词:windows,vs,mfc,类型转换] 在实际编码中经常遇到不同类型及编码方式的字符串.变量之间的转换,比如Unicode->char. ...

  4. 安装C/C++交叉编译环境

    转:http://blog.csdn.net/nokiaguy/article/details/8509739 X86架构的CPU采用的是复杂指令集(Complex Instruction Set C ...

  5. django后台显示图片 而不是图片地址

    修改admin代码 class Ad_CampaingAdmin(admin.ModelAdmin): list_display = ("content","previe ...

  6. 01-移动端开发教程-CSS3新特性

    1. 移动端开发课程概述 移动互联网的兴起,让移动端的开发迅速蹿红.对于前端开发者来说,移动端的开发已经占据了他们大部分工作时间.接下来老马带大家一起学习移动端开发的相关前端开发技术. 这边课程内容包 ...

  7. TCP、UDP数据包大小的限制

    版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa 原创文章,转载请标明出处. https://blog.csdn.net/caoshangpa/article/de ...

  8. Eclipse C++的配置问题launch failed binary not found

    首先下载eclipse c++ 我的是64bit版本 安装好MinGW,并配置好环境变量,参考我的博客 http://www.cnblogs.com/fickleness/p/3273044.html ...

  9. java基础篇---XML解析(二)

    XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...

  10. How Not to Crash #2: Mutation Exceptions 可变异常(不要枚举可变的集合)

    How Not to Crash #2: Mutation Exceptions 可变异常html, body {overflow-x: initial !important;}html { font ...