Ansible(三)如何使用變量

使用變量可以簡(jiǎn)化操作焰轻,除此之外巩掺,ansible還提供了變量可以用來獲取被控主機(jī)上的信息

普通變量

變量名稱要求

變量名稱中不能有空格,也不能有下劃線(_)以外的其他字符

如何引用變量

tasks中引用變量利耍,需要使用{{}}將變量括起來,注意在變量名稱前后都有空格
當(dāng)變量名稱在行首出現(xiàn)時(shí)玉转,還需要使用雙引號(hào)""將整行括起來
在某些特殊情況下爪模,也可不使用{{}},例如在when條件中刀诬,或者在debug模塊的var選項(xiàng)中

vars: 
 user: joe
tasks:
 - name: use variables 
   user:
   name: "{{ user }}"
 - name: use variables in debug
   debug:
     var: user

變量的作用范圍

當(dāng)同一個(gè)變量名在不同級(jí)別都出現(xiàn)時(shí)咽扇,使用優(yōu)先級(jí)最高的變量值

  • 全局變量
    一般在命令行中進(jìn)行定義邪财,對(duì)命令中的所有play生效,優(yōu)先級(jí)最高
    ansible -e "user=root" -e "passwd=123"
  • play級(jí)別的變量
    play中進(jìn)行定義树埠,只對(duì)指定的play生效,優(yōu)先級(jí)低于全局變量嘶伟,高于主機(jī)級(jí)別的變量
---
- name: a play
  vars:
    - user: root
  • 主機(jī)級(jí)別的變量
    inventory文件或者指定的變量文件中定義怎憋,對(duì)相關(guān)的主機(jī)/主機(jī)組生效九昧。優(yōu)先級(jí)最低铸鹰。
    • inventory文件中進(jìn)行定義
# 主機(jī)級(jí)別的變量 直接將變量寫在主機(jī)的后面
servera user=root
# 主機(jī)組級(jí)別的變量蹋笼,使用[group:vars]進(jìn)行定義
[servers]
servera
serverb
[servers:vars]
user=root
  • 在變量文件中進(jìn)行定義
    ansible會(huì)自動(dòng)在當(dāng)前目錄下尋找變量文件圾笨,主機(jī)變量文件在hostvars目錄中速兔,主機(jī)組變量文件在groups_vars中墅拭。
    在指定目錄中創(chuàng)建與inventory中定義的主機(jī)/主機(jī)組同名的文件,文件中的變量會(huì)應(yīng)用于對(duì)應(yīng)的主機(jī)/主機(jī)組

變量矩陣

如果一個(gè)變量的值是一個(gè)列表涣狗,列表中的值還是一個(gè)列表谍婉,那么就稱之為變量矩陣,類似python中的字典嵌套字典

定義方式

users:
  bjones:
    first_name: Bob
    last_name: Jones
  acook:
    first_name: Anne
    last_name: Cook

調(diào)用方式

可以使用類似于python中字典的方式調(diào)用
users['bjones']['first_name']
也可以用以下方式調(diào)用
users.bjones.first_name
建議使用第一種方式镀钓,當(dāng)變量名稱中包含關(guān)鍵字時(shí)穗熬,第二種方式可能會(huì)出現(xiàn)錯(cuò)誤

幾種特殊的變量

register變量

可以在playbook運(yùn)行的過程中,將task的運(yùn)行結(jié)果賦予給某個(gè)變量丁溅,在后續(xù)的task中進(jìn)行輸出唤蔗,或者根據(jù)結(jié)果執(zhí)行不同的操作

# 示例,輸出MySQL從庫的同步狀態(tài)
 - name: get slave status
   mysql_replication:
    login_user: root
    login_password: "{{ mysql_root_password }}"
    login_unix_socket: "{{ mysql_datadir }}/mysql.sock"
    login_port: "{{ mysql_port }}"
    mode: getslave
   register: slave_status

 - name: print slave status
   debug:
    msg: "Slave_IO: {{ slave_status.Slave_IO_Running }},Slave_SQL: {{ slave_status.Slave_SQL_Running }}"

facts變量

ansible在執(zhí)行playbook時(shí)窟赏,默認(rèn)會(huì)收集被控主機(jī)的信息妓柜,這些信息保存在facts變量中,以便根據(jù)被控主機(jī)信息的不同來執(zhí)行不同的操作涯穷。

關(guān)閉playbook中的變量收集

---
- hosts: all
  gather_facts: no

使用adhoc收集facts變量

