Linux自動化運(yùn)維(Shell與Ansible)(微課版) 課件 項目8 變量與事實_第1頁
Linux自動化運(yùn)維(Shell與Ansible)(微課版) 課件 項目8 變量與事實_第2頁
Linux自動化運(yùn)維(Shell與Ansible)(微課版) 課件 項目8 變量與事實_第3頁
Linux自動化運(yùn)維(Shell與Ansible)(微課版) 課件 項目8 變量與事實_第4頁
Linux自動化運(yùn)維(Shell與Ansible)(微課版) 課件 項目8 變量與事實_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Linux自動化運(yùn)維項目8:變量與事實

學(xué)習(xí)目標(biāo)【知識目標(biāo)】了解Ansible變量的定義和引用基本概念。了解vars和vars_files

關(guān)鍵字的用法。了解事實變量和注冊變量基本概念。了解主機(jī)和主機(jī)組變量、特殊變量基本概念?!炯寄苣繕?biāo)】掌握Ansible變量的定義和調(diào)用方法。掌握事實變量的使用方法,能夠使用Ansible事實引用受管主機(jī)的數(shù)據(jù)。掌握注冊變量的使用方法,能夠使用register關(guān)鍵字捕獲任務(wù)的輸出。掌握groups、group_names、inventory_hostname、hostvars

特殊變量的調(diào)用方法?!舅刭|(zhì)目標(biāo)】培養(yǎng)讀者誠信、務(wù)實、嚴(yán)謹(jǐn)?shù)穆殬I(yè)素養(yǎng),培養(yǎng)其正確的職業(yè)道德觀念和職業(yè)操守,使其實事求是、嚴(yán)謹(jǐn)治學(xué),以誠信為基礎(chǔ),做一個優(yōu)秀的職業(yè)人員。培養(yǎng)讀者系統(tǒng)分析與解決問題的能力,使其能夠掌握相關(guān)知識點并完成項目任務(wù)。變量與事實任務(wù)1:變量概述目錄/Contents010203定義和引用變量在文件中引用變量布爾值變量04

列表變量05

