Ansible如何控制playbook的執行順序

對 Ansible 劇本資源打標簽

在處理大型或復雜的劇本時,如果只希望運行部分劇本或部分任務。可以將標簽應用于可能要跳過或運行的特定資源。

通過標簽來標記資源,在資源上使用tags關鍵字,然后是要應用的標記列表。在Ansible中tags標記可用于下列資源:

  • 每個任務,這是使用標簽的最常見方式之一。
  • 整個劇本,在劇本級別使用標簽指令。
  • 標記include_tasks任務。include_tasks加載的所有任務都與此標簽關聯。
  • 角色,角色中的所有任務都與此標簽關聯。
  • 任務塊,塊中的所有任務都與此標簽關聯。

看一個Demo,上面的標記依次來看體驗下。在這之前,先準備一個角色,角色做一個echo的動作,

$ansible-galaxy  init tag_role --init-path=roles
- tag_role was created successfully
$ansible-galaxy  list | grep tag
- tag_role, (unknown version)
$cat roles/tag_role/tasks/main.yml
---
# tasks file for tag_role
- name: tags rolesshell: echo 'tasks  for tag_role'

編寫一個劇本,在不同劇本資源執行塊打上標簽

---
- name: tags Demo 1hosts: servera# 標記整個劇本tags:- play-tag-1roles:- role: tag_role# 標記角色tags:- role-tagstasks:- name: task 1 tagshell: echo 'tags to task 1'# 標記每個任務tags:- task-tags-1- name: include or import a  tasks fileinclude_tasks:file: tasks_file# 標記include_tasks任務  tags:- include-import- block:- name: task 1 in blockshell: echo 'task 1 in block'- name: task 2 in blockshell: echo 'task 2 in block'#  標記任務塊  tags:- block-tags
- name: tags Demo 2hosts: servera# 標記整個劇本tags:- play-tag-2tasks:- name: task 2 tagshell: echo 'tags to task 2'tags:- task-tag-2

執行上面編寫劇本,默認情況下打了標簽,如果沒有顯示的指令或者設置特殊的標簽,劇本默認依舊按照沒打標簽的順序執行

$ansible-playbook tags.yaml
PLAY [tags Demo 1] ************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [servera]
TASK [tag_role : tags roles] **************************************************************************
changed: [servera]
TASK [task 1 tag] *************************************************************************************
changed: [servera]
TASK [include or import a  tasks file] ****************************************************************
included: /home/student/DO447/labs/task-execution/tasks_file for servera
TASK [task 1] *****************************************************************************************
changed: [servera]
TASK [task 2] *****************************************************************************************
changed: [servera]
TASK [task 1 in block] ********************************************************************************
changed: [servera]
TASK [task 2 in block] ********************************************************************************
changed: [servera]
PLAY [tags Demo 2] ************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [servera]
TASK [task 2 tag] *************************************************************************************
changed: [servera]
PLAY RECAP ********************************************************************************************
servera                    : ok=10   changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

管理標記的資源

要列出 Playbook 中的所有標記,使用–list-tags選項

$ansible-playbook tags.yaml  --list-tagsplaybook: tags.yamlplay #1 (servera): tags Demo 1        TAGS: [play-tag-1]TASK TAGS: [block-tags, include-import, play-tag-1, role-tags, task-tags-1]play #2 (servera): tags Demo 2        TAGS: [play-tag-2]TASK TAGS: [play-tag-2, task-tag-2]
$

可以看到,上面的劇本的標簽構成:

  • 劇本tags Demo 1 包含標簽TASK TAGS: [block-tags,include-import, play-tag-1, role-tags, task-tags-1]
  • 劇本tags Demo 2 包含標簽play-tag-2, task-tag-2

當希望運行特定的劇本資源時,給對應的資源標記打標簽,然后使用ansible-playbook運行playbook時,添加–tags選項來篩選 playbook 僅運行帶有特定標簽的play 或任務。

$ansible-playbook tags.yaml  --tags=play-tag-2
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

運行指令里添加了 --tags=play-tag-2,即只運行劇本tags Demo 2,當需要運行多個標簽時,之間逗號隔開

$ansible-playbook tags.yaml  --tags=block-tags,role-tags
PLAY [tags Demo 1] *************************************************************************************************
TASK [tag_role : tags roles] ***************************************************************************************
changed: [servera]
TASK [task 1 in block] *********************************************************************************************
changed: [servera]
TASK [task 2 in block] *********************************************************************************************
changed: [servera]
PLAY [tags Demo 2] *************************************************************************************************
PLAY RECAP *********************************************************************************************************
servera                    : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

當希望運行大多數劇本資源,個別劇本資源不運行,可以在運行ansible-playbook命令時,使用–skip-tags選項跳過帶有特定標簽的任務。

