【问题标题】:Ansible sequential with_items over hosts主机上的 Ansible 顺序 with_items
【发布时间】:2017-10-06 13:25:44
【问题描述】:

我有一种情况,我想遍历一个列表(with_items)并执行一个命令。但是,除非第一项已在所有主机上完成,否则无法启动下一项。我将循环遍历的项目数量将是巨大的。但是,对于正在使用的项目,主机不应该有任何偏差。除非项目 1 在整个主机池中完成,否则任何主机都不应启动项目 2。

为了创建概念证明,我希望实现以下目标

- name: proof of concept
  command: bash -c /home/user/my_test_script.sh
  with_items: 
    - item_1
    - item_2
    ....
    - item_n

其中 my_test_script.sh 在每台主机上都有不同的 sleep(x) 模拟某些可能在执行作业时速度较慢。

我已经查看了 wait_for、wait_until 等。但还没有找到执行并行任务(with_items)的解决方案,该任务(对于列表中的每个项目)“同步”运行(时间不rsync) 用于许多给定的项目。

任何帮助将不胜感激。

【问题讨论】:

    标签: parallel-processing command ansible synchronous


    【解决方案1】:

    相关:Ansible: How to iterate over an role with an array?.

    如果您使用的是 Ansible 2.3.0 或更高版本,请查看include_role。您可以编写一个角色,该角色将使用可变参数调用您的脚本。然后你的剧本可以循环角色。

    角色:

    - name: proof of concept
      command: bash -c /home/user/my_test_script.sh {{ script_param }}
    

    剧本:

      - include_role:
          name: test_script
        with_items:
        - item1
        - item2
        - item3
        vars:
          script_param: "{{ item }}"
    

    【讨论】:

    • 这是否也可以从一个角色内部(这是我目前的情况)
    • 当然,只需将最底层的任务放在你的角色中,而不是test_script
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2019-12-27
    • 1970-01-01
    相关资源
    最近更新 更多