Ansible 2.5 import_tasks,always和skip-tags

时间:2018-05-24 15:55:34

标签: ansible

我有以下(剥离)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上的标签,但它对我的实际用例来说不是最佳的。

2 个答案:

答案 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导入任务。

如果您需要我解释一下,请发表评论。