我有以下(剥离)Ansible
- import_tasks: clever_stuff.yml
tags: do-stuff
在clever_stuff.yml里面我有
- Name: Task1
... stuff ...
- Name: Task2
... stuff ...
- Name: Task3
set_fact:
my_var: "{{ result.of.above.stuff }}"
- Name: Default case
... stuff ...
when:
- my_var is not defined
tags: always
然后我从命令行调用它作为剧本的一部分
# ansible-playbook clever.yml --skip-tags do-stuff
并且该导入任务的任何内容都无法运行。
我对docs的阅读是导入文件中的所有任务都应用了标签,所以我的"默认情况"实际上标记为"总是,做东西",我说过跳过做的东西。然而,文档也说"有一个特殊的始终标记,它总是会运行一个任务,除非特别跳过( - 始终标记为-skip-tags)"所以我的期望是任务应该被执行,因为我没有明确说明--skip-tags总是。
为什么忽略总是?
我目前的工作是包装任务1,2和3在一个块和标签中使用do-stuff而不是import_tasks上的标签,但它对我的实际用例来说不是最佳的。
答案 0 :(得分:3)
这与导入的任务无关。
原因是因为always
被实现为执行任务的特殊标记,即使使用--tags
选项和某个标记调用Ansible,而不用于覆盖{ {1}}。
考虑一下:
--skip-tags
第三项任务实际上是您导入的任务的样子。
如果您使用---
- hosts: localhost
gather_facts: no
connection: local
tasks:
- name: first task
debug:
tags:
- do-stuff
- name: second task
debug:
tags:
- always
- name: third task
debug:
tags:
- always
- do-stuff
运行此Playbook,则任何指定--skip-tags do-stuff
的任务都将无法运行(即第一和第三)。
如果您使用do-stuff
运行此Playbook,则会运行第二个和第三个任务(--tags other-tag
用于什么)。
答案 1 :(得分:-1)
执行命令:
ansible-playbook clever.yml --skip-tags "do-stuff"
你基本上是说不用该标签执行任务。您要执行的操作无效,因为您正在跳过import_tasks
模块,因此无法从clever-stuff.yml
导入任务。
如果您需要我解释一下,请发表评论。