字典變量01定義和引用變量定義和引用變量變量可以指在計算機(jī)存儲器里存在值的被命名的存儲空間。Ansible使用變量來管理不同主機(jī)之間的差異,變量可以是不同類型的值,比如字符串、數(shù)字、布爾值、列表、字典等。Ansible可以在命令行、Playbook、清單文件、角色中定義和引用變量,通常使用標(biāo)準(zhǔn)的YAML語法創(chuàng)建變量。通過使用變量,可以讓自動化任務(wù)更加靈活,根據(jù)每個主機(jī)的不同情況自動化適應(yīng)其配置。在Ansible中定義變量要滿足基本的命名規(guī)則,并非所有的字符串都是有效的Ansible變量名,變量名只能由字母、數(shù)字、下畫線組成,變量名不能以數(shù)字開頭,Python關(guān)鍵字或Playbook關(guān)鍵字不是有效的變量名。而以下畫線開頭的變量名可以使用,但不能保證其私有性或安全性。Ansible有效和無效變量名示例如表所示:序號有效的變量名無效的變量名1foo*foo,Python關(guān)鍵字,比如async、lambda、for、when等2foo_envPlayboook關(guān)鍵字,比如become、vars、register等3foo_portfoo-port、fooport、foo.port4foo5、_foo5foo、12定義和引用變量使用標(biāo)準(zhǔn)的YAML語法定義一個簡單的變量時,只需要使用冒號(:)將變量名和變量值分隔開,如下所示:在定義變量后,使用Jinja2語法來引用變量。Jinja2變量使用雙花括號,比如表達(dá)式“Myampgoesto{{max_amp_value}}”表示引用變量的基本形式。在Playbook中引用變量時,需要使用{{}}標(biāo)識變量名,如下所示:-name:Mytaskdebug:msg:Thevalueofmy_varis{{my_var}}my_var:some_value定義和引用變量在YAML文件中,如果在一個值的開頭使用了{(lán){my_var}}這樣的表達(dá)式,它通常用于引用變量。由于YAML語法中使用花括號標(biāo)識字典,所以解釋器無法確定該表達(dá)式表示變量還是字典。為了避免這種歧義,需要將整個表達(dá)式放在引號中,以便解釋器正確地解釋整個表達(dá)式。如果沒有引號,解釋器就會解釋失敗并顯示錯誤消息。-name:Mytaskdebug:msg:"{{my_var}}/18"在Ansible中,vars關(guān)鍵字用于在Playbook中定義變量,這些變量可以直接在任務(wù)中使用,使Playbook更加靈活和可配置。vars關(guān)鍵字的基本語法如下:vars:var1:value1var2:value2var3:value3定義和引用變量在下面的示例中,使用var關(guān)鍵字定義一個名為my_var的變量,它的值是字符串“Hello,World!”,在任務(wù)中使用debug模塊和msg選項來輸出這個變量的值。-name:Defineandprintavariablehosts:localhostvars:my_var:"Hello,World!"tasks:-debug:msg:"{{my_var}}"02在文件中引用變量在文件中引用變量在Ansible中,vars_files關(guān)鍵字用于在Playbook中引用存儲變量的文件,這些文件可以是YAML格式或JSON格式的。vars_files關(guān)鍵字的基本語法如下:vars_files:-path/to/varfile1.yml-path/to/varfile2.yml其中,path/to/varfile1.yml和path/to/varfile2.yml是包含變量的YAML文件的路徑。在文件中引用變量在上面的示例中,vars_files關(guān)鍵字用于從vars.yml文件中加載變量,這些變量可以在Playbook的任務(wù)中使用。#變量文件vars.yml---var1:value1var2:value2var3:value3#在Playbook中引用文件中的變量-name:Exampleplaybookhosts:web_serversvars_files:-vars.ymltasks:-name:Task1debug:msg:Var1is{{var1}},var2is{{var2}},var3is{{var3}}在Playbook中,使用vars_files關(guān)鍵字來加載vars.yml文件中定義的變量:03布爾值變量布爾值變量在Ansible中,布爾值變量可以用不同的形式來表示,包括true/false、1/0、yes/no、True/False等。在匹配有效字符串時,不區(qū)分字母大小寫。ansible-lint是一個用于檢查AnsiblePlaybook是否符合規(guī)范的工具,該工具更傾向于使用true/false作為布爾值,文檔中的示例也采用這種方式,保持與ansible-lint默認(rèn)設(shè)置的兼容性。常見的布爾值表示形式如表所示:序號布爾值布爾值表示1真值True、'true'、't'、'yes'、'y'、'on'、'1'、1、1.02假值False、'false'、'f'、'no'、'n'、'off'、'0'、0、0.004列表變量列表變量列表變量是一種常見的變量類型,是由變量名和多個值組合在一起的單個變量。列表變量可以通過定義一個包含多個值的項目化列表,或使用方括號[]包含多個值并用逗號分隔來創(chuàng)建。列表變量可以包含多種類型的值,比如字符串、數(shù)字、布爾值、其他列表等,常用于存儲一組相關(guān)的值,比如IP地址列表、文件路徑列表。在Playbook中,可以使用列表變量來定義任務(wù)的目標(biāo)主機(jī)、執(zhí)行特定模塊的參數(shù)、應(yīng)用特定配置文件的路徑等。列表變量可以使用YAML格式的語法定義,示例如下:my_list:-value1-value2-value3列表變量在這個示例中,我們定義了一個名為my_list的列表變量,它包含3個字符串值value1、value2和value3。引用列表變量時,可以通過指定其索引來訪問列表中的特定項。在列表中,第一個項的索引為0,第二個項的索引為1,以此類推??梢詢H使用列表中的特定項來執(zhí)行特定任務(wù),而不必引用整個列表。在Playbook中引用列表變量my_list中的第二個值,示例如下:-name:Printthesecondvalueinmy_listdebug:msg:"Thesecondvalueofmy_varis{{my_list[1]}05字典變量字典變量字典是將數(shù)據(jù)存儲在鍵值對中的一種數(shù)據(jù)結(jié)構(gòu),其中每個鍵值對表示一個特定的數(shù)據(jù)項。字典變量可以包含多種類型的值,比如字符串、數(shù)字、布爾值、列表、其他字典等。在使用字典變量時,可以使用鍵來訪問特定的值,以便執(zhí)行特定的任務(wù)或操作。在Ansible中,可以使用YAML語法定義字典變量,示例如下:my_dict:key1:value1key2:value2key3:value3在上述示例中,定義了一個名為my_dict的字典變量,它包含3個鍵值對,其中鍵是key1、key2和key3,值分別為value1、value2和value3。字典變量引用字典變量時,可以使用方括號或點號來訪問該字典中的單個特定鍵值。在Playbook中引用字典變量my_dict中的key2鍵的值value2,示例如下:-name:Printthevalueofkey2inmy_dictdebug:msg:"Thethevalueofkey2inmy_dictis{{my_dict['key2']}-name:Printthevalueofkey2inmy_dictdebug:msg:"Thethevalueofkey2inmy_dictis{{my_dict.key2}上述兩個示例都引用了相同的值value2。在Ansible中使用字典變量時,推薦使用方括號形式來訪問特定的鍵值。字典變量在Ansible中,注冊變量、事實變量、特殊變量存儲的數(shù)據(jù)都是嵌套類型的數(shù)據(jù)結(jié)構(gòu)。引用嵌套變量示例如下:-name:Printcompanyinformationhosts:localhostvars:web_servers:-name:webserver1ip:ports:-80-443-name:webserver2ip:ports:-80-443db_servers:-name:dbserver1ip:ports:-3306tasks:-name:Printweb_serverIPAddressdebug:msg:"Thisisweb_serverip{{web_servers[0].ip}}"-name:Printdb_serversIPAddressdebug:msg:"Thisisdb_serversip{{db_servers[0].name}}"在示例中,定義了兩個列表,一個是web_servers,另一個是db_servers,每個列表中都包含一個或多個嵌套的變量。web_servers列表中的每個元素都是一個字典,包含名字、IP地址和端口信息。同樣,db_servers列表中的每個元素也是一個字典,包含名字、IP地址和端口信息。字典變量要引用嵌套變量的值,可以使用點號表示法或方括號表示法。獲取web_servers列表中第一個元素的IP地址,可以使用{{web_servers[0].ip}};獲取db_servers列表中第一個元素的名字,可以使用{{db_servers[0]['name']}}。注意:如果變量的鍵名以兩個下劃線開頭和結(jié)尾(如__example__),則在這種情況下,使用點符號直接引用變量的特定值可能導(dǎo)致錯誤。為避免潛在沖突,推薦使用方括號方式來引用變量的值。謝謝變量與事實任務(wù)2:主機(jī)(組)變量、注冊變量01主機(jī)和主機(jī)組變量主機(jī)和主機(jī)組變量在Ansible中,可以通過多種方式定義變量,可以在Playbook中定義、在清單文件中定義或者在任務(wù)中定義,而使用group_vars和host_vars目錄定義變量可以使代碼更加模塊化、可讀性更強(qiáng)、可維護(hù)性更高,并且能夠更好地組織和共享變量。定義主機(jī)和主機(jī)組變量的首選做法是在與清單文件相同的目錄中,創(chuàng)建group_vars和host_vars兩個目錄,這兩個目錄分別包含用于定義組變量和主機(jī)變量的文件。主機(jī)和組變量文件必須使用YAML語法,其有效的文件擴(kuò)展名包括.yml、.yaml、.json等,但擴(kuò)展名不是必需的。主機(jī)和主機(jī)組變量使用group_vars和host_vars目錄定義基于主機(jī)和主機(jī)組的變量文件時,group_vars目錄中定義的變量將自動應(yīng)用于組內(nèi)的所有主機(jī),host_vars目錄中定義的變量僅應(yīng)用于指定的主機(jī)。典型的group_vars和host_vars目錄結(jié)構(gòu)和變量文件如下所示:├──group_vars│├──all││├──vars.yml││└──secrets.yml│├──db││└──vars.yml│└──web│└──vars.yml├──host_vars│├──mysqlserver.yml│├──pgserver.yml│├──│└──├──playbook.yml└──inventory└──ansible.cfg主機(jī)和主機(jī)組變量在group_vars目錄中創(chuàng)建名為all的子目錄,它可以為所有主機(jī)設(shè)置全局變量。這意味著在all目錄下的變量文件中定義的變量將適用于所有主機(jī),而不僅僅是某個組或某個主機(jī)。在下面的清單文件中,有兩個主機(jī)組,分別是web組和db組,web組包括兩個主機(jī),分別是、,db組也包括兩個主機(jī),分別是mysqlserver、pgserver。[web][db]mysqlserverpgserver主機(jī)和主機(jī)組變量group_vars目錄包含按組定義的變量文件,可以在group_vars目錄中分別創(chuàng)建名為web和db的YAML格式文件來定義與組相關(guān)的變量。#group_vars/web.ymlhttp_port:80https_port:443#group_vars/db.ymlmysql_version:80pg_version:12host_vars目錄包含按主機(jī)定義的變量文件??梢栽趆ost_vars目錄中創(chuàng)建一個名為的YAML格式文件來定義與對應(yīng)主機(jī)相關(guān)的變量。root_document:/var/www/htmlconfig_file:vhost.conf主機(jī)和主機(jī)組變量在Playbook文件中編寫任務(wù),可以直接調(diào)用變量。----name:Exampleplaybook1hosts:webtasks:-name:PrintHTTPportandHTTPdocumentdebug:msg:"HTTPportis{{http_port}},HTTPdocumentis{{root_document}},HTTPconfigurationfileis{{config_file}}"-name:Exampleplaybook2hosts:dbtasks:-name:Displaydatabaseserverversiondebug:msg:"MySQLversionis{{mysql_version}}andPostgreSQLversionis{{pg_version}}"02注冊變量注冊變量注冊變量是Ansible中的一種特殊變量,用于保存任務(wù)執(zhí)行后產(chǎn)生的輸出結(jié)果。運(yùn)維工程師或系統(tǒng)工程師通常會根據(jù)模塊的返回值來判斷自動化任務(wù)執(zhí)行成功或失敗,但模塊返回值通常不能滿足這個需求,這時就可以使用注冊變量來保存任務(wù)的輸出結(jié)果,以便在后續(xù)任務(wù)中使用。注冊變量的主要作用是在后續(xù)的任務(wù)或模塊中使用模塊的執(zhí)行結(jié)果,實現(xiàn)模塊之間的數(shù)據(jù)共享。通過使用注冊變量,可以避免在不同的模塊中重復(fù)執(zhí)行相同的任務(wù)。同時,注冊變量也可以用于任務(wù)執(zhí)行狀態(tài)的檢查和錯誤信息的處理,以提高任務(wù)執(zhí)行的可靠性和穩(wěn)定性。注冊變量可以是簡單變量、列表變量、字典變量或復(fù)雜嵌套數(shù)據(jù)結(jié)構(gòu)。注冊變量存儲在內(nèi)存中,只在當(dāng)前Playbook運(yùn)行期間有效。注冊變量注冊變量使用register關(guān)鍵字在任務(wù)中定義,任務(wù)可將結(jié)果保存到指定的變量中。在示例中,第1個任務(wù)使用shell模塊運(yùn)行了df-h命令,并將輸出結(jié)果存儲到了一個名為disk_space的注冊變量中;在第2個任務(wù)中,使用debug模塊輸出了disk_space變量的stdout_lines屬性,該屬性包含df-h命令的輸出結(jié)果;第3個任務(wù)使用stat模塊檢查/path/to/file.txt這個文件是否存在,并將結(jié)果存儲在file_stat變量中;第4個任務(wù)使用debug模塊輸出一條消息,消息內(nèi)容是Fileexists:{{file_stat.stat.exists}},這里使用了{(lán){file_stat.stat.exists}}來判斷文件是否存在,如果存在則輸出true,否則輸出false。-name:Getdiskspaceshell:df-hregister:disk_space-name:Printdiskspacedebug:var:disk_space.stdout_lines-name:Checkiffileexistsstat:path:/path/to/file.txtregister:file_stat-name:Printfileexistsstatusdebug:msg:"Fileexists:{{file_stat.stat.exists}}"謝謝變量與事實任務(wù)3:事實變量目錄/Contents01事實變量簡介02setup模塊03set_fact模塊01事實變量簡介事實變量簡介在Ansible中,事實信息是指與主機(jī)系統(tǒng)相關(guān)的數(shù)據(jù),包括操作系統(tǒng)版本、內(nèi)核版本、內(nèi)存、CPU、網(wǎng)絡(luò)地址、主機(jī)名、文件系統(tǒng)等。事實信息是Ansible在執(zhí)行任務(wù)時自動收集的,不需要額外配置,它可以幫助用戶獲取目標(biāo)主機(jī)的環(huán)境信息、IT基礎(chǔ)設(shè)施狀態(tài),或者作為條件和參數(shù)用于后續(xù)任務(wù)中,以便根據(jù)目標(biāo)主機(jī)的系統(tǒng)信息執(zhí)行不同的任務(wù)。Ansible事實變量就是存儲事實信息的數(shù)據(jù)結(jié)構(gòu),通過ansible_facts變量或帶有ansible_前綴的頂級變量引用具體的事實信息。事實變量簡介常見的事實變量如表所示:序號事實變量名描述1ansible_distribution目標(biāo)主機(jī)的操作系統(tǒng)發(fā)行版名稱,如Ubuntu、CentOS等2ansible_distribution_version目標(biāo)主機(jī)的操作系統(tǒng)版本號,如7、8、9、18.04等3ansible_fqdn目標(biāo)主機(jī)的完全限定域名4ansible_hostname目標(biāo)主機(jī)的主機(jī)名5ansible_default_ipv4目標(biāo)主機(jī)默認(rèn)IPv4地址6ansible_memtotal_mb目標(biāo)主機(jī)的內(nèi)存容量,單位為MB7ansible_processor_vcpus目標(biāo)主機(jī)的處理器虛擬核心數(shù)量8ansible_architecture目標(biāo)主機(jī)的系統(tǒng)架構(gòu),如x86_64等9ansible_date_time目標(biāo)主機(jī)的日期和時間信息,包括當(dāng)前時間、日期、時區(qū)等10ansible_mounts目標(biāo)主機(jī)當(dāng)前系統(tǒng)掛載的文件系統(tǒng)信息,包括掛載點、文件系統(tǒng)類型、設(shè)備名稱、容量、使用情況等信息11ansible_interfaces目標(biāo)主機(jī)網(wǎng)絡(luò)接口信息12ansible_devices目標(biāo)主機(jī)上的設(shè)備信息,包括硬盤、分區(qū)、磁盤容量等調(diào)用事實變量Ansible使用ansible_facts變量存儲事實信息。ansible_facts使用基于Python字典類型的數(shù)據(jù)結(jié)構(gòu)存儲數(shù)據(jù),字典是一種無序的鍵值對集合,字典變量中的鍵是代表系統(tǒng)信息的字符串,而值是與鍵相關(guān)聯(lián)的系統(tǒng)信息數(shù)據(jù)。默認(rèn)情況下,常見的Ansible事實信息可以作為頂級變量訪問,這些變量以ansible_開頭。比如可以使用ansible_distribution變量獲取遠(yuǎn)程主機(jī)的操作系統(tǒng)發(fā)行版名稱,使用ansible_facts['default_ipv4']['address']變量獲取遠(yuǎn)程主機(jī)的默認(rèn)IPv4地址。這些變量可以在AnsiblePlaybook中直接使用。調(diào)用事實變量在示例中,第1個任務(wù)使用debug模塊輸出所有事實信息;第2個任務(wù)使用debug模塊輸出ansible_facts['default_ipv4']['address']事實信息,即輸出遠(yuǎn)程主機(jī)的操作系統(tǒng)發(fā)行版名稱;第3個任務(wù)使用debug模塊輸出ansible_all_ipv4_addresses變量,將INJECT_FACTS_AS_VARS的值設(shè)置為false,不需要在ansible_default_ipv4['address']前面添加ansible_facts,即可輸出默認(rèn)的IPv4地址。----name:Printfactsmessagehosts:webtasks:-name:Printallavailablefactsdebug:var:ansible_facts-name:Printsystemfactsbeginwiththeansibleprefixdebug:var:ansible_facts['ansible_distribution’]-name:PrintsystemfactswithINJECT_FACTS_AS_VARSdisableddebug:var:ansible_default_ipv4['address’]vars:INJECT_FACTS_AS_VARS:false調(diào)用事實變量默認(rèn)情況下,Ansible會在每個play開始時收集事實信息,也可以通過在Playbook中設(shè)置gather_facts來禁用事實信息收集。收集主機(jī)的事實信息可能會占用一定的時間和資源,因此在執(zhí)行大規(guī)模自動化任務(wù)或需要快速執(zhí)行任務(wù)的情況下,可以通過將gather_facts設(shè)置為false來禁用事實信息收集,從而提高Ansible的執(zhí)行效率。-name:Exampleplaybookhosts:allgather_facts:falsetasks:-name:Exampletaskshell:echo"Hello,world!"需要注意的是,如果某些任務(wù)需要調(diào)用事實信息才能正確運(yùn)行,禁用事實信息收集可能會導(dǎo)致這些任務(wù)無法正常執(zhí)行。在這種情況下,可以手動指定所需的事實信息,或者在任務(wù)中使用delegate_to或local_action將任務(wù)委托給另一個主機(jī)或本地執(zhí)行。02setup模塊setup模塊setup模塊是用于收集主機(jī)事實信息的內(nèi)置模塊。此模塊可在Playbook中通過任務(wù)自動調(diào)用,也可以通過/usr/bin/ansible直接執(zhí)行。當(dāng)使用setup模塊時,可以使用filter參數(shù)來指定要收集的系統(tǒng)信息的子集,filter參數(shù)可接收一個字符串列表,其中每個字符串都是一個要收集的系統(tǒng)信息的名稱或模式。setup模塊示例如表所示:序號示例描述1ansibleall-mansible.builtin.setup-a'filter=ansible_eth[0-2]'在所有主機(jī)上執(zhí)行setup模塊,收集主機(jī)的事實信息,并只顯示與過濾器ansible_eth[0-2]匹配的網(wǎng)絡(luò)接口(eth0、eth1、eth2)的信息2ansibleall-mansible.builtin.setup-a'gather_subset=network,virtual'在所有主機(jī)上執(zhí)行setup模塊,只收集與網(wǎng)絡(luò)和虛擬化有關(guān)的事實信息4ansibleall-mansible.builtin.setup-a'gather_subset=!all'只收集默認(rèn)的最小事實集5ansibleall-msetup-a"filter=*ipv4*只返回包含ipv4的事實信息,比如過濾器匹配了ansible_default_ipv4和ansible_all_ipv4_addresses兩個鍵,因此會返回包含這兩個鍵的所有事實信息6ansibleall-msetup-a"filter=*mem*"只返回包含mem的事實信息,輸出結(jié)果是每個主機(jī)的ansible_facts字典的所有鍵中包含mem字符串的事實信息,例如內(nèi)存容量和使用情況等03set_fact模塊set_fact模塊set_fact模塊的主要作用是在Playbook運(yùn)行過程中設(shè)置或修改變量,這些變量可以根據(jù)實際需求進(jìn)行調(diào)整,并在Playbook的其他任務(wù)中使用,從而實現(xiàn)更靈活的任務(wù)控制與參數(shù)傳遞。set_fact模塊的基本語法如下:其中,variable_name表示要設(shè)置或修改的變量名,variable_value表示要設(shè)置或修改的變量值,可以是字符串、數(shù)字或其他合法的YAML數(shù)據(jù)。-name:Setvariablevalueset_fact:variable_name:variable_valueset_fact模塊set_fact設(shè)置變量示例:-name:Printsetfactvarhosts:localhostvars:my_variable:"original_value"tasks:-name:Setanewvariableset_fact:new_variable:"new_value"-name:Modifyanexistingvariableset_fact:my_variable:"modified_value"-name:Printthevariablesdebug:msg:|Thisis{{my_variable}}Thisisother{{new_variable}}在上述示例中,首先定義了一個名為my_variable的變量,并將其設(shè)置為字符串original_value。第1個任務(wù)使用set_fact模塊創(chuàng)建一個名為new_variable的變量,并將其設(shè)置為字符串new_value。第2個任務(wù)使用相同的set_fact模塊,但將my_variable的值更改為字符串modified_value。第3個任務(wù)使用debug模塊輸出兩個變量的值。謝謝變量與事實任務(wù)4:特殊變量目錄/Contents010203特殊變量簡介groups變量group_names變量04inventory_hostname變量05hostvars變量01特殊變量簡介特殊變量簡介特殊變量是Ansible中預(yù)定義的一組變量,用于存儲有關(guān)目標(biāo)主機(jī)、執(zhí)行環(huán)境和運(yùn)行狀態(tài)的信息。這些變量可以在Playbook或模板中直接引用,而無須事先定義或聲明。通過特殊變量可以管理和操作主機(jī)的連接方式、事實信息,以及控制Ansible的行為和輸出。常見的特殊變量類型如表所示:序號特殊變量類型描述1ConnectionVariables連接類型的特殊變量,用于控制連接目標(biāo)主機(jī)的方式和參數(shù),例如ansible_connection、ansible_host、ansible_become_user、ansible_user、ansible_python_interpreter等2FactsVariables事實變量,用于存儲目標(biāo)主機(jī)的事實信息,例如ansible_facts、ansible_local等3MagicVariables魔術(shù)變量或者魔法變量,用于控制Ansible的行為和輸出,例如ansible_loop、ansible_skip_tags、ansible_play_batch、groups、group_names、inventory_hostname、hostvars等02groups變量groups變量groups變量用于表示當(dāng)前主機(jī)所屬的所有組,它是一個字典類型的變量,其中鍵是組名,值是該組中所有主機(jī)的列表。比如清單文件中有兩個組,分別是webserver和dbserver。[webserver][dbserver]在Playbook中使用groups變量,其中包含所有主機(jī)組的名稱,以及對應(yīng)組內(nèi)的所有主機(jī)信息。{"all":["","","",""],"webserver":["",""],"dbserver":["",""]}groups變量使用groups變量在Playbook中輸出webserver組的所有主機(jī)。-name:Exampleplaybookhosts:webservertasks:-name:Showallhostsinwebserversgroupdebug:msg:"{{groups['webserver']}}"示例用于顯示"webserver"主機(jī)組中的所有主機(jī)。Debug是Ansible的內(nèi)置模塊,用于打印調(diào)試信息。msg:“{{groups[‘webserver’]}}”是debug模塊的參數(shù),用于指定要打印的消息。{{groups['webserver']}}是一個Jinja2模板表達(dá)式,用于獲取名為"webserver"的主機(jī)組中的所有主機(jī)。groups是一個Ansible內(nèi)置的變量,用于訪問主機(jī)組信息。TASK[Showallhostsinwebserversgroup]ok:[]=>{"msg":["",""]}執(zhí)行Playbook,在名為“webserver”的主機(jī)組中找到了兩個主機(jī),并將它們作為消息打印出來。03group_names變量group_names變量groups變量用于表示當(dāng)前主機(jī)所屬的所有組,它是一個字典類型的變量,其中鍵是組名,值是該組中所有主機(jī)的列表。比如清單文件中有兩個組,分別是webserver和dbserver。[webserver][dbserver][devops]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論