深入理解 Ansible Playbook:組件與實戰

目錄

1 playbook介紹

2 YAML語言

2.1語法簡介

2.2數據類型

3 Playbook核心組件

3.1 hosts組件

3.2 remote_user組件

3.3 task列表和action組件

3.4 handlers

3.5 tags組件

3.6 其他組件說明


1 playbook介紹

????????playbook 劇本是由一個或多個"play"組成的列表。

????????play的主要功能在于將預定義的一組主機,裝扮成事先通過ansible中的task定義好的角色。Task實際是調用ansible的一個module,將多個play組織在一個playbook中,即可以讓它們聯合起來,按事先編排的機制執行預定義的動作。

????????playbook文件時采用YAML語言編寫的。

2 YAML語言

2.1語法簡介
  • 在單一文件第一行,用連續三個連字號"“"開始,還有選擇性的連續三個點號(.. )用來表示文件的結尾
  • 次行開始正常寫Playbook的內容,一般建議寫明該Playbook的功能使用#號注釋代碼
  • 縮進必須是統一的,不能空格和tab混用
  • 縮進的級別也必須是一致的,同樣的縮進代表同樣的級別,程序判別配置的級別是通過縮進結合換行來實現的
  • YAML文件內容是區別大小寫的,key/value的值均需大小寫敏感
  • 多個key/value可同行寫也可換行寫,同行使用,分隔
  • key后面冒號要加一個空格 比如: key: value
  • value可是個字符串,也可是另一個列表YAML文件擴展名通常為 yml或 yaml
2.2數據類型

YAML支持一下常用幾種數據類型:

  • 標量:單個的、不可再分的值
  • 對象:鍵值對的集合,又稱為映射(mapping)/哈希(hashes)/字典(dictionary)
  • 數組:一組按次序排列的值,又稱為序列(sequence)/列表(list)

3 Playbook核心組件

一個playbook 中由多個組件組成,其中所用到的常見組件類型如下:

  • Hosts 執行的遠程主機列表
  • Tasks 任務集,由多個task的元素組成的列表實現,每個task是一個字典,一個完整的代碼塊功能需最少元素需包括 name和 task,一個name只能包括一個task
  • Variables 內置變量或自定義變量在playbook中調用
  • Templates 模板,可替換模板文件中的變量并實現一些簡單邏輯的文件
  • Handlers 和 notify結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行
  • tags 標簽 指定某條任務執行,用于選擇運行playbook中的部分代碼。ansible具有幕等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其確實沒有發生變化的時間依然會非常地長。此時,如果確信其沒有變化,就可以通過tags跳過此些代碼片斷
3.1 hosts組件

????????Hosts:playbook中的每一個play的目的都是為了讓特定主機以某個指定的用戶身份執行任務。hosts用于指定要執行指定任務的主機,須事先定義在主機清單中。

3.2 remote_user組件

????????remote_user: 可用于Host和task中。也可以通過指定其通過sudo的方式在遠程主機上執行任務,其可用于play全局或某任務;此外,甚至可以在sudo時使用sudo_user指定sudo時切換的用戶

3.3 task列表和action組件

????????play的主體部分是task list,task list中有一個或多個task,各個task 按次序逐個在hosts中指定的所有主機上執行,即在所有主機上完成第一個task后,再開始第二個tasktask的目的是使用指定的參數執行模塊,而在模塊參數中可以使用變量。模塊執行是冪等的,這意味著多次執行是安全的,因為其結果均一致。

????????每個task都應該有其name,用于playbook的執行結果輸出,建議其內容能清晰地描述任務執行步驟。如果未提供name,則action的結果將用于輸出。

忽略ignore_errors:

????????如果一個task出錯,默認將不會繼續執行后續的其它task。

????????利用 ignore_errors: yes 可以忽略此task的錯誤,繼續向下執行playbook其它task。

task兩種格式:

????????action:module arguments? #示例: action: shell wall hello

????????module:arguments? #建議使用? #示例: shell: wall hello

注意:shell和command模塊后跟命令,而非key=value。

3.4 handlers

handlers和notify結合使用觸發條件

????????Handlers 實際上就是一個觸發器是task列表,這些task與前述的task并沒有本質上的不同,用于當關注的資源發生變化時,才會采取一定的操作

