变量(variable)
- Ansible的变量名仅能由字母、数字和下划线组成,且只能以字母开头。
- Python关键字和playbook关键字都不能作为有效的变量名。
- Ansible的变量可以被定义在playbook、inventory、yaml格式文件、角色和命令行中,也可以将任务的输出定义为变量。
自定义变量
# 方式1:在Inventory中为主机或组定义专用变量
[groupname]
192.168.56.1 variable_name=value
[groupname:vars]
variable_name=value
[all:vars]
ansible_ssh_port="2222"
# 方式2:在playbook中通过关键字vars或vars_files定义变量
vars:
- var_name: value
- var_name: value
vars_files:
- ./external_vars.yml # 变量文件内容遵循yml格式
# 方式3:在playbook中把任务的输出通过关键字register定义为变量,然后用于其他任务
tasks:
- name: test
shell: /usr/bin/foo
register: foo_result
# 方式4:在playbook中使用变量,执行palybook时通过命令行传递变量,通过“-e”或“--extra-vars”参数传递的变量优先级更高
ansible-playbook test.yml --extra-vars "hosts=Test user=anliven"
# 方式5:指定主机角色时通过 roles 传递变量,并在角色内通过` var_name `调用
roles:
- { role: ROLE_NAME, var: value, ...}
系统变量
# 远程主机的系统信息统称为facts
# facts信息是JSON格式的数据结构,ansible_facts是最上层,可以使用 ansible_facts 变量查看所有内容
# 此外默认情况下使用 ansible_ 前缀可以将一些fact作为顶级变量访问
# 通过 setup 模块可以查看指定主机的所有facts信息,通过使用filter参数来查看指定信息
ansible <host> -m setup # 查看指定主机的facts信息
ansible ta -m setup | grep "xxx" # 获取主机所有facts然后结合grep命令过滤
ansible ta -m setup -a "filter=ansible_os_family" # 通过filter参数来查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts # 通过filter参数查看指定信息并按主机名保存到facts目录
引用变量
# 普通变量
通过 {{ var_name }} 方式引用
# 关键字register或系统fact变量
- 返回结果集通常是嵌套yaml或者json的数据结构
- 通过 {{ var_name.stdout }} 或 {{ ansible_facts["eth0"]["ipv4"]["address"] }} 的方式引用
变量优先级
# 优先级
1. 命令行中定义的变量(用-e或--extra-vars定义的变量)
2. 在Inventory中定义的连接变量(比如:ansible_ssh_user)
3. 普通变量(命令行转换、play中的变量、included的变量、role中的变量等)
4. 在Inventory中定义的其他变量
5. Facts变量
标签:变量,vars,ansible,Ansible,playbook,使用,facts,name From: https://www.cnblogs.com/anliven/p/16850555.html