一姐军、變量規(guī)則
1撵颊、變量的名稱由字母宇攻、下劃線和數(shù)字組成,但是只能以字母開頭
2倡勇、變量不能是關(guān)鍵字
二逞刷、變量類型
- 全局變量
- 劇本變量
- 資產(chǎn)變量
全局變量
1、傳遞key=value的形式
root@zsh-virtual-machine:~# ansible all -i localhost, -m debug -a "msg='my name is {{ name }}'" -e "name=alonzo"
[WARNING]: Found variable using reserved name: name
localhost | SUCCESS => {
"msg": "my name is alonzo"
}
2妻熊、使用yaml或者json的形式(都必須是字典格式)
#json形式
root@zsh-virtual-machine:~# cat test.json
{"name":"alonzo","age":"18"}
root@zsh-virtual-machine:~# ansible all -i localhost, -m debug -a "msg='my name is {{ name }}, age is {{ age }}'" -e "@./test.json"
[WARNING]: Found variable using reserved name: name
localhost | SUCCESS => {
"msg": "my name is alonzo, age is 18"
}
#yaml形式
root@zsh-virtual-machine:~# cat test.yaml
---
name: alonzo
age: 18
root@zsh-virtual-machine:~# ansible all -i localhost, -m debug -a "msg='my name is {{ name }}, age is {{ age }}'" -e "@./test.yaml"
[WARNING]: Found variable using reserved name: name
localhost | SUCCESS => {
"msg": "my name is alonzo, age is 18"
}
劇本變量
此變量和PlayBook有關(guān)夸浅,定義在playbook中的,他們的定義方式有多種扔役,這里介紹兩種最常見的方式
1帆喇、使用key=value的形式
root@zsh-virtual-machine:~# cat test_var.yaml
---
- name: test playbook vars
hosts: all
remote_user: root
vars:
user: alonzo
home: /home/alonzo
tasks:
- name: create the user {{ user }}
user:
name: "{{ user }}"
home: "{{ home }}"
2、使用yaml或者json的形式
root@zsh-virtual-machine:~# cat test_var1.yaml
---
- name: test playbook vars
hosts: all
remote_user: root
vars_files:
- /root/users.yaml
tasks:
- name: create the user {{ user }}
user:
name: "{{ user }}"
home: "{{ home }}"
root@zsh-virtual-machine:~# cat users.yaml
---
user: alonzo1
home: /home/alonzo1
注意:在playbook中變量的使用需要加雙引號(hào)亿胸,否則會(huì)被錯(cuò)誤解析成字典
資產(chǎn)變量
1坯钦、主機(jī)變量
root@zsh-virtual-machine:~# cat hosts
[server]
192.168.100.128 user=alonzo
root@zsh-virtual-machine:~# ansible all -i hosts -m debug -a "msg='name is {{ user }}'"
192.168.100.128 | SUCCESS => {
"msg": "name is alonzo"
}
2、主機(jī)組變量
root@zsh-virtual-machine:~# cat hosts
[servers]
192.168.100.128 user=alonzo
192.168.100.130
[servers:vars]
home="/home/alonzo"
root@zsh-virtual-machine:~# ansible all -i hosts -m "debug" -a "msg='home is {{ home }}'"
192.168.100.128 | SUCCESS => {
"msg": "home is /home/alonzo"
}
192.168.100.130 | SUCCESS => {
"msg": "home is /home/alonzo"
}
注意:主機(jī)變量的優(yōu)先級(jí)大于主機(jī)組變量
3侈玄、變量的繼承
root@zsh-virtual-machine:~# cat hosts
[servers]
192.168.100.128
192.168.100.130
[allservers]
[allservers:children]
servers
[allservers:vars]
user=alonzo
home="/home/alonzo"
root@zsh-virtual-machine:~# ansible all -i hosts -m "debug" -a "msg='name is {{ user }}, home is {{ home }}'"
192.168.100.128 | SUCCESS => {
"msg": "name is alonzo, home is /home/alonzo"
}
192.168.100.130 | SUCCESS => {
"msg": "name is alonzo, home is /home/alonzo"
}
4婉刀、Inventory內(nèi)置變量的說明
內(nèi)置變量基本上都是以ansible_為前綴
ansible_ssh_host #ssh的主機(jī),要連接的主機(jī)與之前設(shè)定的主機(jī)的別名不同可用此變量
ansible_ssh_port #ssh的端口
ansible_ssh_user #ssh的用戶名
ansible_ssh_pass #ssh密碼
ansible_sudo_pass #sudo密碼
ansible_sudo_exe #sudo命令路徑
ansible_ssh_private_key_file #ssh使用的私鑰文件
ansible_python_interpreter #目標(biāo)主機(jī)python的路徑
Facts變量
手動(dòng)收集Facts變量
root@zsh-virtual-machine:~# ansible all -i localhost, -c local -m setup
localhost | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.100.129",
"172.17.0.1"
],
"ansible_all_ipv6_addresses": [
"fe80::ab41:46ea:3769:3734",
"fe80::42:e6ff:fe0c:6607",
"fe80::ac74:1ff:fe93:c02d"
],
"ansible_apparmor": {
"status": "enabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "02/27/2020",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "/boot/vmlinuz-5.4.0-52-generic",
"quiet": true,
"ro": true,
"root": "UUID=2adfa333-b010-4ccd-b3ad-41f5717705ef",
"splash": true
},
"ansible_date_time": {
"date": "2020-11-04",
"day": "04",
"epoch": "1604495082",
"hour": "21",
"iso8601": "2020-11-04T13:04:42Z",
"iso8601_basic": "20201104T210442626327",
"iso8601_basic_short": "20201104T210442",
"iso8601_micro": "2020-11-04T13:04:42.626327Z",
"minute": "04",
"month": "11",
"second": "42",
"time": "21:04:42",
"tz": "CST",
"tz_offset": "+0800",
"weekday": "星期三",
"weekday_number": "3",
"weeknumber": "44",
"year": "2020"
},
"ansible_default_ipv4": {
"address": "192.168.100.129",
"alias": "ens33",
"broadcast": "192.168.100.255",
"gateway": "192.168.100.2",
"interface": "ens33",
"macaddress": "00:0c:29:b3:15:4c",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "192.168.100.0",
"type": "ether"
},
···
···
過濾Facts變量
- 獲取服務(wù)器的內(nèi)存情況
root@zsh-virtual-machine:~# ansible all -i localhost, -m setup -a "filter=*memory*" -c local
localhost | SUCCESS => {
"ansible_facts": {
"ansible_memory_mb": {
"nocache": {
"free": 809,
"used": 3099
},
"real": {
"free": 132,
"total": 3908,
"used": 3776
},
"swap": {
"cached": 7,
"free": 1804,
"total": 2047,
"used": 243
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
- 獲取服務(wù)器的掛載情況
root@zsh-virtual-machine:~# ansible all -i localhost, -m setup -a "filter='*mount*'" -c local
localhost | SUCCESS => {
"ansible_facts": {
"ansible_mounts": [
{
"block_available": 0,
"block_size": 131072,
"block_total": 248,
"block_used": 248,
"device": "/dev/loop6",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 472,
"inode_used": 472,
"mount": "/snap/snapd/9721",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 32505856,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 443,
"block_used": 443,
"device": "/dev/loop0",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 10779,
"inode_used": 10779,
"mount": "/snap/core18/1932",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 58064896,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 3,
"block_used": 3,
"device": "/dev/loop4",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 230,
"inode_used": 230,
"mount": "/snap/gnome-characters/570",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 393216,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 497,
"block_used": 497,
"device": "/dev/loop3",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 62342,
"inode_used": 62342,
"mount": "/snap/gtk-common-themes/1506",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 65142784,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 18,
"block_used": 18,
"device": "/dev/loop8",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 784,
"inode_used": 784,
"mount": "/snap/gnome-system-monitor/148",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 2359296,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 1744,
"block_used": 1744,
"device": "/dev/loop5",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 18513,
"inode_used": 18513,
"mount": "/snap/gnome-3-34-1804/60",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 228589568,
"uuid": "N/A"
},
{
"block_available": 70483722,
"block_size": 4096,
"block_total": 77146320,
"block_used": 6662598,
"device": "/dev/sda1",
"fstype": "ext4",
"inode_available": 19431972,
"inode_total": 19660800,
"inode_used": 228828,
"mount": "/",
"options": "rw,relatime,errors=remount-ro",
"size_available": 288701325312,
"size_total": 315991326720,
"uuid": "2adfa333-b010-4ccd-b3ad-41f5717705ef"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 20,
"block_used": 20,
"device": "/dev/loop2",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 1384,
"inode_used": 1384,
"mount": "/snap/gnome-calculator/826",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 2621440,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 443,
"block_used": 443,
"device": "/dev/loop12",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 10775,
"inode_used": 10775,
"mount": "/snap/core18/1885",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 58064896,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 240,
"block_used": 240,
"device": "/dev/loop11",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 463,
"inode_used": 463,
"mount": "/snap/snapd/8542",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 31457280,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 3,
"block_used": 3,
"device": "/dev/loop10",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 230,
"inode_used": 230,
"mount": "/snap/gnome-characters/550",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 393216,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 2045,
"block_used": 2045,
"device": "/dev/loop9",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 24339,
"inode_used": 24339,
"mount": "/snap/gnome-3-34-1804/36",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 268042240,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 20,
"block_used": 20,
"device": "/dev/loop1",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 1351,
"inode_used": 1351,
"mount": "/snap/gnome-calculator/748",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 2621440,
"uuid": "N/A"
},
{
"block_available": 0,
"block_size": 131072,
"block_total": 8,
"block_used": 8,
"device": "/dev/loop7",
"fstype": "squashfs",
"inode_available": 0,
"inode_total": 355,
"inode_used": 355,
"mount": "/snap/gnome-logs/100",
"options": "ro,nodev,relatime",
"size_available": 0,
"size_total": 1048576,
"uuid": "N/A"
}
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
- 在playbook中使用Facts變量
root@zsh-virtual-machine:~# cat fact.yaml
---
- name: print facts vars
hosts: all
remote_user: root
tasks:
- name: print ip
debug:
msg: "The default IPV4 is {{ ansible_default_ipv4.address }}"
root@zsh-virtual-machine:~# ansible-playbook -i hosts fact.yaml
PLAY [print facts vars] **********************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************
ok: [192.168.100.130]
ok: [192.168.100.128]
TASK [print ip] ******************************************************************************************************************
ok: [192.168.100.128] => {
"msg": "The default IPV4 is 192.168.100.128"
}
ok: [192.168.100.130] => {
"msg": "The default IPV4 is 192.168.100.130"
}
PLAY RECAP ***********************************************************************************************************************
192.168.100.128 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.100.130 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 關(guān)閉playbook中facts變量獲取
root@zsh-virtual-machine:~# cat fact.yaml
---
- name: print facts vars
hosts: all
remote_user: root
gather_facts: no
tasks:
- name: test
shell: ls /root
root@zsh-virtual-machine:~# ansible-playbook -i hosts fact.yaml
PLAY [print facts vars] **********************************************************************************************************
TASK [test] **********************************************************************************************************************
changed: [192.168.100.130]
changed: [192.168.100.128]
PLAY RECAP ***********************************************************************************************************************
192.168.100.128 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.100.130 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
注冊(cè)變量
用于保存一個(gè)task任務(wù)的執(zhí)行結(jié)果序仙,以便于做進(jìn)一步的處理
注冊(cè)變量在playbook中通過register關(guān)鍵字去實(shí)現(xiàn)
root@zsh-virtual-machine:~# cat fact.yaml
---
- name: print facts vars
hosts: all
remote_user: root
gather_facts: no
tasks:
- name: test
shell: ls /root
register: check
- name: print check
debug: var=check.stdout
root@zsh-virtual-machine:~# ansible-playbook -i hosts fact.yaml
PLAY [print facts vars] **********************************************************************************************************
TASK [test] **********************************************************************************************************************
changed: [192.168.100.130]
changed: [192.168.100.128]
TASK [print check] ***************************************************************************************************************
ok: [192.168.100.128] => {
"check.stdout": "aaa.txt\ninstall_docker.sh"
}
ok: [192.168.100.130] => {
"check.stdout": "aaa.txt"
}
PLAY RECAP ***********************************************************************************************************************
192.168.100.128 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.100.130 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
變量?jī)?yōu)先級(jí)
全局變量 > 劇本變量 > 資產(chǎn)變量