Ansible之Varialbes—3


變量的基本概述
變量的使用
變量沖突
變量注冊(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=""
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末术健,一起剝皮案震驚了整個(gè)濱河市汹碱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荞估,老刑警劉巖咳促,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異勘伺,居然都是意外死亡跪腹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)飞醉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)冲茸,“玉大人,你說(shuō)我怎么就攤上這事≈崾酰” “怎么了难衰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逗栽。 經(jīng)常有香客問(wèn)我盖袭,道長(zhǎng),這世上最難降的妖魔是什么祭陷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任苍凛,我火速辦了婚禮,結(jié)果婚禮上兵志,老公的妹妹穿的比我還像新娘醇蝴。我一直安慰自己,他們只是感情好想罕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布悠栓。 她就那樣靜靜地躺著,像睡著了一般按价。 火紅的嫁衣襯著肌膚如雪惭适。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天楼镐,我揣著相機(jī)與錄音癞志,去河邊找鬼。 笑死框产,一個(gè)胖子當(dāng)著我的面吹牛凄杯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秉宿,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼戒突,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了描睦?” 一聲冷哼從身側(cè)響起膊存,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忱叭,沒(méi)想到半個(gè)月后隔崎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韵丑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年爵卒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埂息。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡技潘,死狀恐怖遥巴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情享幽,我是刑警寧澤铲掐,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站值桩,受9級(jí)特大地震影響摆霉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奔坟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一携栋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咳秉,春花似錦婉支、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炕舵,卻和暖如春何之,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咽筋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工溶推, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奸攻。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓蒜危,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親舞箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子舰褪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容