目录
[Ansible Facts是什么](#Ansible Facts是什么)
Ansible Facts是什么
- facts组件是Ansible用于采集被管理机器设备信息的一个功能
- 用于采集的被控节点的设备信息
- 主要包含IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等
- facts变量可以理解为Ansible中的预定义变量
- facts对我们是很有帮助的,省去了我们好多工作,大大提高了工作效率
查看Facts变量
-
使用setup模块,用于获取所有facts信息
常用参数
filter:用于过滤指定信息
样例
通过setup模块查看所有facts信息
[root@pubserver ~]# cd /root/ansible/
[root@pubserver ansible]# ansible webservers -m setupfacts变量是一个大的由{}构成的键值对字典
在{}中,有很多层级的嵌套。可以通过参数过滤出第一个层级的内容
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_all_ipv4_addresses"
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_bios_version"
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_memtotal_mb"
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_hostname"
[root@pubserver ansible]# ansible webservers -m setup -a "filter=ansible_mem*"
剧本中使用facts变量
-
剧本中可以使用debug模块打印变量信息
-
剧本中默认有Gathering Facts的任务,收集到Facts信息后可以使用该模块打印
-
剧本中调用变量格式:{{ 变量名 }}
常用参数
msg:打印变量值,格式为:{{ 变量名 }} var:打印变量值,格式为:变量名
样例
命令行
[root@pubserver ansible]# ansible webservers -m debug #默认返回值为"Hello World!"
剧本
[root@pubserver ansible]# vim debug1.yml
- name: test debug
hosts: webservers
tasks:- name: test debug msg
debug:
msg: "hostname: {{ ansible_hostname }}; mem: {{ ansible_memtotal_mb }}"
[root@pubserver ansible]# ansible-playbook debug1.yml
- name: test debug msg
#扩展用法
[root@pubserver ansible]# vim debug2.yml- name: test debug
hosts: webservers
tasks:- name: test debug var
debug:
var: ansible_hostname, ansible_bios_version
[root@pubserver ansible]# ansible-playbook debug2.yml
- name: test debug var
- name: test debug
Ansible中的自定义变量
通过变量的使用可以让剧本更加灵活,多次运行剧本的时候只需要调整变量名即可
Ansible支持十几种变量定义方式
Ansible变量定义的位置,下列变量优先级从低到高
- role defaults :roles defaults目录下的变量
- inventory vars:inventory文件中定义的变量
- inventory group_vars:inventory文件组的变量
- inventory host_vars:inventory文件主机的变量
- playbook group_vars:剧本中组的变量
- playbook host_vars:剧本中主机的变量
- host facts:事实变量
- play vars:vars定义的变量
- play vars_prompt:vars_prompt定义的变量
- play vars_files:vars_files导入的变量
- registered vars:注册变量
- role and include vars:roles中单独定义的及导入的变量
- block vars (only for tasks in block):block中定义的变量
- task vars (only for the task):任务中定义的变量
- extra vars (always win precedence):命令行指定的变量
Ansible变量测试
-
主机清单变量
在inventory文件中定义变量
主机变量
[root@pubserver ansible]# vim inventory
[webservers]
web[1:2][dbs]
db1 username="liubei" #定义属于db1主机的变量[cluster:children]
webservers
dbs
[root@pubserver ansible]# vim var1.yml- name: create user with host vars
hosts: db1
tasks:- name: test host vars
user:
name: "{{ username }}"
state: present
[root@pubserver ansible]# ansible-playbook var1.yml #运行剧本
[root@pubserver ansible]# ansible db1 -a "id liubei" #测试结果
db1 | CHANGED | rc=0 >>
uid=1000(liubei) gid=1000(liubei) groups=1000(liubei)
[root@pubserver ansible]#
- name: test host vars
组变量
[root@pubserver ansible]# vim inventory
[webservers]
web[1:2][dbs]
db1 username="liubei"[cluster:children]
webservers
dbs[webservers:vars] #定义属于组的变量,:vars是固定格式
username="guanyu"
[root@pubserver ansible]# vim var2.yml- name: create user with group vars
hosts: webservers
tasks:- name: test group vars
user:
name: "{{ username }}"
state: present
[root@pubserver ansible]# ansible-playbook var2.yml #运行剧本
[root@pubserver ansible]# ansible webservers -a "id guanyu" #验证结果
web1 | CHANGED | rc=0 >>
uid=1041(guanyu) gid=1041(guanyu) groups=1041(guanyu)
web2 | CHANGED | rc=0 >>
uid=1041(guanyu) gid=1041(guanyu) groups=1041(guanyu)
- name: test group vars
- name: create user with host vars
-
剧本变量
在Playbook中定义变量
变量矩阵
[root@pubserver ansible]# vim var3.yml
- name: create user with play vars
hosts: webservers
vars: #剧本中定义变量
username: "zhangfei" #定义变量
password: "123456" #定义变量,数字作为密码必须用引号,表示字符串
tasks:- name: test play vars
user:
name: "{{ username }}"
password: "{{ password|password_hash('sha512')}}"
state: present
[root@pubserver ansible]# ansible-playbook var3.yml
- name: test play vars
变量文件
[root@pubserver ansible]# vim fvars.yml
username: "lvbu"
password: "654321"
[root@pubserver ansible]# vim var4.yml- name: create user with vars files
hosts: webservers
vars_files: fvars.yml #调用定义变量的文件
tasks:- name: test vars file
user:
name: "{{ username }}"
password: "{{ password | password_hash('sha512')}}"
state: present
[root@pubserver ansible]# ansible-playbook var4.yml #运行剧本
[root@pubserver ansible]# ansible webservers -a "id lvbu" #验证结果
web2 | CHANGED | rc=0 >>
uid=1043(lvbu) gid=1043(lvbu) groups=1043(lvbu)
web1 | CHANGED | rc=0 >>
uid=1043(lvbu) gid=1043(lvbu) groups=1043(lvbu)
- name: test vars file
- name: create user with play vars
-
Facts变量
调用Facts变量
一定要开启Facts信息收集,gather_facts: yes
[root@pubserver ansible]# vim var5.yml
- name: copy file with facts
hosts: webservers
tasks:- name: use facts
copy:
content: "hostname: {{ ansible_hostname }}\nbios_version: {{ ansible_bios_version }}"
dest: /tmp/facts.txt
[root@pubserver ansible]# ansible-playbook var5.yml
[root@pubserver ansible]# ansible webservers -a "cat /tmp/facts.txt"
web2 | CHANGED | rc=0 >>
hostname: web2
bios_version: rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org
web1 | CHANGED | rc=0 >>
hostname: web1
bios_version: rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org
- name: use facts
- name: copy file with facts