Ansible(8)——循環與條件任務

目錄

一、循環迭代任務:

1、簡單循環:

2、循環字典列表:

3、Ansible 2.5 之前的循環關鍵字:

4、在循環中使用 register 變量:

二、條件任務:

1、使用條件句的常見場景:

2、條件任務語法:

(1)when 語句:

(2)常見條件運算:

3、測試多個條件:

三、組合使用循環與條件任務:


一、循環迭代任務:

? ? ? ? 使用循環使得管理員不必編寫使用同一模塊的多個任務。Ansible 支持使用 loop 關鍵字在一組項目上迭代任務

1、簡單循環:

????????一個簡單循環一個項目( items )列表上迭代一個任務。task 中添加 loop 關鍵字,并將 items 列表進行迭代,其中循環變量 item 保存每次迭代期間使用的值。

? ? ? ? 此外,loop 列表也可以使用變量表示。例如,下圖中的 mail_services 變量包含了需運行服務的列表。

注:有關變量的內容在 Ansible(6)——管理變量中有詳細說明,轉跳鏈接如下:https://blog.csdn.net/m0_68756914/article/details/147026308

2、循環字典列表:

????????循環列表不一定是簡單值列表

? ? ? ? 以下圖中內容為例,當列表的每個項是字典時,任務的結果是 jane 用戶存在且為組 wheel 的成員,joe 用戶也存在且為組 root 的成員。

注:上圖中的每個字典均有兩個鍵:?name 與 groups ,這兩個鍵的值可以分別通過 item['name'] 與 item['groups'] 變量進行檢索。

3、Ansible 2.5 之前的循環關鍵字:

????????在 Ansible 2.5 之前,playbook 使用前綴為 with_ 的不同 loop 關鍵字,這可能在將來的某個時間節點被取消。

注:Ansible 2.5 以前的任何表示方法,均可以用 loop 替代

?循環關鍵字? ? 描述
with_items

?其行為與簡單列表的 loop 關鍵字相同,但其提供的列表將被扁平化為單極列表

(注:item 循環變量會保存每次迭代過程中使用的列表項)

with_file

?需要控制節點文件名列表

(注:item 循環變量會在每次迭代過程中保存文件列表內相應文件的內容)

with_sequence

?需要參數以根據數字序列生成值列表

(注:item 循環變量在每次迭代過程中都會保留生成序列中某個生成項的值)

4、在循環中使用 register 變量:

????????register 關鍵字可用于輸出循環任務結果

二、條件任務:

????????Ansible 可以利用條件語句在符合特定條件時執行任務,管理員可利用條件語句來區分不同的受管主機,并根據它們所符合的條件來分配功能角色 。此外,Playbook 變量、注冊的變量和 Ansible 事實也都可通過條件語句來進行測試,可以使用字符串比較、數學運算符和布爾運算等各種運算符。

1、使用條件語句的常見場景:

(1)在變量中定義硬限制(如 min_memory )并將它受管主機上的可用內存進行比較

(2)Ansible 捕獲命令輸出,以確定某一任務在執行進一步操作前是否已經完成。例如,若某一程序運行失敗,則需要跳過批處理;

(3)利用 Ansible 事實來確定受管主機的網絡配置,并且決定要發送的模板文件(例如,網絡綁定或中繼等);

(4)評估 CPU 數量,來確定如何調節某一 Web 服務器;

(5)將注冊的變量與定義的變量進行比較,以檢查服務的變化。例如,可以以此來驗證文件的 MD5 。

2、條件任務語法:

(1)when 語句:

? ? ? ? when 語句可用于有條件的運行任務,將以要測試的條件作為值,若條件滿足則運行任務,若條件不滿足則跳過該任務。

注:1)最簡單的條件判斷是布爾變量 true / false 、True / False 、yes / no 、1 / 0 ;

? ? ? ?2)when 表達式不屬于模塊,因此必須放在模塊外部;

? ? ? ?3)從 Ansible Core 2.12 起,when 條件語句會始終將字符串視為 true 布爾值。

(2)常見條件運算:

?????運算?????示例
? 等于(值為字符串)? ansible_facts['machine'] == "x86_64"
? 等于(值為數字)? max_memory == 512
? 小于? max_memory < 512
? 大于? max_memory > 512
? 小于等于? max_memory <= 512
? 大于等于? max_memory >= 512
? 不等于? max_memory != 512
? 變量存在? min_memory is defined
? 變量不存在? min_memory is not defined
? 布爾值為 true( 1 、True 、yes 、true )? memory_available
? 布爾值為 false( 0 、False 、no 、false )? not memory_available
? 第一個變量值存在,且作為第二個變量列表中的值? ansible_facts['distribution'] in supported_distros

3、測試多個條件:

????????一個 when 語句可用于評估多個值,用戶可以通過使用 and or 關鍵字組合條件,或使用括號分組條件。

