ansible進階小技巧

用ansible寫playbook的朋友可能會發現,當配置工作很多時,如果在中間過程出錯了,修改后想重新執行,前面的一大堆步驟讓人感覺很煩躁。雖然提供了“retry”文件,但是卻只是根據host來判斷重新執行,仍然不夠方便;又或者,中間的某些步驟特別耗時,比如下載一個很大的數據包,每次執行特別浪費時間,想要特別的跳過。怎么辦?我猜你就是把不需要的部分給注釋掉了。有沒有更好的辦法呢?

當然,現在流行的ansible有提供一種方法解決這個問題。

??? ansible的playbool中有一個關鍵字,叫做tags。tags是什么?就是打標簽。tags可以和一個play(就是很多個task)或者一個task進行捆綁。然后,ansible-playbook提供了“–skip-tags”和“–tags” 來指明是跳過特定的tags還是執行特定的tags。

下面請看例子。

  1. <pre?class=”plain”?name=”code”>#?example?1?test1.yml??
  2. –?hosts:?test-agent??
  3. ??tasks:??
  4. ????–?command:?echo?test1??
  5. ??????tags:???
  6. ?????????–?test1??
  7. ????–?command:?echo?test2??
  8. ??????tags:???
  9. ?????????–?test2??
  10. ????–?command:?echo?test3??
  11. ??????tags:???
  12. ?????????–?test3??

 


當執行? ansible-playbook test1.yml –tags=”test1,test3″? ,則只會執行 test1和test3的echo命令。

當執行? ansible-playbook test1.yml –skip-tags=”test2″? ,同樣只會執行 test1和test3的echo命令。

同理可以適用于play,請看例子

  1. #?example?2?test2.yml??
  2. –?hosts:?test-agent1??
  3. ??tags:???
  4. ?????–?play1??
  5. ??tasks:??
  6. ?????–?command:?echo?This?is??
  7. ?????–?command:?echo?agent1??
  8. –?hosts:?test-agent2??
  9. ??tags:???
  10. ?????–?play2??
  11. ??tasks:??
  12. ?????–?command:?echo?This?is??
  13. ?????–?command:?echo?agent2??
  14. –?hosts:?test-agent3??
  15. ??tags:???
  16. ?????–?play3??
  17. ??tasks:??
  18. ?????–?command:?echo?This?is??
  19. ?????–?command:?echo?agent3??

 

當執行? ansible-playbook test2.yml –tags=”play1,play3″? ,則只會執行 play1和play3的tasks。

當執行? ansible-playbook test2.yml –skip-tags=”play2″? ,同樣只會執行 test1和test3的tasks。

同理還有include和role

  1. –?include:?foo.yml?tags=web,foo
  1. roles:
  2. ??–?{?role:?webserver,?port:?5000,?tags:?[?‘web’,?‘foo’?]?}

你肯定注意到了,這個的一個include和role,同時打了多個tags。是的,這是允許的,而且不同的tags名稱是等效的。多個tags對play和task同樣適用。–skip-tags=”web”和–skip-tags=”foo”,效果是一樣的。如果是–skip-tag=”web,foo”呢?效果還是一樣的。呵呵開玩笑的,我沒有試過,歡迎你試一下。

既然一個job可以有多個tags,那么多個job是否可以有同一個tags呢?答案是肯定的。而且,沒有開玩笑。不行你試試。下面舉例

 

  1. <pre?class=”plain”?name=”code”>#?example?3?test3.yml??
  2. –?command:?echo?task111??
  3. ??tags:??
  4. ?????–?task1??
  5. –?command:?echo?task112??
  6. ??tags:??
  7. ?????–?task1??
  8. –?command:?echo?task333??
  9. ??tags:??
  10. ?????–?task3??
  11. –?command:?echo?task222??
  12. ??tags:??
  13. ?????–?task2??

當執行? ansible-playbook test2.yml –skip-tags=”play1″? ,則只會執行 task3和task2的tasks,task1中的2個task都被skip了。

當執行? ansible-playbook test2.yml –tags=”task2,task3″? ,仍然只會執行 task3和task2的tasks,并且請注意,是按照playbooks中代碼的順序執行,而不是–tags中參數的順序執行。

ansible是根據輸入的tags的參數,與playbook中進行比較,按照playbook的執行順序,跳過或執行特定的tags。對于沒有打tags的部分,沒有影響,正常順序執行。

好了,ansible的tags鄙人就了解這么多,歡迎大家使用tasks管理ansible的playbook。

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/100266

(2)
單爆手單爆手
上一篇 2018-06-03 22:07
下一篇 2018-06-03 22:19

相關推薦

  • 條件判斷與循環筆記

    編程語句總結

    2018-05-10
  • linux 文本處理三劍客

    grep 作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。 模式:由正則表達式字符及文本符所編寫的過濾條件 grep ?命令選項: 正則表達式: 基本正則表達式元字符 ? ? ?字符匹配: 正則表達式: 正則表達式: 正則表達式: 示例:a\|b: a或b ? ?C\|cat :C或cat ? ? ? ? \(C\|c\…

    Linux筆記 2018-04-15
  • Linux系統總結——命令篇

    主分區:1-4一塊硬盤最多4個,不可分小區 可以用來啟動OS(系統分區)

    擴展分區:1-4一塊硬盤做多只有一個,+主分區最多4個,不能創建文件系統,可以創建邏輯分區。

    邏輯驅動器(分區):可以創建文件系統,存放數據。

    2018-03-28
  • 企業監控Zabbix-myself

    基礎

    2018-04-10
  • 第七周 Linux系統啟動流程,kickstart光盤鏡像制作

    一、Linux系統啟動流程 Linux啟動流程可以分為五個階段: 1、BIOS加電自檢 機器啟動后,首先會進行固件(BIOS)的自檢,然后把保存在MBR(主引導記錄)中的主引導加載程序放到內存中; 2、加載主引導加載程序(MBR) 主引導加載程序通過分區表查找活動分區,然后將活動分區的次引導加載程序從設備讀入內存中運行; 3、加載次引導加載程序(GRUB) …

    2018-07-27
  • 統計linux入門到shell腳本之間的基礎練習題。

    答案都由本人奇特思路所創,如有錯誤,請在下面評論,好及時改正!

    Linux筆記 2018-04-15
欧美性久久久久