ansible的playbook组件
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组件的更多相关文章
- ansible入门及组件介绍
Ansible简介 Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置.批量程序部署.批量运行命令等功能.Ansible是基于模块工作的,ansible提供一个框架,通过模块实 ...
- ansible基础-playbook剧本的使用
ansible基础-playbook剧本的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.YAML概述 1>.YAML的诞生 YAML是一个可读性高,用来表达数据序 ...
- Ansible之playbook的使用总结 - 运维笔记
之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...
- 自动化运维工具——ansible剧本playbook(三)
一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...
- Ansible之playbook剧本
Ansible之playbook剧本 目录 Ansible之playbook剧本 1. playbook的组成 2. 剧本示例test1 2.1 剧本制作 2.2 准备http.conf 2.3 运行 ...
- Ansible进阶--playbook的使用
一.什么是playbooksplaybooks是ansible的脚本.如同shell脚本一样,它是控制远程主机的一系列命令的集合,通过YAML语言编写.执行一些简单的任务,我们可以使用ad-hoc命令 ...
- ansible学习-playbook的YAML语法
[一篇非常好的ansible参考博文] 初识Ansible http://liumissyou.blog.51cto.com/4828343/1616462 --------------------- ...
- Ansible基于playbook批量修改主机名实战
Ansible基于playbook批量修改主机名 安装Ansible,相信这里也不用多说,大家都知道 说一下环境:这里的主机名是修改之后的,我先把其他两台的主机名改为别的 192.168.30.21 ...
- 利用ansible书写playbook在华为云上批量配置管理工具自动化安装ceph集群
首先在华为云上购买搭建ceph集群所需云主机: 然后购买ceph所需存储磁盘 将购买的磁盘挂载到用来搭建ceph的云主机上 在跳板机上安装ansible 查看ansible版本,检验ansible是否 ...
随机推荐
- C++ DLL中导出函数的声明的方法
定义: TESTDLLEXPORT_API int fnTestDllExport(void); TESTDLLEXPORT_API int fnTestCall(void); TESTDLLEXPO ...
- python学习(一):环境安装及HelloWorld
一.安装注意事项: 在安装python的第三方库时,(平台是win)要 注意所下载的包的版本,一要与所安装的python版本相对应,同时还有注意操作系统的位数(32位还是64位).下载好后,先将c:\ ...
- 实时阴影渲染(一):PSSM平行分割阴影图
PSSM(Parallel Split Shadow Map)平行分割阴影图,是一种根据距离远近采用多个深度纹理渲染阴影的方法 适合用于室外大场景中的平行光比如太阳形成的阴影 本系列需要读者了解基本的 ...
- C/c++笔试经典程序(一)
1.输出结果比较 1) 输出结果:21 2) 输出结果:12.虽然循环只进行了一次,但是对!X++来说,X还是进行了自加运算. 2.指针运算 输出结果8,8.程序运行时,printf语句是从右往左进行 ...
- conpot_usage简要说明
conpot是一个ICS(工业控制系统)蜜罐, 旨在收集攻击者针对工业控制系统的攻击方法和动机. 这篇文章主要用来说明conpot的用户定制相关的一些配置. (英文原文详见: https://gith ...
- Flex 仿Winxp左侧菜单
呆毛放出,源码暂时不能公布,一直比较喜欢winxp的左侧菜单样式,以前也用xslt实现过,但总是达不到完美,没想到FLex轻松做到了这一点,几乎和winxp一模一样.
- 跟我学 NHibernate (一)
NHibernate 是一个强大的 ORM 框架,本博文主要就 NHibernate 的使用方法及语法做一些简单的介绍. 1.NHibernate 语法 新建一个类,命名为: QueryCrit ...
- 洛谷P1473 零的数列 Zero Sum
P1473 零的数列 Zero Sum 134通过 170提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 路过的一定帮我看错了我死了- 题目描述 请考虑 ...
- javascript代码复用模式(三)
前面谈到了javascript的类式继承.这篇继续部分类式继承,及一些现代继承. 类式继承模式-代理构造函数 这种模式通过断开父对象与子对象之间原型之间的直接链接关系,来解决上次说到的共享一个原型所带 ...
- .net orm比较之dapper和Entity Framework6的简单测试比较
.net orm比较之dapper和Entity Framework6的简单测试比较