变量(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变量
原文地址:http://www.cnblogs.com/anliven/p/16850555.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性