變量的基本概述
變量的使用
變量沖突
變量注冊(cè)
facts變量
一问潭、變量的基本概述
變量的含義
以一個(gè)固定的字符串表示一個(gè)不固定的值
二、變量的使用
- 定義變量
1.在playbook中定義變量
vars:表示關(guān)鍵字
root@manager~/project1]# cat f2.yml
- hosts: webservers
vars:
- file_name: playbook_vars
#調(diào)用共享var_file文件
vars_files: ./vars_file.yml
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
傳輸完成后站绪,會(huì)在web端生成一個(gè)playbook_vars
[root@web~]# ls /tmp/
playbook_vars
2.vars_file 屬于一種共享的方式
[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)用共享var_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
- 在inventory主機(jī)清單中定義變量
1.清單文件中直接定義 hosts文件定義
[root@manager~/project1]# cat hosts
[webservers]
172.16.1.7
172.16.1.8
[webservers:vars]
file_name=hostsfile_group_vars
[root@manager~/project1]# cat f3.yml
- hosts: webservers
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
[root@web~]# ls /tmp/
hostsfile_group_vars
2.創(chuàng)建hosts_vars group_vars 目錄
[root@manager~/project1]# mkdir host_vars
[root@manager~/project1]# mkdir group_vars
#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
①單個(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
② 針對(duì)主機(jī)組定義的方式(給指定的webserver組設(shè)定變量惧盹,其他組無(wú)法使用該變量)
[root@manager~/project1]# cat group_vars/webservers
group_host_vars: webservers
[root@manager~/project1]# cat f5.yml
- hosts: web
tasks:
- name: Create New File {{ group_host_vars}}
file:
path: /opt/{{ group_host_vars }}
state: touch
③ 針對(duì)主機(jī)組定義的方式 (給所有的主機(jī)和主機(jī)組設(shè)定變量)
[root@manager~/project1]# cat group_vars/all
group_host_vars: all
[root@manager~/project1]# cat f5.yml
- hosts: web
tasks:
- name: Create New File {{ group_host_vars}}
file:
path: /opt/{{ group_host_vars }}
state: touch
- 通過(guò)外置傳參定義變量 -e
[root@manager~/project1]# cat f6.yml
- hosts: web
tasks:
- name: Create New File {{ web_vars}}
file:
path: /opt/{{ web_vars }}
state: touch
[root@manager~/project1]# ansibe-palybook -i hosts f6.yml -e "web_vars=123"
[root@backup~]# ls /opt/ #(172.16.1.41)
123 webservers
三絮记、變量沖突
定義相同的變量不同的值鸣皂,來(lái)測(cè)試變量的優(yōu)先級(jí)抓谴,操作步驟:
① 在playbook中定義vars變量
② 在playbook中定義vars_files變量
③ 在inventory主機(jī)定義變量
④ 在inventory主機(jī)組定義變量
⑤ 在host_vars中定義變量
⑥ 在group_vars中定義變量組
⑦ 通過(guò)執(zhí)行命令傳遞變量
優(yōu)先級(jí)測(cè)試:
外置傳入?yún)?shù)優(yōu)先級(jí)最高 ---> playbook ( vars_files(共享)--->vars(私有) )
---> host_vars --> group_vars/group_name ---> group_vars/all
四、變量注冊(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 }}"
五寞缝、facts變量
Ansible facts是在被管理主機(jī)上通過(guò)ansible自動(dòng)采集發(fā)現(xiàn)的變量癌压。facts包含每臺(tái)特定的主機(jī)信息。如被控端主機(jī)的主機(jī)名第租、ip地址措拇、系統(tǒng)版本我纪、CPU數(shù)量慎宾、內(nèi)存狀態(tài)、磁盤(pán)狀態(tài)……
facts使用場(chǎng)景
1)通過(guò)facts變量檢查被控端硬件CPU信息浅悉,從而生成不同的Nginx配置文件
2)通過(guò)facts變量檢查被控端主機(jī)名稱信息趟据,從而生成不同的Zabbix配置文件
3)通過(guò)facts變量檢查被控端內(nèi)存狀態(tài)信息,從而生成不同的memcached的配置文件
4)通過(guò)facts變量……
#1.根據(jù)主機(jī)的cpu信息,生成不同的配置.
A: 1核心 work_process 1;
B: 2核心 work_process 2;
[root@manager~/project1]# cat f10.yml
- hosts: webservers
tasks:
- name: Configure Nginx.conf
template:
src: ./file/nginx.conf.j2
dest: /etc/nginx/nginx.conf
[root@manager~/project1]# cat file/nginx.conf.j2
user www;
worker_processes {{ ansible_processor_vcpus }};
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections {{ansible_processor_vcpus * 1024 }};
}
#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=""