ansible all -m setup

facts變量?jī)?nèi)容

facts變量是以json格式保存的被控主機(jī)的信息棍掐,默認(rèn)包括IP、主機(jī)名拷况、磁盤作煌、掛載掘殴、CPU、內(nèi)存等信息
要查詢所有facts變量?jī)?nèi)容粟誓,可以使用ansible node1 -m setup > setup.json將變量保存到文件中進(jìn)行查看

常用facts變量

  • IPV4地址 ansible_default_ipv4['address']
  • 主機(jī)名 ansible_hostname
  • 內(nèi)存 ansible_memtotal_mb
  • 磁盤信息 ansible_devices
  • 掛載信息 ansible_mounts

自定義facts變量

默認(rèn)情況下奏寨,setup模塊會(huì)從被控節(jié)點(diǎn)主機(jī)上的/etc/ansible/facts.d文件夾中獲取用戶定義變量。文件或者腳本以.fact結(jié)尾

# 自定義fact文件
# cat custom.fact 
[general]
package = httpd
service = httpd
state = started
enabled = true
# 調(diào)用自定義fact變量
# cat playbook.yml 
---
- name: Install Apache and starts the service
  hosts: webserver
  tasks:
    - name: Install the required package
      yum:
        name: "{{ ansible_facts['ansible_local']['custom']['general']['package'] }}"
        state: latest
    - name: Start the service
      service:
        name: "{{ ansible_facts['ansible_local']['custom']['general']['service'] }}"
        state: "{{ ansible_facts['ansible_local']['custom']['general']['state'] }}"
        enabled: "{{ ansible_facts['ansible_local']['custom']['general']['enabled'] }}"

magic變量

magic變量是本機(jī)的內(nèi)容鹰服,包括inventory文件中的內(nèi)容

---
- hosts: localhost
  tasks:
   - name: print magic variables
     debug:
       var: hostvars['localhost']
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末病瞳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子获诈,更是在濱河造成了極大的恐慌仍源,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舔涎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逗爹,警方通過查閱死者的電腦和手機(jī)亡嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掘而,“玉大人挟冠,你說我怎么就攤上這事∨鬯” “怎么了知染?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)斑胜。 經(jīng)常有香客問我控淡,道長(zhǎng),這世上最難降的妖魔是什么止潘? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任掺炭,我火速辦了婚禮,結(jié)果婚禮上凭戴,老公的妹妹穿的比我還像新娘涧狮。我一直安慰自己,他們只是感情好么夫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布者冤。 她就那樣靜靜地躺著,像睡著了一般档痪。 火紅的嫁衣襯著肌膚如雪涉枫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天钞它,我揣著相機(jī)與錄音拜银,去河邊找鬼殊鞭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛尼桶,可吹牛的內(nèi)容都是我干的操灿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泵督,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼趾盐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起小腊,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤救鲤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秩冈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體本缠,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年入问,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丹锹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芬失,死狀恐怖楣黍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棱烂,我是刑警寧澤租漂,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站颊糜,受9級(jí)特大地震影響哩治,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芭析,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一锚扎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馁启,春花似錦驾孔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霉颠,卻和暖如春对碌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒿偎。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來泰國打工朽们, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怀读,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓骑脱,卻偏偏與公主長(zhǎng)得像菜枷,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叁丧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • 我們?cè)谶@個(gè)Ansible系列文章中已經(jīng)提到了變量啤誊,只是為了讓您稍稍慢一點(diǎn)。與許多編程語言一樣拥娄,變量本質(zhì)上是表示值的...
    塵世不擾閱讀 2,550評(píng)論 0 2
  • shell變量:定義: Host=oldxu.com使用:${Host} Ansible變量:定義: Host=o...
    范小雷閱讀 566評(píng)論 0 0
  • Ansible 不完全手冊(cè) Ansible 認(rèn)識(shí) andsible 最早是 厄休拉*勒古恩 在 1966 年的小說...
    花澤菠菜xqc閱讀 933評(píng)論 0 2
  • 作為背鍋俠運(yùn)維工作的基本流程 運(yùn)維工具的分類 : ansible的模塊化: ansible密鑰登陸 ansible...
    二郎5閱讀 4,160評(píng)論 0 10
  • Ansible 認(rèn)識(shí) andsible 最早是 厄休拉*勒古恩 在 1966 年的小說 《羅卡農(nóng)的星球》中創(chuàng)造了 ...
    Lengfin閱讀 849評(píng)論 0 0