notify此action可用于在每個play的最后被觸發

????????這樣可避免多次有改變發生時每次都執行指定的操作,僅在所有的變化發生完成后一次性地執行指定操作。

????????在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作。

????????在系統中,我們修改了服務器的配置文件,這時候就需要重啟操作服務,就可以使用到handlers。配合 notify使用。

在使用handlers的過程中,有以下幾點需要注意

  • handlers只有在其所在的任務被執行時,都會被運行;
  • handlers只會在Play的末尾運行一次;如果想在一個Playbook的中間運行handlers,則需要使用meta模塊來實現,例如:- meta: flush_handlers。
  • 如果一個Play在運行到調用handlers的語句之前失敗了,那么這個handlers將不會被執行。我們可以使用mega模塊的–force-handlers選項來強制執行handlers,即使在handlers所在Play中途運行失敗也能執行。
3.5 tags組件

????????在playbook文件中,可以利用tags組件,為特定task指定標簽,當在執行playbook時,可以只執行特定tags的task,而非整個playbook文件。

????????可以一個task對應多個tag,也可以多個task對應一個tag。

????????還有另外3個特殊關鍵字用于標簽, tagged , untagged 和 all ,它們分別是僅運行已標記,只有未標記和所有任務。

3.6 其他組件說明

????????某任務的狀態在運行后為changed時,可通過"notify"通知給相應的handlers任務還可以通過"tags"給task 打標簽,可在ansible-playbook命令上使用 -t 指定進行調用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62903.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年食堂采購系統源碼技術趨勢:如何開發智能的供應鏈管理APP

本篇文章,小編將與大家一同探討2024年食堂采購系統的技術趨勢,并提供開發更智能的供應鏈管理APP的策略。 一、2024年食堂采購系統的技術趨勢 1.人工智能與機器學習的深度應用 在2024年,AI和機器學習在食堂采購系統中的應用將更加普遍。這些…

代碼隨想錄-算法訓練營-番外(圖論01:圖論理論基礎,所有可到達的路徑)

day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercarl.com/kamacoder/圖論理論基礎.html#圖的基本概念 day01 所有可達路徑 鄰接矩陣 import java.util.Scanner;import java.util.List;import java.util.ArrayL…

系統架構的演變

什么是系統架構? 系統架構是系統的一種整體的高層次的結構表示,它確定了系統的基本組織、組件之間的關系、組件與環境的關系,以及指導其設計和發展的原則。隨著技術的發展和業務需求的增長,系統架構經歷了從簡單到復雜、從集中到…

c++總復習

C 中多態性在實際項目中的應用場景 圖形繪制系統 描述:在一個圖形繪制軟件中,可能有多種圖形,如圓形、矩形、三角形等。這些圖形都有一個共同的操作,比如繪制(draw)。通過多態性,可以定義一個基…

pip離線安裝一個github倉庫

要使用pip安裝一個本地Git倉庫,你可以按照以下步驟操作: 確保你已經克隆了Git倉庫到本地。 進入倉庫所在的目錄。 使用pip安裝。 以下是具體的命令: 克隆Git倉庫到本地(替換下面的URL為你的倉庫URL) git clone https…

【從零開始入門unity游戲開發之——C#篇04】棧(Stack)和堆(Heap),值類型和引用類型,以及特殊的引用類型string

文章目錄 知識回顧一、棧(Stack)和堆(Heap)1、什么是棧和堆2、為什么要分棧和堆3、棧和堆的區別棧堆 4、總結 二、值類型和引用類型1、那么值類型和引用類型到底有什么區別呢?值類型引用類型 2、總結 三、特殊的引用類…

【C語言實現:用隊列模擬棧與用棧模擬隊列(LeetCode 225 232)】

LeetCode刷題記錄 🌐 我的博客主頁:iiiiiankor🎯 如果你覺得我的內容對你有幫助,不妨點個贊👍、留個評論?,或者收藏?,讓我們一起進步!📝 專欄系列:LeetCode…

【Python】Selenium 爬蟲的使用技巧和案例

引言 Selenium 是 Python 中功能強大的自動化測試工具,因其能夠操控瀏覽器進行模擬操作,被廣泛應用于網頁數據爬取。相比傳統的 requests 等庫,Selenium 能更好地應對動態加載內容和復雜交互場景。本文將詳細介紹 Selenium 爬蟲的使用技巧,并提供實際案例來幫助讀者快速上…

