【问题标题】:Ansible playbooks dependency issuesAnsible 剧本依赖问题
【发布时间】:2023-04-04 05:21:01
【问题描述】:

我有一个使用案例,其中存在对剧本的依赖。我有一组主机在我的所有机器上启动应用程序,然后是另一组实际机器的主机。

现在我的问题是,只有当第一个 playbook 成功执行并且应用程序启动时,ansible 是否可以运行第二个 playbook(比如说更新包)。我在这里遇到的问题是,虽然第一个不成功并且应用程序没有启动,但第二个剧本仍在运行

在这里,我从有权访问我所有机器的远程机器启动应用程序,并且需要在每台机器上完成更新包。因此,它们是两个相互依赖的不同剧本。

First playbook
  hosts: A
  tasks: 
    - name: check if app started and ready
      command: x

Second Playbook
  hosts: B
  tasks:
    - name: run y command from B machine to execute on A
      command: y

这里的问题是第二个剧本不关心命令 X 是否被执行。一旦第一个剧本完成(无论成功还是失败,第二个剧本都开始了,因为它们属于不同的机器)

【问题讨论】:

  • 您是否有机会分享这些剧本以及您如何运行它们,以便为我们提供一个开始调试/工作的地方?
  • @Geoff 我已经更新了这个问题。您对此有任何可能的解决方案吗?
  • 下面没有比布鲁斯更好的了。

标签: ansible


【解决方案1】:

如果戏剧看起来是直接相互依赖的,那么我不会将它们分成不同的剧本,而是分成同一剧本中使用的角色。您需要在第一个角色的任务中的某处注册一个变量,以便可以在第二个角色中使用它:

- hosts: first-set
  roles:
    - { role: update-app } # registers update_was_good

- hosts: second-set
  roles:
  - update-packages
    when: update_was_good

【讨论】:

  • 您好@Bruce 感谢您的回答。您能否给出确切的语法,以便我验证它是否有效。提前致谢
  • 任务- name: check if app started and ready 会有一些返回值(例如 stdout_lines),你可以注册它。有关详细信息,请参阅docs.ansible.com/ansible/latest/reference_appendices/…。您必须根据该任务的结果 register 一个变量,以传递给以后的任务。
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多