Ansible 变量和事实
变量和事实
如何定义变量、在Playbook中使用使用变量、加密敏感变量、Fact事实、魔法变量。
变量的定义
变量可以在很多地方定义,他们的作用域也是不同的。
1、playbook中定义:vars
2、playbook中使用变量文件
3、在当前目录的host_vars/group_vars目录下定义变量文件(针对灵活、大型的playbook适用)
4、运行playbook时,在命令行中使用-e选项来使用变量,这种方式的优先级最高,会覆盖以上所有相同名字的变量属性。
变量的使用
在playbook中,使用"{{ var_name }}"
来引用变量。
register寄存器
使用寄存器可以将上一次的执行结果存储到新的变量中,用于下一次使用。
使用vault加密变量
当有一些敏感变量,比如密码等信息你应该是不想使用明文存储到变量文件。
ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]
使用ansible-vault可以对变量文件进行加密,在执行playbook的时候通过输入密码或者使用密钥文件来对加密好的变量进行解密。
如何运行引用了加密变量的playbook
ansible-playbook --ask-vault-pass/--valut-password-file=vault-pass playbook.yml
使用Fact事实
Fact事实是在我们运行ansible-playbook时自动收集对应主机的基本信息的变量。
常用的fact事实
1 | ansible_facts.hostname |
禁用收集Fact事实
在Play中添加gather_facts:no
收集目标主机中自定义的Fact
在目标主机的/etc/ansible/facts.d/
目录下创建xxxxx.fact文件,在文件中使用json格式自定义目标主机的Fact。
使用魔法变量
一些变量并非事实或通过setup模块配置,但也能由Ansible自动设置。这些魔法变量也可以用于获取与特定受管主机相关的信息。
groups
列出清单中的所有组和主机。
group_names
列出当前受控主机所属的所有组。
inventory_hostname
包含清单中配置的当前受管主机的主机名称。
hostvars
引用其他主机的变量,前提是要引用的主机已经执行过获取Fact操作。
1 | $ ansible all -m debug -a 'var=inventory_hostname' |