salt stack jinja for 并行循环

saltstack jinja for loop in parallel

希望你身体健康:)

我有一个 jinja 循环正在工作,不幸的是不是我想要的方式:|

短篇小说:

使用 salt-run 进行编排,minion 目标是通过将 pre-defined 节点组作为支柱传递来实现的

{% set minions = salt.saltutil.runner('cache.mine', tgt=nodegroup,tgt_type='nodegroup').keys() %}
{% for minion_id in minions %}

patch-n1-{{ minion_id }}:
  salt.state:
    - tgt: {{ minion_id }}
    - sls:
      - patching.patch-n1
    - pillar:
        minion_id: {{ minion_id }}

reboot_minion-{{ minion_id }}:
  salt.function:
    - name: cmd.run_bg
    - arg:
      - 'salt-call system.reboot 1'
    - tgt: {{ minion_id }}

{% endfor %}

问题是在这个循环中,两个任务都是一个接一个地执行的。就我而言,这效率不高......

如果删除循环,两种状态都会应用,但同样无济于事。

主要目标是为节点组中彼此独立的每个小兵应用 patch-n1-{{ minion_id }} 和 reboot_minion-{{ minion_id }}。 或者换句话说,我需要一个 for 循环,它可以同时为其中的所有 minions 工作。

你对此有什么想法吗? 谢谢!

当我们通过 globbing 或节点组来定位小兵时,定义的状态将并行应用于它们。因此,实现此目的的一种方法是将“重启小黄人”功能移动到状态文件 patch-n1.sls 本身。

示例 /srv/salt/patch-n1.sls 文件:

# Some tasks to perform patching, just using 'include' for example
# from /srv/salt/patching/os_pkg.sls
include:
- patching.os_pkg

reboot-after-package-update:
  module.run:
  - name: system.reboot

并在编排 /srv/salt/orch/patch_all.sls 文件中:

patch-group1:
  salt.state:
  - tgt: group1
  - tgt_type: nodegroup
  - sls:
    - patch-n1

patch-group2:
  salt.state:
  - tgt: group2
  - tgt_type: nodegroup
  - sls:
    - patch-n2

当我们 运行 编排时,每个 minion 将 运行 并行修补和重启。

system.reboot 对我的情况没有帮助,因为我的仆从是混合的 (Windows, Linux)

reboot-after-package-update:
  module.run:
  - name: system.reboot
I was able to achieve my goal by:
# Some tasks to perform patching, just using 'include' for example
# from /srv/salt/patching/uptodate.sls

include:
- patching.uptodate

reboot-after-package-update:
  cmd.run:
    - name: shutdown -r -t 60

{% set stage = pillar['stage'] %}

{% set nodegroup = salt['pillar.get']('nodegroup', 'PILLAR nodegroup NOT FOUND!') %}

{% set minions = salt.saltutil.runner('cache.mine', tgt=nodegroup,tgt_type='nodegroup').keys() %}

wait_for_reboot-{{ stage }}:
  salt.wait_for_event:
    - name: salt/minion/*/start
    - id_list: {% for minion_id in minions %}
      - {{minion_id}}{% endfor %}
    - timeout: 6000
    - require:
      - cmd: reboot-after-package-update