变量命名
只能包含数字,下划线,字母
只能用下划线或字母开头
变量级别
全局:从命令行或配置文件中设定的
play:在play和相关结构中设定的
主机:由清单,事实或注册的任务
变量优先级:狭窄范围与广域范围
变量设定和使用方式
在playbook中直接定义变量
编写playbook
vim user.yml
在文件中定义变量
定义变量
vim userlist
vim user.yml
设定主机变量和清单变量
在定义主机变量和清单变量时使用
vim inventory
vim user.yml
## 目录设定变量
mkdir group_vars
mkdir host_vars
vim group_vars/list2
vim user.yml
vim host_vars/172.25.2.254
vim user.yml
如果多个文件都存在统一个变量会按照读取顺序,最后读取的变量会覆盖前边的
## 使用命令覆盖变量
vim user.yml
ansible-playbook user.yml
ansible-playbook user.yml -e “user=linux”
使用数组设置变量
vim user_var.yml
vim user.yml
注册变量
register把模块输出注册到指定字符中
vim hostname.yml
vim showrc.yml
运行,这是playbook执行信息
将这些信息用变量表示 (ignore_errors=yes表示前边的play运行失败后边的也可以运行,默认为no)
运行
删除nod1中的/mnt/file运行
ansible nod1.westos.com -m file -a ‘path=/mnt/file state=absent’
ansible-playbook file.yml
可以看到虽然已经运行失败但还是运行了下去
事实变量
事实变量是ansible在受控主机中自动检测出的变量
事实变量中含有与主机相关的信息
当需要使用主机相关信息时不需要采集赋值,直接调用即可,因为变量信息为系统信息所以不能随意设定仅为采集信息,故而被成为事实变量
例如查看ip
vim ip.yml
playbook练习
采集nod1.westos.com 受控主机的ip,主机名,内存,并保存到/mnt/host中
vim vhost.yml
运行并查看
模板变量
hostvars:ansible软件的内部信息
group_names:当前受管主机所在组
groups:列出清单中所有的组和主机
inventory_hostname:包含清单中配置的当前受管主机的名称
JINJA2模板
Jinja2是Python下一个被广泛应用的模板引擎
他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其中最显著的一个是增加了沙箱执行功能和可选的自动转译功能
J2模板书写规则
例如写一个地址解析
for循环
vim user.yml
vim users.j2
vim user.yml
运行并查看
练习
采集所有受控主机的ip和主机名并保存到受控主机的/mnt/host
vim host.j2
vim host.yml
运行并查看
if判断
编写实验playbook
vim user_messages.yml
vim user_messages.j2
vim user_messages.yml
运行并查看
Ansible中的加密控制
创建建立文件
ansible-vault create westos
查看
使用ansible查看并输入密码
ansible-vault view westos
文件包含密码
vim westos-vault
ansible-vault create --vault-password-file=westos-vault westos
查看(使用westos-vault中写入的字符串作为密码)
ansible-vault view --vault-password-file=westos-vault westos
加密现有文件
vim westos.yml
ansible-vault encrypt westos.yml
查看
使用ansible输入密码查看
编辑加密文件(注意缩进)
ansible-vault edit westos.yml
使用ansible查看
文件密码编辑
ansible-vault edit --vault-password-file=westos-vault westos
使用ansible查看
解密文件
ansible-vault decrypt westos
解密加密文件变成另外一个文件,原文件不变
ansible-vault decrypt westos.yml --output=linux.yml
更改密码
ansible-vault rekey westos.yml
文件更改密码
ansible-vault rekey westos.yml --new-vault-password-file=key1(需要编辑key1文件写入密码)
加密文件运行
文件加密后只用playbook命令无法运行
ansible-playbook westos,yml --ask-vault-pass