【问题标题】:Ansible - run plays on continously instead of linearAnsible - 连续运行而不是线性运行
【发布时间】:2018-04-29 21:31:43
【问题描述】:

我有一个适用于每个主机和角色的列表。它们托管在 hypvervisor (XenServer / ESX) 上。

在执行 ansible 播放之前,我正在尝试将每台机器还原快照。我的动作流程如下所示:

  1. 从文件 (machines.txt) 中获取 VM 名称
  2. 连接 Hypervisor 并通过 CLI 还原机器快照
  3. 一旦机器上的 SSH 启动,连接并执行其余的操作
  4. 一次执行一台机器。

到目前为止,我取得的最好成绩是在一个游戏中在管理程序上执行 revert 任务,然后在另一个游戏中应用角色。这就是我的剧本的样子:

---
  - name: Reverting
    hosts: xenhost
    tasks:
      - include_tasks: tasks/vms/revert_snap.yml
        with_lines: cat "machines.txt"

  - name: Ensure NTP is installed
    hosts: temp
    roles:
      - ntp

到目前为止我找到的解决方案是,

  1. 执行从 CLI 恢复快照的任务并在 Hypervisor 上执行它
  2. 在机器上执行我的整个维护操作 2.1 等待 SSH 在每个 2.2 申请角色

  3. 在 Hypervisor 上清理并拍摄新快照

我在这种情况下的缺点是,首先它会还原所有机器,然后应用所有角色,然后批量还原所有角色。 我不能将这些任务组合成一个游戏,因为它们是在不同的主机上执行的。

有更好的解决方案吗? - 这将还原一台机器,应用所有角色,拍摄快照,然后继续下一台机器。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    Any better solutions? - which will revert one machine, apply all roles, take snapshot, then continue to the next machine.

    您可以将所有这些任务分组到一个角色中,并使用serial: 1 执行该角色

    - hosts: hostgroup
      serial: 1
      roles:
        - {role: rolename }
    

    【讨论】:

    • 我的问题是第一次播放需要在一个主机组上运行,然后其他任务需要在另一个主机组上运行
    • 现在就明白了。在我的工作中没有使用它,也不能肯定地说,但也许你的问题的答案是delegate_to 选项。您可以使用delegate_to 删除与快照相关的任务,并将其集成到角色中。当 ansible 将角色运行到您的每台机器时,它会尝试将快照管理任务委托给管理程序。将serial 1 添加到图片中,即可获得所需的内容。我认为值得一试。 documentation for delegation here
    • 听起来是个值得尝试的想法。我会检查文档并更新
    • 不工作。我已尝试委派任务或角色本身,但 ansible 仍尝试从当前库存机器执行它
    • 好吧,我尝试了一个基本的 delegate_to 任务,我从主机 A(ansible 节点)运行到主机 B,委托给主机 C,它按预期工作(“shell:主机名”任务)。我不知道tasks/vms/revert_snap.yml 中的代码如何对您的问题发表更多评论,但我想您知道得更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多