Ansible - 在运行时访问标记

时间:2016-05-03 21:57:31

标签: ansible jinja2 ansible-playbook

如何在运行时访问通过命令行传递给ansible playbook的标签和skip-tags?

我正在尝试使用$password = 'Ga$man'; 子句实现可以跳过或包含基于tag / skip-tag的项的with_items循环。 This previous SO question涉及同一主题,但采取了不同的方法。 我会评估每次迭代是否存在标记。

例如:

when

2 个答案:

答案 0 :(得分:2)

标签在运行时不可用。标签定义将执行的任务。您可以使用它将标签翻译成事实:

- set_fact:
    image1: True
  tags: image1

- set_fact:
    image2: True
  tags: image2

- set_fact:
    image3: True
  tags: image3

现在您有与您的标签相对应的事实,并且可以在您的条件中使用它们:

...
when: hostvars[inventory_hostname][item] == True
with_items:
  - image1
  - image2
  - image3

但对我来说这感觉不对。这不是标签的目的。标签不应定义主机上安装的软件。这应该在您的组/主机变量中定义。然后标签应该简单地将播放限制为任务的子集,例如更新包,重新启动服务等等。

除了标签,您可以使用extra-vars存档相同的标签。这也为您提供更多控制。如果您在没有提供任何标签的情况下调用您的剧本,则将执行所有任务。

答案 1 :(得分:2)

从2.5开始,ansible添加了一些魔术变量以在运行时进行访问。其中一些是ansible_run_tags。似乎正是您所需要的。

参考:Ansible 2.5 change logs