playbook
1、playbook的功能
playbook是一个由一个或多个play组成的列表
playbook文件使用YAML来写的
2、YAML
简介
是一种表达资料序列的格式,类似于XML
特点:
可读性好
和脚本语言交互性好
易于实现
适用程序执行流梳理方式
可扩展性强
语法简介:
在文件中用[—]开始
在文件中用[…]结束
次行一般书写文件内容
缩进严格,两个缩进
大小写敏感
key/value可以多行书写也可一行书写,一行书写用,隔开
value可以是个字符串,也可是list
一个play需要包括name和tasks
name是描述
tasks是动作
一个name只能包含一个task
扩展名称yml或者yaml
YAML列表
- linux
- java
YAML的字典
字典作用存放键值
name: westos
age: 12
jobs: linux
playbook执行命令
ansible-playbook xxx.yml …
-C|–check #预执行,检测
–syntax-check #检测语法
–list-hosts #检测运行命令的主机
–limit 192.168.1.113 #指定运行的主机
-v #检测实行的过程
#最多三个v
ansible-playbook -C test.yml
ansible-playbook --syntax-check test.yml
ansible-playbook --list-hosts test.yml
ansible-playbook --list-tags test.yml
ansible-playbook --list-tasks test.yml
ansible-playbook --limit 192.168.1.113 test.yml
ansible-playbook test.yml -v
ansible-playbook test.yml -vv
playbook的核心组件
name #可选,建议使用多用于说明
hosts #受控主机列表
tasks #任务
#用于选择执行部分代码
vim设定技巧
autocmd FileType yml setlocal ai ts=2 sw=2 et
#设定后缀为yml的文件tab键缩进两个空格
setlocal #设定当前文件
ai #自动退格对齐
ts #tab键长度为2空格
sw #缩进长度为2
et #把tab键变成空格
ansible-doc firewalld | less #查看firewalld用法
例题:
name.conf文件
named.rfc1912.zones文件
3、变量设定和使用方式
1)在playbook中直接定义变量
2)在文件中定义变量
3)设定主机变量和清单变量
4)目录设定变量
6)使用命令覆盖变量
ansible-playbook test.yml -e “NAME=westos”
7)使用数组设定变量
8)注册变量
register把模块输出注册到指定字符中
9)事实变量
事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息
当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定为采集信息,故被成为事实变量
gether_father: no #在playbook中关闭事实变量
#注意:关闭后事实变量取值可能不正确
10)魔法变量
hostvars: #ansible软件内部信息
group_names #当前受管主机所在组
groups #列出清单里面所有的组和主机
inventory_hostname #包含清单中配置的当前受管主机的名称
ansible localhost -m debug -a ‘var=hostvars’
ansible localhost -m debug -a ‘var=group_names’
ansible localhost -m debug -a ‘var=inventory_hostname’
JINJA2模板
介绍:
jinja2是python下一个被广泛应用的模板引擎
他的设计思想来源于Django的模板引擎
并扩展了其语法和一系列强大的功能
其中最明显的一个是增加了沙箱执行功能和可选的自动转义功能
j2模板书写规则
{# /etc/hosts line #} #注释说明文件用途
127.0.0.1 localhost #文件内容
{{ansbile_facts['all_ipv4_addresses']}} {{ansible_fact['fqdn']}} #引用事实变量
for循环
if判定
loop.index #循环迭代记数从1开始
loop.index0 #循环迭代记数从0开始
例题:显示每个受控主机的主机名和IP号
ansible的加密控制
第一种:
创立加密文件
ansible-vault create westos
查看加密文件
ansible-vault view westos
编辑加密文件
ansible-vault edit westos
加密已经存在文件
ansible-vault encrypt ww.yml
解密加密文件
ansible-vault decrypt ww.yml
第二种:
vim password
查看加密文件
ansible-vault view test.yml --vault-password-file=password
创建加密文件
ansible-vault create haha --vault-password-file=password
加密已经存在的文件
ansible-vault encrypt westos --vault-password-file=password
解密加密文件
ansible-vault decrypt test.yml --vault-password-file=password
解密加密文件并将其输出到westos1中
ansible-vault decrypt haha --vault-password-file=password --output=westos1