日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

ansible模塊之include_tasks:為什么加了tags后導入的任務沒有執行?

作者:GottdesKrieges 更新時間: 2022-07-02 編程語言

ansible模塊之include_tasks:為什么加了tags后導入的任務沒有執行?

  • 場景再現
  • 原因分析
  • 解決辦法

本文中ansible的版本為2.9。

場景再現

下面是Role中的要測試的任務:

# role01.yml
# ...前面的tasks

- name: included task for test
  include_tasks: test01.yml
  tags: 
    - test01

# ... 后面的tasks

在執行整個Role時,test01.yml會被正常導入playbook并執行:

$ ansible-playbook -i hosts.ini all role01.yml

但是當我們想通過tags單獨測試這個任務時,

$ ansible-playbook -i hosts.ini all role01.yml --tags "test01"

奇怪的事情發生了:include_tasks本身這個任務執行成功了,但是被導入的test01.yml卻并沒有被執行!

原因分析

在對include_tasks任務使用tags時,只會對include_tasks任務本身生效,而并不會對其中包含的任務生效。

那如果我們要對其中包含的任務也生效,該怎么做呢?

解決辦法

可以通過include_tasks模塊的apply參數,為包含的任務添加標簽。

將上面的任務改成下面的形式

# role01.yml
# ...前面的tasks

- name: included task for test
  include_tasks: 
    file: test01.yml
    apply:
      tags: test01
  tags: always

# ... 后面的tasks

然后調用即可:

$ ansible-playbook -i hosts.ini all role01.yml --tags "test01"

注意,上面的 tags: always 不能省略,否則 include_tasks本身不會被執行。always標簽只對include_tasks本身生效。在調用其他tags時,include_tasks也會always執行,但是其中包含的任務不會被執行。

原文鏈接:https://blog.csdn.net/Sebastien23/article/details/122648720

欄目分類
最近更新