Ansible 之Playbook
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的更多相关文章
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- Ansible之playbook的使用总结 - 运维笔记
之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...
- ansible学习-playbook的YAML语法
[一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...
- 自动化运维工具——ansible剧本playbook(三)
一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...
- Ansible基于playbook批量修改主机名实战
Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...
- 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群
首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...
- 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续
ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...
- Ansible 和 Playbook 暂存
Ansible 和 Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单 HOST Inventory 模块插件 Playbooks 查看ansible的目录结构 ...
- ansible使用playbook的简单例子(ansible2.9.7)
一,ansible使用playbook的优点 1,用ansible执行一些简单的任务,使用ad-hoc命令就可以解决问题 如果执行复杂的功能,需要大量的操作,执行的ad-hoc命令会不够方便,这时我们 ...
随机推荐
- Spark(Hive) SQL中UDF的使用(Python)【转】
相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内 ...
- asp.net正则匹配嵌套Html标签
废话不多说,直接代码 1.要匹配的html代码 <div class="conItem" id="footer"> <a id="g ...
- tf.square
tf.square square( x, name=None ) 功能说明: 计算张量对应元素平方 参数列表: 参数名 必选 类型 说明 x 是 张量 是 half, float32, float64 ...
- vi卡死解决办法
玩了这么多年linux 居然不知道这个..特此记录. 使用vim时,如果你不小心按了 Ctrl + s后,你会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而 ...
- JS实现多行文本最后是省略号紧随其后还有个超链接在同一行的需求
1.布局及样式如下图: 2.js获得上图的div对象,然后判断div对象的高度,如果大于一行的高度了表示内容有两行了,再获得span标签里面的内容并用正则将后六个字符替换成“......”这里的实现代 ...
- 2. 感知机(Perceptron)基本形式和对偶形式实现
1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...
- idea中git git pull push需要反复输入密码
在使用idea开发的过程中,在终端terminal中git pull和git push时遇到一个问题,一个是 每次提交都需要输入用户名和密码,,从网上找了下解决方案,记录一下. 解决: 打开git终端 ...
- [Linux]阿里云免费试用体验(在阿里云的ubuntu上部署个人服务)
作为一个IT界的人,一般都希望有一个独立的博客,或者一部独立的机器.所以我一直在找机会,拥有一台自己可以独立控制的机器,自己想干嘛干嘛.当然这在虚拟机或者自己的PC上面也可以实现,但是这跟一台一直开着 ...
- 【MarkdownPad】不能输入表格Table
使用MarkdownPad时,需要制作一个表格.搜到参照这篇文章,发现还是无法显示表格,测试效果是如下这样的: Markdown文本: 显示效果: 谷歌一下,原来是MarkdownPad默认的处理器不 ...
- vs2010中TargetName与链接器输出名不一致
当出现解决方案生成正确,但是无法执行.exe文件,即系统无法找到指定文件时,提示有:MSB8012: TargetName(,,,) 与 Linker 的 OutputFile 属性(,,,)不匹配. ...