1.引用變量
# 變量引用方式
"{{ }}"
2.定義變量 (vars)
- hosts: web
# 定義變量
vars:
- play_var: This_is_play_vars
tasks:
- name: touch new files
file:
# 引用變量
path: "/tmp/{{ play_var }}"
state: touch
3.定義變量文件 (vars_files)
# 定義變量文件 var.yml
# cat var.yml
play_var1: play_var1_sb1
play_var2: play_var2_sb2
# 測試劇本: cat web_test.yml
- hosts: web
#引用變量文件
vars_files:
- ./var.yml
tasks:
- name: touch new files
# 引用變量
file:
name: "/tmp/{{ play_var1 }}"
state: touch
4.主機清單中定義變量 (inventory)
# cat hosts
[web]
172.16.1.7
172.16.1.8
172.16.1.9
# 定義web組的變量,僅web組可使用
[web:vars]
inventory_var=inventory_variables
# 測試劇本: cat web_test.yml
- hosts: web
tasks:
- name: touch new files
file:
path: "/tmp/{{ inventory_var }}"
state: touch
5.定義主機變量 (host_vars)
# 創建主機變量目錄
mkdir host_vars
# 創建主機變量文件
touch host_vars/172.16.1.7
# cat host_vars/172.16.1.7
host_var: host_var172.16.1.7
# cat host_vars/172.16.1.8
host_var: host_var172.16.1.8
6.定義主機組變量 (group_vars)
# 創建組變量目錄
mkdir group_vars
# 創建組變量文件
touch group_vars/web
# cat group_vars/web
group_vars: group_vars_web
# cat web_test.yml
- hosts:
tasks:
- name: touch new files
file:
path: "/tmp/{{ group_vars }}"
state: touch
# 創建所有主機組變量文件
touch group_vars/all
# cat group_vars/all
group_all: group_all_test
# cat web_test.yml
- hosts:
tasks:
- name: touch new files
file:
path: "/tmp/{{ group_all }}"
state: touch
# cat web_test.yml
- hosts: all
tasks:
- name: touch new files
file:
path: "/tmp/{{ extra_vars }}"
state: touch
# 命令行傳參
ansible-playbook web_test.yml -e "extra_vars=123"
8.定義變量的優先級
# 命令行
1. extra
# playbook
2. vars
3. vars_files
# inventory
4. host_vars
5. group_vars
6. group_all
# 可通過debug模塊測試
- hosts: web
tasks:
- name: touch new files
debug:
msg: "{{ extra_vars }}"
9.變量注冊register
- hosts: web
tasks:
- name: Output Nginx Process
shell: ps aux| grep nginx
# 注冊變量
register: nginx_process
- name:
debug:
msg: "{{ nginx_process.stdout_lines }}"
10.核心變量 facts
# 查看ansible可調用系統變量
ansible localhost -m setup
# 調用系統變量,查看系統IP
- hosts: web
tasks:
- name:
debug:
msg: "{{ ansible_eth1.ipv4.address }}"