$ansible-playbook tags.yaml  --list-tagsplaybook: tags.yamlplay #1 (servera): tags Demo 1        TAGS: [play-tag-1]TASK TAGS: [block-tags, include-import, play-tag-1, role-tags, task-tags-1]play #2 (servera): tags Demo 2        TAGS: [play-tag-2]TASK TAGS: [play-tag-2, task-tag-2]      
$ansible-playbook tags.yaml  --skip-tags play-tag-1
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
$

特殊的標簽

如果有些劇本資源,你希望它始終運行,或是希望它始終不運行,即使在你使用tags、skip-tags指定標簽的情況下,Ansible 這兩種場景中提供了特殊標記:

  • always:帶有 always 標記的資源始終都會運行,除非明確指定–skip-tags always選項。
  • never:帶有 never 特殊標記的資源不會運行,除非明確指定–tags never選項。

看一個Demo

$cat tags-all.yaml
---
- name: tags Demo 1hosts: serveratags:- play-tag-1- neverroles:- role: tag_roletags:- role-tagstasks:- name: task 1 tagshell: echo 'tags to task 1'tags:- task-tags-1- name: include or import a  tasks fileinclude_tasks:file: tasks_filetags:- include-import- block:- name: task 1 in blockshell: echo 'task 1 in block'- name: task 2 in blockshell: echo 'task 2 in block'tags:- block-tags
- name: tags Demo 2hosts: serveratags:- alwaystasks:- name: task 2 tagshell: echo 'tags to task 2'

可以看到劇本1設置never標簽,所以默認總不會執行,劇本2設置always,所以默認總會執行

$ansible-playbook  tags-all.yaml
PLAY [tags Demo 1] *************************************************************************************************
PLAY [tags Demo 2] *************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [servera]
TASK [task 2 tag] **************************************************************************************************
changed: [servera]
PLAY RECAP *********************************************************************************************************
servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
$

執行輸出可以看到,劇本1沒有執行,劇本2默認執行,這里,可能有小伙伴會說,如果我希望打標簽的資源全部執行或者全部不執行,但是我的標簽太多了,都寫上很麻煩,況且我還有一些沒有打標簽的任務,我應該如何處理,Ansible在這些場景中提供了一些指令參數。

命令行指定標簽時的特定參數:

  • tagged 標記將運行任何帶有顯式標記的資源
  • untagged 標記將運行不帶有顯式標記的資源
  • all 參數將包括 Play 中的所有任務,無論是否帶有標記,這是默認行為。

在來看看Demo

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

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

相關文章

1-4.時間序列數據建模流程范例

文章最前: 我是Octopus,這個名字來源于我的中文名–章魚;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github ;這博客是記錄我學習的點點滴滴,如果您對 Python、Java、AI、算法有興趣,可以關注我的…

信息學奧賽初賽天天練-41-CSP-J2021基礎題-n個數取最大、樹的邊數、遞歸、遞推、深度優先搜索應用

PDF文檔公眾號回復關鍵字:20240701 2021 CSP-J 選擇題 單項選擇題(共15題,每題2分,共計30分:每題有且僅有一個正確選項) 4.以比較作為基本運算,在N個數中找出最大數,最壞情況下所需要的最少比…

我在中東做MCN,月賺10萬美金

圖片|Photo by Ben Koorengevel on Unsplash ©自象限原創 作者丨程心 在迪拜購物中心和世界最高建筑哈利法塔旁的主街上,徐晉已經“蹲”了三個小時,每當遇到穿著時髦的年輕男女,他都會上前詢問,有沒有意愿成為…

【計算機網絡】常見的網絡通信協議

目錄 1. TCP/IP協議 2. HTTP協議 3. FTP協議 4. SMTP協議 5. POP3協議 6. IMAP協議 7. DNS協議 8. DHCP協議 9. SSH協議 10. SSL/TLS協議 11. SNMP協議 12. NTP協議 13. VoIP協議 14. WebSocket協議 15. BGP協議 16. OSPF協議 17. RIP協議 18. ICMP協議 1…

網頁自動化測試開發中記錄pytest

1切換cmd文件目錄C:\Users\14600>D: D:\>cd D:\worksoftware D:\worksoftware>2單個py文件打包成.exe文件1.pyinstaller -F -c (項目主文件)test_01shouye.py 該路徑下存在文件名,主項目文件 test_01shouye.py 2.執行spec文件: pyinstaller -F …

C語言部分復習筆記

1. 指針和數組 數組指針 和 指針數組 int* p1[10]; // 指針數組int (*p2)[10]; // 數組指針 因為 [] 的優先級比 * 高,p先和 [] 結合說明p是一個數組,p先和*結合說明p是一個指針 括號保證p先和*結合,說明p是一個指針變量,然后指…