MySQL SQL語句性能優化

MySQL SQL語句性能優化指南 一、查詢設計優化1. 避免 SELECT *2. 使用 WHERE 進行條件過濾3. 避免在索引列上使用函數和表達式4. 使用 LIMIT 限制返回行數5. 避免使用子查詢6. 優化 JOIN 操作7. 避免全表掃描 二、索引優化1. 使用合適的索引2. 覆蓋索引3. 索引選擇性4. 多列索引…

Mybatis動態sql執行過程

動態SQL的執行原理主要涉及到在運行時根據條件動態地生成SQL語句,然后將其發送給數據庫執行。以下是動態SQL執行原理的詳細解釋: 一、接收參數 動態SQL首先會根據用戶的輸入或系統的條件接收參數。這些參數可以是查詢條件、更新數據等,它們…

java jar包加密 jar-protect

介紹 java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal(已停止維護)設計啟發,針對springboot日常項目開發,重新編寫安全可靠的jar包加殼加密技術,用于保護軟件版權。 使用說…

Linux:Git

Git常見指令: git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局級別的簽名設置,全局的放在本用 git config --global user.ema…

【WiFi】WiFi中RSSI、SNR、NF之間關系及說明

RSSI(接收信號強度指示) 定義: RSSI 是一個相對值,用于表示接收到的無線信號的強度。它通常由無線設備的硬件(如無線網卡或無線芯片)直接提供。 計算: RSSI 的計算通常是由設備的無線芯片完成的…

提升音頻轉錄準確性:VAD技術的應用與挑戰

引言 在音頻轉錄技術飛速發展的今天,我們面臨著一個普遍問題:在嘈雜環境中,轉錄系統常常將非人聲誤識別為人聲,導致轉錄結果出現錯誤。例如,在whisper模式下,系統可能會錯誤地轉錄出“謝謝大家”。本文將探…

[ZMQ] -- ZMQ通信Protobuf數據結構 1

1、前言背景 工作需要域間實現zmq通信,剛開始需要比較簡單的數據結構,比如兩個bool,后面可能就需要傳輸比較大的數據,所以記錄下實現流程,至于為啥選擇proto數據結構去做大數據傳輸,可能是地平線也用這個&…

順序表的使用,對數據的增刪改查

主函數: 3.c #include "3.h"//頭文件調用 SqlListptr sql_cerate()//創建順序表函數 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆區申請連續的空間if(NULLptr){printf("創建失敗\n");return NULL;//如果沒有申請成功&#xff…

React和Vue中暴露子組件的屬性和方法給父組件用,并且控制子組件暴露的顆粒度的做法

React 在 React 中,forwardRef 是一種高級技術,它允許你將 ref 從父組件傳遞到子組件,從而直接訪問子組件的 DOM 節點或公開的方法。這對于需要操作子組件內部狀態或 DOM 的場景非常有用。為了使子組件能夠暴露其屬性和方法給父組件&#xf…

《C++ 實時視頻流物體跟蹤與行為分析全解析》

在當今科技飛速發展的時代,視頻監控與智能分析技術在眾多領域發揮著極為重要的作用。從安防監控到智能交通,從工業自動化到人機交互,利用 C 處理實時視頻流中的物體跟蹤和行為分析成為了熱門且極具挑戰性的研究與開發方向。本文將深入探討其中…

5G中的隨機接入過程可以不用收RAR?

有朋友提到了一種不用接收RAR的RA過程,問這個是怎么回事。其實在剛剛寫過的LTM cell switch篇章中就有提到,這里把所有相關的內容整理如下。 在RACH-less LTM場景,在進行LTM cell switch之前就要先知道target cell的TA信息,進而才…

git 導出某段時間修改的文件 windows

第一步:列出兩次commitID之間的文件變動 git diff oldid newid --name-only// 例如 git diff 4a886c57a8b5611a2abcfcd120461c2e92f7029a HEAD --name-only 4a886c57a8b5611a2abcfcd120461c2e92f7029a 代表之前 HEAD 代表最新或者換成某次commitID 例如&#xf…