一.ansible变量一.ansible变量1.Ansible中的facts变量2.Ansible中的自定义变量1.Ansible中的facts变量(1)Facts变量是什么:facts变量可以理解为Ansible中的预定义变量(自带变量{{ ansible_hostname }}等)用于采集的被控节点的设备信息主要包含IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等(2)查看Facts变量使用setup模块,用于获取所有facts信息ansible web1 -m setup | less(3)剧本中使用facts变量剧本中调用变量格式:{{ 变量名 }}剧本中可以使用debug模块打印变量信息剧本中默认有Gathering Facts的任务,收集到Facts信息后可以使用该模块打印2.Ansible中的自定义变量(优先级从低到高)Ansible支持十几种变量定义方式Ansible变量定义的位置,下列变量优先级从低到高roles defaults目录下的变量-inventory文件中定义,主机的变量-inventory文件,组的变量inventory文件主机的变量-play剧本中组的变量play剧本中主机的变量-facts事实变量vars定义的变量vars_prompt定义的变量vars_files导入的变量注册变量roles中单独定义的及导入的变量block中定义的变量任务中定义的变量命令行指定的变量-常用变量:(优先级低到高)(1)inventory清单文件中单主机的变量(读取到该主机的时候读取变量)(2)inventory清单文件主机组的变量(读取到该组的时候读取)(3)play剧本中定义的变量 (4)".yml"变量文件定义的变量(其它剧本也可使用)vars_files: fvars.yml(5)facts事实变量(1)inventory清单文件中定义单主机的变量(读取到该主机的时候读取变量)[dbs]db1 username="liubei" #定义属于db1主机的变量---- name: create user with host varshosts: db1tasks:- name: test host varsuser:name: "{{ username }}" 前面没东西必须加双引号state: present(2)inventory清单文件组的变量(读取到该组的时候读取)[webservers:vars] #定义属于组的变量,:vars是固定格式username="guanyu"(3)play剧本中组的变量---- name: create user with play varshosts: webserversvars: #剧本中定义变量username: "zhangfei" #定义变量password: "123456" #定义变量,数字作为密码必须用引号,表示字符串tasks:- name: test play varsuser:name: "{{ username }}"password: "{{ password|password_hash('sha512')}}"state: present(4)".yml"变量文件定义变量(其它剧本也可使用)[root@pubserver ansible]# vim fvars.yml---username: "lvbu"password: "654321"---- name: create user with vars fileshosts: webserversvars_files: fvars.yml #调用定义变量的文件tasks:- name: test vars fileuser:name: "{{ username }}" password: "{{ password | password_hash('sha512')}}"(5)facts事实变量[root@pubserver ansible]# vim var5.yml---- name: copy file with factshosts: webserverstasks:- name: use factscopy:content: "hostname: {{ ansible_hostname }}"dest: /tmp/facts.txt
一.ansible变量
1.Ansible中的facts变量
2.Ansible中的自定义变量
1.Ansible中的facts变量
(1)Facts变量是什么:
facts变量可以理解为Ansible中的预定义变量(自带变量{{ ansible_hostname }}等)
用于采集的被控节点的设备信息
主要包含IP地址、操作系统、以太网设备、mac 地址、时间/日期相关数据,硬件信息等
(2)查看Facts变量
使用setup模块,用于获取所有facts信息
ansible web1 -m setup | less
(3)剧本中使用facts变量
剧本中调用变量格式:{{ 变量名 }}
剧本中可以使用debug模块打印变量信息
剧本中默认有Gathering Facts的任务,收集到Facts信息后可以使用该模块打印
2.Ansible中的自定义变量(优先级从低到高)
Ansible支持十几种变量定义方式
Ansible变量定义的位置,下列变量优先级从低到高
roles defaults目录下的变量
-inventory文件中定义,主机的变量
-inventory文件,组的变量
inventory文件主机的变量
-play剧本中组的变量
play剧本中主机的变量
-facts事实变量
vars定义的变量
vars_prompt定义的变量
vars_files导入的变量
注册变量
roles中单独定义的及导入的变量
block中定义的变量
任务中定义的变量
命令行指定的变量
-常用变量:(优先级低到高)
(1)inventory清单文件中单主机的变量(读取到该主机的时候读取变量)
(2)inventory清单文件主机组的变量(读取到该组的时候读取)
(3)play剧本中定义的变量
(4)".yml"变量文件定义的变量(其它剧本也可使用)vars_files: fvars.yml
(5)facts事实变量
(1)inventory清单文件中定义单主机的变量(读取到该主机的时候读取变量)
[dbs]
db1 username="liubei" #定义属于db1主机的变量
---
- name: create user with host vars
hosts: db1
tasks:
- name: test host vars
user:
name: "{{ username }}" 前面没东西必须加双引号
state: present
(2)inventory清单文件组的变量(读取到该组的时候读取)
[webservers:vars] #定义属于组的变量,:vars是固定格式
username="guanyu"
(3)play剧本中组的变量
---
- 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
(4)".yml"变量文件定义变量(其它剧本也可使用)
[root@pubserver ansible]# vim fvars.yml
---
username: "lvbu"
password: "654321"
---
- 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')}}"
(5)facts事实变量
[root@pubserver ansible]# vim var5.yml
---
- name: copy file with facts
hosts: webservers
tasks:
- name: use facts
copy:
content: "hostname: {{ ansible_hostname }}"
dest: /tmp/facts.txt