Ansible 从剧本(不是命令行)应用标签

Ansible apply tags from a playbook (not command line)

我 运行 我的剧本 a.yaml,在 a.yaml 中,我想包含 b.yaml 中的一项或多项任务。
首先,我尝试在 a.yaml:

上添加以下内容
import_playbook: b.yaml --tags "tag1"

但是这个错误表明 --tags 不适用于 import_playbook。 根据最新的 Ansible include_tasks 文档,我尝试了以下内容: a.yaml:

- include_tasks:
    file: b.yaml
    apply:
      tags: tag1

b.yaml:

- shell: echo $HOSTNAME
  register: hostname
  tags: tag1

- debug:
    msg: "task2"
  tags: tag2

但是 b.yaml 中的两个任务都被调用了,尽管我只期望第一个如标记所示。

问题:

您尝试做的事 - 很遗憾 - 不可能。
要执行的标签只能在cli上指定。

apply不指定要包含哪些标签,而是将标签应用于包含文件中的每个任务。这意味着它会添加标签,就像您将 tags: tag1 添加到 b.yaml.

中的所有任务一样

如果你只想包含文件的某些任务,他们需要在那个文件中有那个标签,然后你可以在 cli 上使用 --tags "tag1"
我建议您不要过度这样做,因为以后阅读代码的任何人(包括您)都很难找出实际会发生什么。

Meta:请在 Whosebug 上根据 post 只问一个问题。

我不明白你的第二个问题。如果您包含来自不同文件的任务,它们的执行方式与它们直接存在的方式相同,因此您不需要传递任何内容。您可以访问它。

例如像这样:

main.yml:

- hosts: localhost
  tasks:
    - include_tasks:
        file: i.yml
    - debug:
        msg: "{{ tvar.stdout }}"

i.yml:

- shell: date -u
  register: tvar

结果:

TASK [include_tasks] **********************************************************************************
included: /home/.../test/i.yml for localhost

TASK [shell] **********************************************************************************
changed: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => {
    "msg": "ons 14 apr 2021 05:34:25 UTC"
}