1.变量命名
只能包含数字,字母和下划线
只能用下划线或字母开头
2.变量级别
全局变量:从命令行或配置文件中设定
play变量:在play和相关结构中设定的
主机变量:由清单,事实收集或注册的任务
变量优先级设定:
狭窄范围有限与广域范围
3.变量设定和使用方式
1)在playbook中直接定义变量
2)在文件中定义变量
3)使用变量
4)设定主机变量和清单变量
在定义主机变量和清单变量时使用
vim inventory
5)目录设定变量
vim inventory
清单变量
目录中的文件名称与主机清单名称一致
主机变量
目录中的文件名称与主机名称一致
rm -rf groups_vars
目录名称建立错误
mv hosts_vars host_vars
6)用命令覆盖变量
用-e的方式指定变量
7)使用数组设定变量
vim user.yml
vim show_user.yml
vim user.yml
vim show_user.yml
8)注册变量
register把模块输出注册到指定字符串中
变量应用实例项目
需求:
建立用户user1,uid=8888,密码为user1123
建立用户user2,uid=9999,密码为user2123
vim user_list.yml
vim create_users.yml
建立成功
9)事实变量
事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息
当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被称为事实变量
ansible all -m setup | less
#查看事实变量
vim westos.yml
gather_facts: no
#在playbook中关闭事实变量收集
逐层书写
10)魔法变量
hostvars
#ansible软件的内部信息
ansible all -m debug -a "var=hostvars"
若想采集详细信息,逐层书写即可
group_names
#当前受控主机所在组
ansible all -m debug -a "var=group_names"
groups
#列出清单中所有的组和主机
ansible all -m debug -a "var=groups"
inventory_hostname
#包含清单中配置的当前受管主机的名称
ansible all -m debug -m "var=inventory_hostname"
4.jinja2模板的书写及使用规则
介绍
Jinja2是Python下一个被广泛应用的模板引擎
他的设计思想来源于Django的模板引擎
并扩展了其语法和一系列强大的功能
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能
书写规则
vim test.j2
vim j2.yml
for循环
vim j2.yml
vim test.j2
loop.index
#循环迭代记数从1开始
loop.index0
#循环迭代记数从0开始
vim j2.yml
if判定
vim test.j2
vim test.j2
vim j2.yml
jinja2模板实例
在受控主机中生成/mnt/hosts
内容为:
ip 主机名
vim hosts.j2
vim j2.yml
5.ansible中对文件加密
加密现有文件
ansible-vault encrypt file
查看加密文件
ansible-vault view file
ansible-vault view --vault-password-file=passfile user.yml
#将密码记录在passfile文件里
编辑加密文件
ansible-vault edit file
ansible-vault edit --vault-password-file=passfile user.yml
#将密码记录在passfile文件,直接编辑
更改密码
ansible-vault rekey user.yml
ansible-vault rekey user.yml --new-vault-password-file=key1
解密文件
ansible-vault decrypt user.yml --output=user1.yml
#文件解密保存为user1.yml
ansible-vault decrypt user.yml
#永久解密文件
创建加密文件
ansible-vault create westosfile