Web2Code :網頁理解和代碼生成能力的評估框架

多模態大型語言模型(MLLMs)在過去幾年中取得了爆炸性的增長。利用大型語言模型(LLMs)中豐富的常識知識,MLLMs在處理和推理各種模態(如圖像、視頻和音頻)方面表現出色,涵蓋了識別、推…

系統中非功能性需求的思考

概要 設計系統時不僅要考慮功能性需求,還要考慮一些非功能性需求,比如: 擴展性可靠性和冗余安全和隱私服務依賴SLA要求 下面對這5項需要考慮的事項做個簡單的說明 1. 可擴展性 數據量增長如何擴展? 流量增長如何擴展&#xf…

【LLM教程-llama】如何Fine Tuning大語言模型?

今天給大家帶來了一篇超級詳細的教程,手把手教你如何對大語言模型進行微調(Fine Tuning)!(代碼和詳細解釋放在后文) 目錄 大語言模型進行微調(Fine Tuning)需要哪些步驟? 大語言模型進行微調(Fine Tuning)訓練過程及代碼 大語言…

VuePress介紹

從本文開始,動手搭建自己的博客!希望讀者能跟著一起動手,這樣才能真正掌握。 ? VuePress 是什么 VuePress 是由 Vue 作者帶領團隊開發的,非常火,使用的人很多;Vue 框架官網也是用了 VuePress 搭建的。即…

000.二分查找算法題解目錄

000.二分查找算法題解目錄 69. x 的平方根(簡單)

4PCS點云配準算法實現

4PCS點云配準算法的C實現如下&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/distances.h> #include <pcl/common/transforms.h> #in…

唯一ID:UUID 介紹與 google/uuid 庫生成 UUID

UUID 即通用唯一識別碼&#xff0c;是一種用于計算機系統中以確保全局唯一性的標識符。其標準定義于 RFC 4122 文檔中。標準形式包含 32 個 16 進制數字&#xff0c;以連字符切割為五組&#xff0c;格式為 8-4-4-4-12&#xff0c;總共 36 個字符。&#xff08;形如, d169aa7f-4…

php 通過vendor文件 生成還原最新的composer.json

起因&#xff1a;因為歷史原因&#xff0c;在本項目中composer.json基本算廢了&#xff0c;沒法直接使用composer管理擴展&#xff0c;今天嘗試修復一下composer.json。 歷史文件&#xff0c;可以看出來已經很久沒有維護了&#xff0c;我們主要是恢復require的信息 {"na…

K8s節點維護流程

用途 用于下線異常節點、集群縮容等 操作步驟 1. 查看節點名稱 先確認節點的名稱 kubectl get node -o wide2. 設置節點不可調度 設置節點不可調度狀態&#xff0c;禁止新的pod調度到該節點上 kubectl cordon ${node_name}3. 剔除節點上運行的pod&#xff08;生產環境慎…

Spring Boot中集成Redis實現緩存功能

Spring Boot中集成Redis實現緩存功能 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討如何在Spring Boot應用程序中集成Redis&#xff0c;實現…

AP無法上線原因分析及排障

一、AP未分配到IP地址 如果遇到AP無法上線問題&#xff0c;可以檢查下AP是否分配到IP地址。AP獲取IP地址有兩種方式&#xff1a;靜態方式&#xff1a;登錄到AP設備&#xff0c;手工配置IP地址&#xff0c;該方式操作起來比較麻煩&#xff0c;不推薦使用&#xff1b;DHCP方式&am…

基于CNN的股票預測方法【卷積神經網絡】

基于機器學習方法的股票預測系列文章目錄 一、基于強化學習DQN的股票預測【股票交易】 二、基于CNN的股票預測方法【卷積神經網絡】 文章目錄 基于機器學習方法的股票預測系列文章目錄一、CNN建模原理二、模型搭建三、模型參數的選擇&#xff08;1&#xff09;探究window_size…

下代iPhone或回歸可拆卸電池,蘋果這操作把我看傻了

剛度過一個愉快的周末&#xff0c;蘋果又雙叒叕攤上事兒了。 iPhone13 系列被曝扎堆電池鼓包了。 早在去年&#xff0c;就有 iPhone13 和 iPhone14 用戶反饋過類似的問題&#xff0c;表示在手機僅僅使用了一年多的時間就出現了電池鼓包的情況&#xff0c;而且還把屏幕給撐起來了…

舞會無領導:一種樹形動態規劃的視角

沒有上司的舞會 Ural 大學有 &#x1d441; 名職員&#xff0c;編號為1~&#x1d441;。 他們的關系就像一棵以校長為根的樹&#xff0c;父節點就是子節點的直接上司。 每個職員有一個快樂指數&#xff0c;用整數 &#x1d43b;&#x1d456; 給出&#xff0c;其中1≤&…