1 ansible变量的作用
主要用于保存Ansible运维操作中所需使用的信息
通过对变量值的更改或者变量值的读取,可以对Ansible运维操作进行灵活的管控
一方面能提升运维的自动化程度,另一方面也能实现更为复杂的运维功能
2 Ansible变量的类型
inventory变量(主机与主机组)
task任务变量
play变量
register注册变量
facts主机信息变量
命令行变量
3 Ansible变量的使用
在ad hoc命令行的模块参数中使用:{{变量名}}
在playbook中使用:在任务的模块参数中使用: {{变量名}}
inventory变量——在主机清单文件中定义
1)inventory主机变量
针对主机的变量,不同主机的变量值可以不同
2)inventory主机组变量
主机组中所有主机共享的变量
task变量——在任务中定义的变量
定义方式
在任务中使用vars键值对
vars:
变量1: 值1
变量2: 值2
…
变量N:值N
4 play变量——在某一play中定义的变量
定义方式
1)通过vars键值对定义变量
vars:
变量1: 值1
变量2: 值2
…
变量N:值N
2)通过外部文件定义变量,并将变量引入play中
vars_files:
- 外部文件的路径列表
注:外部文件也是yml文件,并且其中只包含了变量的定义
变量存储数据的类型
整型(int)
浮点型(float)
布尔型(bool)
字符串
列表
字典
5 facts变量
facts信息:由ansible setup模块获得的远程主机的信息
facts变量:用于保存facts信息的变量,称为 facts变量
默认情况下,在play中的任务执行之前,ansible会自动收集远程主机的facts信息,并存放在相应facts变量中
facts变量由ansible自动创建,通常情况下无需手动定义facts变量
访问ansible_facts变量
方法1:通过点号引用
ansible_facts.键名
方法2:通过[ ]引用(推荐)
ansible_facts[ '键名' ]
eg1:
---
- hosts: group1
tasks:
- name: show memory
debug:
msg: "{{ansible_facts['memory_mb']['real']['total']}}"
#显示被管理主机的实际内存大小
eg2:
---
- hosts: group1
tasks:
- name: show uptime
debug:
msg: "{{ansible_facts['uptime_seconds']}}"
#显示主机的运行时间
6 register变量
register变量用于保存当前任务的执行结果,变量在任务中定义
---
- name: task任务的描述性信息
模块名: 模块参数
register: 变量名
eg:
---
- hosts: group1
tasks:
- name: show register variable value
ping:
register: result
- name: show result
debug:
msg: "{{result}}"
#把ping执行结果保存在保存在result中,并通过debug显示
7 命令行变量
通过ansible-playbook命令定义与传递变量
ansible-playbook -e “变量1=值1 变量2=值2 …”
eg:
---
- name: play 1
hosts: group1
tasks:
- name: show task variable
debug:
msg: "{{service}} is {{state}}"
#playbook中定义service 和 state变量名
ansible-playbook test.yml -i myhosts -e "service=vsftpd state=stopped"
#命令行传参直接把值赋给变量名
8 变量的作用域
全局作用域——在playbook的任何位置都能够访问该变量
命令行变量具有全局作用域
Host作用域——该变量能够被对应主机的所有相关任务访问(这些任务可以是属于不同play的)
Inventory主机变量/注册变量/facts变量
Play作用域——变量只能被其所在的play访问
Play变量具有Play作用域
task作用域——变量只能被其所在的task访问
task变量具有task作用域
9 变量的优先级
通常情况下,作用域越小的变量,优先级越高
当两个变量的变量名相同时,优先级低的变量会被优先级高的变量覆盖
10 变量引用的注意事项
采用键值对形式提供模块参数时,如果键值对冒号:后面紧跟着对变量的引用,则必须使用双引号或单引号将参数的值整个包含起来