(1)任意條件為真時滿足條件語句,使用 or 關鍵字(上圖紅色方框處);

(2)若兩個條件都必須為真才滿足條件語句,則使用 and 關鍵字(上圖黃色方框處)。

注:除上圖示例中的表示方法外,使用 and 關鍵字組合多個條件語句的另一表示方法如下圖:

(3)使用括號可以對條件進行分組,以表達更復雜的條件語句(上圖藍色方框處);

三、組合使用循環與條件任務:

? ? ? ? 循環與條件任務可以組合使用,組合使用 when 和 loop 時,when 語句將對每一個項目都進行處理

????????上圖中的 ansible.builtin.dnf 模塊在滿足根目錄( / )上掛載的文件系統超過 300000 時,安裝 mariadb-server 軟件包。其中 ansible_facts['mounts'] 事實是一組字典,各代表一個已掛載文件系統的相關事實。上述命令執行時將循環迭代列表中的每一個字典,直到找到兩個條件都為真的已掛載文件系統的字典時,才滿足條件語句。

注:有關事實的內容在 Ansible(7)——管理機密與事實中有詳細說明,轉跳鏈接如下:https://blog.csdn.net/m0_68756914/article/details/147076080

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

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

相關文章

adb|scrcpy的安裝和配置方法|手機投屏電腦|手機聲音投電腦|adb連接模擬器或手機

adb|scrcpy的安裝和配置方法手機投屏電腦|手機聲音投電腦|adb連接模擬器或手機或電視 引言 在數字設備交織的現代生活中&#xff0c;adb&#xff08;Android Debug Bridge&#xff09;與 scrcpy 宛如隱匿的強大工具&#xff0c;極大地拓展了我們操控手機、模擬器乃至智能電視等…

vue3項目集成electron

