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. convert2utf8withbom

    很久以前给同事要的转码bash 当时windows和mac总是出现中文注释乱码的情况,让人心塞的难过.又因为是老项目,现有源码太多了,不可能改模板重新创建.只能跑一遍这个玩意儿了…… #!/bin/b ...

  2. ubuntu 解压命令

    ubuntu解压命令.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————. ...

  3. hive的join查询

    hive的join查询 语法 join_table: table_reference [INNER] JOIN table_factor [join_condition] | table_refere ...

  4. yum卸载失败Error in PREUN scriptlet in rpm package postgresql-server

    yum --setopt=tsflags=noscripts remove 参考 https://serverfault.com/questions/613256/yum-error-in-preun ...

  5. LeetCode: Jump Game II 解题报告

    Jump Game II Given an array of non-negative integers, you are initially positioned at the first inde ...

  6. mysql 常用指令集合

    show variables ——显示系统变量(扩展show variables like 'XXX') 在MYSQL的主从复制中 ,通过命令show  master status,可以查看maste ...

  7. 我为什么要学Go语言

    # 我为什么要学Go语言 ### 公司的强烈推荐---之前也了解过Go语言并没有觉得有什么了不起,Go能做的其他语言都能做. ### 网上查找学习Go语言的理由---网上大体有两类人,一类说Go是大公 ...

  8. JAVA-JSP内置对象之request对象的其他方法

    相关资料:<21天学通Java Web开发> request对象的其他方法1.request对象除了可以用来获得请求参数,还可以用来获得HTTP标头及其他信息. 方法           ...

  9. 让cpu跑到100%的bat文件

    请你新建一个叫“virus.bat”的批处理文件,里面填写上如下三段命令: Echo "welcom to the aqjava's world"Tree /fCall virus ...

  10. java 获取参数泛型类型

    import java.lang.reflect.ParameterizedType; public abstract class SampleObjectCallBack<T> { pr ...