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
2
3
4
ansible_facts.hostname
ansible_facts.fqdn
ansible_facts.default_ipv4.address
ansible_facts.interfaces

禁用收集Fact事实

在Play中添加gather_facts:no

收集目标主机中自定义的Fact

在目标主机的/etc/ansible/facts.d/目录下创建xxxxx.fact文件,在文件中使用json格式自定义目标主机的Fact。

使用魔法变量

一些变量并非事实或通过setup模块配置,但也能由Ansible自动设置。这些魔法变量也可以用于获取与特定受管主机相关的信息。

groups

列出清单中的所有组和主机。

group_names

列出当前受控主机所属的所有组。

inventory_hostname

包含清单中配置的当前受管主机的主机名称。

hostvars

引用其他主机的变量,前提是要引用的主机已经执行过获取Fact操作。

1
2
3
4
5
6
7
8
9
$ ansible all -m debug -a 'var=inventory_hostname'

servera.lab.example.com | SUCCESS => {
"inventory_hostname": "servera.lab.example.com"
}
serverb.lab.example.com | SUCCESS => {
"inventory_hostname": "serverb.lab.example.com"
}