【问题标题】:Ansible apply tags from a playbook (not command line)Ansible 从剧本(不是命令行)应用标签
【发布时间】:2021-04-14 04:41:58
【问题描述】:

我运行我的剧本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

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

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

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

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

    元:请在 Stackoverflow 上的每个帖子只问一个问题。

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

    例如像这样:

    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"
    }
    

    【讨论】:

    • 嗨@toydarian,感谢您的回复。就我而言。 a.yaml 是普通的剧本,我尝试使 b.yaml 成为 a.yaml 等剧本共享的通用类库任务文件。所以直接用标签调用 b.yaml 不是一种选择,因为它是 a.yaml 中流程的一部分,我不想在上面添加 Linux shell 层。第二个问题是为了以防万一我得到了 include_task 以外的答案。问候!
    • 如果你想创建一个“lib”,不要依赖标签来包含它的一部分。我试过了,这太疯狂了,会让你头疼。为每个部分制作一个文件,并始终包含整个文件。如果您发现需要包含其中的一部分,请将该部分拆分到另一个文件中。
    • 已采纳建议。会做。谢谢!
    • 如果您真的想包含文件的一部分,请使用带有when 的条件句。这行得通。
    • 我会记住这个选项,看看我能不能适应它。否则我会分裂。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    • 2017-12-22
    • 2022-10-24
    相关资源
    最近更新 更多