一、環境準備 1. 確保已安裝 Node.js (建議版本 16.x 或更高) 2. 創建或進入現有 Vue 項目目錄 cd your-vue-project 二、添加 Electron 支持 在項目根目錄執行: vue add electron-builder 執行后會在 `src` 目錄下生成 `background.js` 主進程文件。 三、主進程配置 (ba…

循環神經網絡 - 參數學習之隨時間反向傳播算法

本文中&#xff0c;我們以同步的序列到序列模式為例來介紹循環神經網絡的參數學習。 循環神經網絡中存在一個遞歸調用的函數 &#x1d453;(?)&#xff0c;因此其計算參數梯度的方式和前饋神經網絡不太相同。在循環神經網絡中主要有兩種計算梯度的方式&#xff1a;隨時間反向…

體驗OceanBase的 并行導入功能

在數據庫的日常使用中&#xff0c;會經常遇到以下場景&#xff1a; ?數據復制?&#xff1a;將一個或多個表中的數據復制到目標表中&#xff0c;可能是復制全部數據&#xff0c;也可能僅復制部分數據。數據合并&#xff1a;將數據從一個表轉移到另一個表&#xff0c;或者將多…

Kafka和RocketMQ相比有什么區別?那個更好用?

Kafka和RocketMQ相比有什么區別?那個更好用? Kafka 和 RocketMQ 都是廣泛使用的消息隊列系統&#xff0c;它們有很多相似之處&#xff0c;但也有一些關鍵的區別。具體選擇哪個更好用&#xff0c;要根據你的應用場景和需求來決定。以下是它們之間的主要區別&#xff1a; 1. …

UniApp 實現兼容 H5 和小程序的拖拽排序組件

如何使用 UniApp 實現一個兼容 H5 和小程序的 九宮格拖拽排序組件&#xff0c;實現思路和關鍵步驟。 一、實現目標 支持拖動菜單項改變順序拖拽過程實時預覽移動位置拖拽松開后自動吸附回網格兼容 H5 和小程序平臺 二、功能結構拆解以及完整代碼 完整代碼&#xff1a; <…

[raspberrypi 0w and respeaker 2mic]實時音頻波形

0. 環境 ubuntu22主機&#xff0c; 192.168.8.162&#xff0c; raspberry 0w&#xff0c; 192.168.8.220 路由器 1. 樹莓派 # rpi - send.py # 或者命令行&#xff1a;arecord -D plughw:1,0 -t wav -f cd -r 16000 -c 2 | nc 192.168.8.162 12345import socket imp…

公司內部建立apt源

有一篇建立pypi源的在這里需要的可以查看&#xff1a;公司內部建立pypi源-CSDN博客 背景&#xff0c;公司內部有很多工具僅供內部使用&#xff0c;如果用apt的方式就比較方便&#xff0c;只需要修改sources.list將源添加進去就可以了。我們接下來的操作就是為了實現這個需求。…

UE5中如何修復后處理動畫藍圖帶來的自然狀態下的metablriger身體綁定形變(如聳肩)問題

【[metablriger] UE5中如何修復后處理動畫藍圖帶來的自然狀態下的metablriger身體綁定形變(如聳肩)問題】 UE5中如何修復后處理動畫藍圖帶來的自然狀態下的metablriger身體綁定形變(如聳肩)問題

AWS Bedrock生成視頻詳解:AI視頻創作新時代已來臨

?? TL;DR: AWS Bedrock現已支持AI視頻生成功能,讓企業無需深厚AI專業知識即可創建高質量視頻內容。本文詳解Bedrock視頻生成能力的工作原理、應用場景和實操指南,助你快速掌握這一革命性技術。 ?? AWS Bedrock視頻生成:改變內容創作的游戲規則 還記得幾年前,制作一個專…

1.2 測試設計階段:打造高質量的測試用例

測試設計階段&#xff1a;打造高質量的測試用例 摘要 本文詳細介紹了軟件測試流程中的測試設計階段&#xff0c;包括測試用例設計、測試數據準備、測試環境搭建和測試方案設計等內容。通過本文&#xff0c;讀者可以系統性地了解測試設計的方法和技巧&#xff0c;掌握如何高效…

jQueryHTML與插件

1.jQuery 事件機制 1.1 注冊事件 bind()、on()方法向被選元素添加一個或多個事件處理程序&#xff0c;以及當事件發生時運行的函數 $("p").on({"click": function () {alert("點擊了")},"mouseenter": function () {…

MySQL 觸發器與存儲過程:數據庫的自動化工廠

在數據世界的工業區&#xff0c;有一座運轉高效的自動化工廠&#xff0c;那里的機器人日夜不停地處理數據…這就是 MySQL 的觸發器與存儲過程系統&#xff0c;它讓數據庫從"手工作坊"變成了"現代化工廠"… 什么是 MySQL 觸發器與存儲過程&#xff1f;&…

PostgreSQL-中文字段排序-修改字段的排序規則

最新版本更新 https://code.jiangjiesheng.cn/article/365?fromcsdn 推薦 《高并發 & 微服務 & 性能調優實戰案例100講 源碼下載》 -- 修改字段的排序規則 ALTER TABLE "public"."your_table_name" ALTER COLUMN "name" TYPE varcha…

GitHub優秀項目:數據湖的管理系統LakeFS

lakeFS 是一個開源工具&#xff0c;它將用戶的對象存儲轉換為類似Git的存儲庫。使用戶可以像管理代碼一樣管理數據湖。借助 lakeFS&#xff0c;可以構建可重復、原子化和版本化的數據湖操作--從復雜的ETL作業到數據科學和分析。 Stars 數11090Forks 數3157 主要特點 強大的數據…

頁面編輯器CodeMirror初始化不顯示行號或文本內容

延遲刷新 本來想延遲100毫秒的&#xff0c;但是會出現樣式向左偏移的情況&#xff0c;于是試了試500毫秒&#xff0c;發現就沒有問題了&#xff0c;可能是樣式什么是需要一個加載過程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…

使用 Spring Boot 和 Uniapp 搭建 NFC 讀取系統

目錄 一、NFC 技術原理大揭秘1.1 NFC 簡介1.2 NFC 工作原理1.3 NFC 應用場景 二、Spring Boot 開發環境搭建2.1 創建 Spring Boot 項目2.2 項目基本配置 三、Spring Boot 讀取 NFC 數據3.1 NFC 設備連接與初始化3.2 數據讀取邏輯實現3.3 數據處理與存儲 四、Uniapp 前端界面開發…

臺式電腦插入耳機沒有聲音或麥克風不管用

目錄 一、如何確定插孔對應功能1.常見音頻插孔顏色及功能2.如何確認電腦插孔?3.常見問題二、 解決方案1. 檢查耳機連接和設備選擇2. 檢查音量設置和靜音狀態3. 更新或重新安裝聲卡驅動4. 檢查默認音頻格式5. 禁用音頻增強功能6. 排查硬件問題7. 檢查系統服務8. BIOS設置(可選…

Gerrit的安裝與使用說明(Ubuntu)

#本頁面按192.168.60.148服務器舉例進行安裝配置 1.權限配置 ## 使用root或者有sudo權限用戶執行 # 創建gerrit用戶 sudo useradd gerrit # 設置gerrit用戶的密碼 sudo passwd gerrit # 增加sudo權限 sudo visudo 在root ALL(ALL:ALL) ALL行下添加如下內容 gerrit ALL(ALL:…

Visual Studio 2019 配置VTK9.3.1

文章目錄 參考博客1、 VTK下載和編譯2、vs2019配置vtk9.3.1參考博客 Visual Studio 2022 配置VTK9.3.0 1、 VTK下載和編譯 見博客 CMake編譯VTK 2、vs2019配置vtk9.3.1 新建一個項目 寫入以下代碼 #include <vtkActor.h> #include <vtkAssembly.h> #include…