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
中的两个任务都被调用了,尽管我只期望第一个如标记所示。
问题:
- 如何将标签从
a.yaml
传递到 b.yaml
并得到识别?如果 include_tasks 不是解决方案,我不介意使用其他东西。
- 如何将
b.yaml
的结果(主机名或任何结果)传递回调用方 a.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"
}
我 运行 我的剧本 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
中的两个任务都被调用了,尽管我只期望第一个如标记所示。
问题:
- 如何将标签从
a.yaml
传递到b.yaml
并得到识别?如果 include_tasks 不是解决方案,我不介意使用其他东西。 - 如何将
b.yaml
的结果(主机名或任何结果)传递回调用方a.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"
}