1.什么是變量?
以一個(gè)固定的字符串,表示一個(gè)不固定的值 version: 1.12
2.定義變量?
1.在playbook中定義變量?
- vars 關(guān)鍵字
[root@manager project1]# cat f2.yml
- hosts: webservers
vars:
- file_name: playbook_vars
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
-
vars_file 屬于一種共享的方式
image.png
[root@manager project1]# cat vars_file.yml
web_packages: httpd
ftp_packages: vsftpd
[root@manager project1]# cat f2.yml
- hosts: webservers
vars:
- file_name: playbook_vars
#調(diào)用共享vars_file文件,只不過(guò)剛好文件名叫vars_file
vars_files: ./vars_file.yml
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
- name: Installed Packages {{ web_packages }}
yum:
name: "{{ web_packages }}"
state: present
2.在inventory主機(jī)清單中定義變量?
- 1.清單文件中直接定義 hosts文件定義
[webservers]
172.16.1.7
172.16.1.8
[webservers:vars]
file_name=hostsfile_group_vars
- 2.創(chuàng)建hosts_vars group_vars 目錄
[root@manager project1]# mkdir hosts_vars #單個(gè)主機(jī)
[root@manager project1]# mkdir group_vars #主機(jī)組
1.單個(gè)主機(jī)定義和使用方式 (host_vars能分別對(duì)不同的主機(jī)定義變量)
[root@manager project1]# cat host_vars/172.16.1.7
host_vars_name: 172.16.1.7
[root@manager project1]# cat host_vars/172.16.1.8
host_vars_name: 172.16.1.8
[root@manager project1]# cat f4.yml
- hosts: webservers
tasks:
- name: Create New File
file:
path: /opt/{{ host_vars_name }}
state: touch
2.針對(duì)主機(jī)組定義的方式
#給指定的webserver組設(shè)定變量.其他組主機(jī)無(wú)法使用該變量
[root@manager project1]# cat group_vars/webservers
group_host_vars: webservers
[root@manager project1]# cat f5.yml
- hosts: webservers
tasks:
- name: Create New File {{ group_host_vars }}
file:
path: /opt/{{ group_host_vars }}
state: touch
3.針對(duì)主機(jī)組定義的方式 (給所有的主機(jī)和主機(jī)組設(shè)定變量)
[root@manager project1]# cat group_vars/all
group_host_vars: all
[root@manager project1]# cat f5.yml
- hosts: webservers
tasks:
- name: Create New File {{ group_host_vars }}
file:
path: /opt/{{ group_host_vars }}
state: touch
- 3.通過(guò)外置傳參定義變量? -e
[root@manager project1]# ansible-playbook -i hosts f6.yml -e "web_vars=123"
3.變量沖突,優(yōu)先級(jí)?
定義相同的變量不同的值,來(lái)測(cè)試變量的優(yōu)先級(jí)。操作步驟如下 file_name:
??1)在plabook中定義vars變量
??2)在playbook中定義vars_files變量
??3)在inventory主機(jī)定義變量
??4)在inventory主機(jī)組定義變量
??5)在host_vars中定義變量
??6)在group_vars中定義變量 組 all組
??7)通過(guò)執(zhí)行命令傳遞變量
?
?
優(yōu)先級(jí)測(cè)試:
外置傳入?yún)?shù)優(yōu)先級(jí)最高 (e)
---> playbook ( vars_files(共享)
---> vars(私有) )
---> host_vars
---> group_vars/group_name
---> group_vars/all
4.變量注冊(cè)
[root@manager project1]# cat f8.yml
- hosts: webservers
tasks:
# System_Status=$(netstat -lntp)
- name: Get Network Status
shell: netstat -lntp | grep "nginx"
register: System_Status
# echo "$System_Status"
- name: Debug output Variables
debug:
msg: "{{ System_Status.stdout_lines }}"
5.facts變量
1.根據(jù)主機(jī)的cpu信息,生成不同的配置.
A: 1核心 work_process 1;
B: 2核心 work_process 2;
2.根據(jù)主機(jī)名稱設(shè)定不同配置文件
zabbix_agent
Server: ===> 指向172.16.1.61
Hostname: web01 web02
[root@manager project1]# cat ./file/zabbix_agent.conf.j2
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_hostname }}
[root@manager project1]# cat f11.yml
- hosts: webservers
vars:
- zabbix_server_ip: 172.16.1.61
tasks:
- name: Configure zabbix-agent.conf
template:
src: ./file/zabbix_agent.conf.j2
dest: /tmp/zabbix-agent.conf
3.根據(jù)主機(jī)的內(nèi)存生成不同的配置文件,memcached
[root@manager project1]# cat f12.yml
- hosts: webservers
tasks:
- name: Installed Memcached Server
yum:
name: memcached
state: present
- name: Configure Memcached Server
template:
src: ./file/memcached.j2
dest: /etc/sysconfig/memcached
notify: Restart Memcached Server
- name: System Memcached Server
systemd:
name: memcached
state: started
enabled: yes
handlers:
- name: Restart Memcached Server
systemd:
name: memcached
state: restarted
[root@manager project1]# cat file/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""
1.根據(jù)cpu
2.根據(jù)內(nèi)存
3.根據(jù)主機(jī)名
4.Redis配置文件 bind本地地址
5.操作系統(tǒng)不統(tǒng)一
變量可以進(jìn)行運(yùn)算 + - * //
1.定義變量
playbook
vars 私有
vars_files 共享
inventory
host_vars
group_vars
group_vars/group_name
group_vars/all
外置傳參
-e
2.測(cè)試優(yōu)先級(jí)
在不改變playbook變量的情況下,使用新的值測(cè)試.
3.變量注冊(cè)register
1.將任務(wù)執(zhí)行的結(jié)果存儲(chǔ)至特定的變量中
2.可以使用debug模塊將變量進(jìn)行打印輸出
python: 字典
json 格式化數(shù)據(jù)
{
k1: v1
k2: v2
}
4.facts
[root@manager project1]# cat f13.yml
- hosts: webservers
tasks:
- name: RANDOM
shell: echo "$RANDOM"
register: System_SJ
- name: Debug
debug:
msg: "web_{{ System_SJ.stdout }}"
1.提取facts變量中的IP地址 mac地址 UUID 等等 只要唯一
ansible_default_ipv4.address
[root@manager project1]# cat f14.yml
- hosts: webservers
tasks:
- name: Debug
debug:
msg: "web_{{ ansible_default_ipv4.address }}"