ansible--playbook
ansible-playbook
1、playbook书写规则
playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务。功能相当于shell脚本。
Playbook核心元素:
Hosts 执行的远程主机列表
Tasks 任务集
Varniables 内置变量或自定义变量在playbook中调用
Templates 模板,即使用模板语法的文件,比如配置文件等
Handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。
ansible-playbook ping.yml #运行
ansible-playbook --syntax-check ping1.yml #检查语法错误
ansible-playbook --check ping1.yml #模拟运行,如果有依赖前面结果的会报错
(1)handler作用:幂等性,若上面已经存在不需要执行则notify对应的handler内容不会执行。若handler存在多个时,顺序与handler在playbook中的定义是相同的,与notify定义内容顺序无关相同。
handler默认等所有的test内容执行完毕后在执行,
- meta: flush_handlers #执行一个test立马handler
notify中一次性多个handler
notify: group1
listen: group1
(2)标签分类部分执行
tags: t1
tags:
- t1
tags: ['t1']
ansible-playbook --tags=t2 tag1.yml #只执行t2标签内容
ansible-playbook --skip-tags=t2 tag1.yml #不执行t2标签其他全部执行
ansible-playbook --list-tags tag1.yml #列出标签
内置标签:
tags: t3,always/nerver(相反) #一直执行,除非指定不执行
ansible-playbook --skip-tags=always tag1.yml #只有这样才能不执行
还可以调用时使用tagged(只执行有标签的任务,有skip为跳过标签任务)、untagged(只执行没有标签的任务,always不算)、all(不用指定默认执行所有标签)
(3)ansible变量
一 变量的命名规范
变量的命名应该符如下合两个规范:
变量应该由字母、数字、下划线组成
变量应该以字母开头
二、变量的作用域可以分为四种:
作用于全局的变量
作用于play的变量
作用于task的变量
作用于host的变量
1 playbook中的变量
vars语句定义全局变量
vars: #定义
testvar1: testfile
vars: #定义
- testvar1: testfile
file: path=/testdir/{{testvar1}} #调用
vars: #定义
mkdir:
testvar1: testfile2
testvar2: testfile2
file: path=/testdir/{{mkdir.testvar1}} #调用
file: path=/testdir/{{mkdir['testvar1']}} #调用
vars_files:
在playbook中引入包含变量的文件时,需要使用”vars_files“关键字,被引入的文件需要以”-“开头,
vars_files:
- /testdir/ansible/nginx_vars.yml
2、setup模块
TASK [Gathering Facts]
默认调用setup模块应用获取远程主机信息首先执行,会将结果保存在变量中
ansible testB -m setup #返回远程主机信息
ansible testB -m setup -a "filter=*mb*" #只返回指定信息
自定义信息(被管主机):
[aaa@qq.com facts.d]# pwd
/etc/ansible/facts.d #自定义信息必须目录
调用:
ansible testB -m setup -a "filter=ansible_local" #最好放到默认目录下
ansible testB -m setup -a "fact_path=/testdir"
3、debug模块
上一篇: 在线文档怎么使用提高效率
推荐阅读