【问题标题】:control ansible task file execution控制ansible任务文件执行
【发布时间】:2015-07-02 22:07:56
【问题描述】:

我当前的 Ansible 项目是这样设置的:

backup-gitlab.yml
roles/
   aws_backups/
      tasks/
         main.yml
         backup-vm.yml
   gitlab/
      tasks/
         main.yml
         start.yml
         stop.yml

backup-gitlab.yml需要做以下事情:

  1. 在 gitlab 主机上调用 stop.yml
  2. 在不同的主机上调用 backup-gitlab.yml
  3. 在 gitlab 主机上调用 start.yml

我遇到的问题是 Ansible 似乎不支持选择在同一剧本中的同一角色中运行哪些任务文件的方法。在我使用标签来控制 Ansible 会做什么之前,但在这种情况下,标记 start.ymlstop.yml 的包含语句不起作用,因为 Ansible 似乎没有办法动态更改已应用的标签通过命令行设置后运行。

我想不出一个优雅的方法来实现这一点。

一些选项是:

  1. 让每个任务文件都包含在自己的角色中。这很烦人,因为我最终会得到一百万个没有以任何方式分组的角色。它基本上放弃了整个“角色”概念。
  2. include 与硬编码路径一起使用。随着事情的发展,这很容易出错。此外,由于 Ansible 不推荐将 with_itemsinclude 结合使用(或将任何类型的动态循环与 include 结合使用),我无法再快速更改正在运行的任务文件。我的工作流程中的任何微小变化都需要大量的编码更改。我真的很想坚持使用命令行中的标签来准确控制 Ansible 的功能。
  3. 使用 shell 脚本调用单独的 Ansible playbook。
  4. 在每个 Ansible action 上使用条件(when 子句),并通过设置变量来控制运行的内容。虽然有几个人在 SO 上推荐了这个,但听起来很糟糕。我必须将条件添加到数百个动作中,每次运行剧本时,输出都会被数百个“跳过”语句弄乱。
  5. 利用 Jinja 模板和 ansible 的 local_connection 动态构建静态 main.yml 文件,其中所有必需的任务文件都以正确的顺序包含(使用计算的相对路径)。然后调用计算出的main.yml 文件。这既危险又令人费解。
  6. 使用顶级 Ansible 播放调用较低级别的播放。看起来很乱,当我需要在播放之间传递变量时也会带来问题。使用 Ansible 的 Python Api 可能会有所帮助。

Ansible 努力将 VM 带入幂等状态,但这并不是很有帮助,而且在我看来是一种过时的思维方式(如果我只想要这样的话,我会坚持使用 Chef)。我想利用 Ansible 来实际做一些事情,例如:主动更改配置状态、启动进程、监视事件、对事件做出反应等。本质上,我希望它尽可能多地自动化我的工作。 Ansible 推荐的当前“角色”结构(带有静态配置)不太适合这种范式,尽管他们通过 SSH 使用远程命令执行让我们如此接近梦想。

【问题讨论】:

  • 我想知道是否可以为代理指定多个主机。如果是这样,它将提供一种更加动态的方式来指定在何处运行任务,而不是在游戏中设置静态主机。我认为在这种情况下,这将是选项#2 的更清洁的替代方案,但我仍然需要为每个任务添加一个新行。我认为将每个任务的角色分解为单个角色是最好的解决方案。我对 Ansible 的使用不符合“角色”范式,因为我正在动态更改托管应用程序的状态,因此我不应该尝试将多个任务捆绑到一个角色中

标签: ansible ansible-playbook


【解决方案1】:

只需为这些类型的管理任务使用手册即可。

当然,skip 语句确实会使输出有些混乱。如果你想解决这个问题,你可以进一步将角色分解为aws_backups-setupaws_backups-managment

roles documentation 还提供了一些关于如何在角色上运行 pre_taskspost_tasks 的信息。

【讨论】:

    猜你喜欢
    • 2022-10-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2016-07-03
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多