【问题标题】:Ansible, call specific role tasks via tags isn't working, all tasks are being ranAnsible,通过标签调用特定角色任务不起作用,所有任务都在运行
【发布时间】:2018-03-29 12:23:31
【问题描述】:

我正在使用 Ansible 2.3.2.0,并且正在调用一个正在运行 4 个不同任务的角色。

当我通过剧本调用角色并指定特定标签时,整个角色和所有任务都在运行。我看到这是 ansible 2.0 之后的一个已知问题,建议的修复是在 include 语句下添加一个静态指令。我试过了,但所有任务仍然运行。 这是剧本中的角色声明...

roles:
    - {role: ansible-role-auto-deploy, tags: [ 'ami', 'launch_config', 'asg']}

这里是角色的 main.yml

---

- include: ami.yml
  static: yes
  tags:
    - ami

- include: launch_config.yml
  static: yes
  tags:
    - launch_config

- include: asg.yml
  static: yes
  tags:
    - asg

- include: ami_lc_cleanup.yml
  static: yes
  tags:
    - ami_lc_cleanup

当我使用上面的角色语句运行它时,我希望运行 ami、launch_config 和 asg 任务,但此外,ami_lc_cleanup 任务也正在运行。

所有任务都可以工作,我只是不知道如何限制正在运行的任务。有没有人对如何让它工作(能够通过标签指定任务)有任何建议?

【问题讨论】:

    标签: tags ansible roles


    【解决方案1】:

    条件包含不应使用static: no 定义为静态。

    编辑

    假设您的 cmets 误解了剧本中的 tags 声明。这不是用定义的标签包含角色,而是包含基于命令行给出的标签的角色。

    哪些标签在你的游戏中是活跃的,仅由命令行定义(据我所知,我也在学习 ansible)。

    如果您想在剧本中为角色定义条件,您应该为此使用变量/事实。

    使用ansible-playbook --tags ami,launch_config,asg 调用您的剧本以跳过清理过程。在您的剧本中定义标签时,当ami_lc_cleanup 被定义为命令行上的标签而没有其他三个标签中的任何一个时,您将阻止执行该角色。

    【讨论】:

    • 这没什么用,你能详细说明一下吗?
    • 您将包含定义为static: yes,但在使用when 或在您的情况下为tags 等条件时,它应该是static: no
    • 我尝试切换到静态:没有,也没有区别。使用 --list-tags 和 --list-tasks 选项,我可以看到前 3 个任务正在使用 TAGS:[ami, asg, and launch_config] 运行,然后当它到达最后一个任务时,它正在运行即使它没有在调用剧本中标记。所以它一定是继承了角色的标签...
    • 好的,如果我将剧本角色行设置为: - {role: ansible-role-auto-deploy} 然后使用 --tags ami,asg,launch_config 调用剧本然后它只运行通过 --tags 引用的指定任务
    • 好的,回去阅读关于标签、角色等的 ansible 文档,因为具体用法不是很清楚。喜欢 ansible,有时讨厌他们的文档
    猜你喜欢
    • 2019-12-16
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2021-07-12
    • 1970-01-01
    • 2011-09-25
    • 2017-02-12
    相关资源
    最近更新 更多