Saltstack Jinja并行循环

问题描述

希望您身体健康:)

我有一个正在运行的jinja循环,不幸的是我不是这样:|

短篇小说:

使用Salt-run进行编排,通过将预定义的节点组作为支柱来实现小兵定位

{% 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循环,该循环可同时处理其中的所有小兵。

您对此有任何想法吗? 谢谢!

解决方法

当我们通过 globbing 或节点组来定位小兵时,已定义的状态将并行应用于它们。因此,实现此目标的一种方法是将“重新启动小兵”功能移至状态文件/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 文件中:

{{1}}

我们运行业务流程时,每个小兵都会运行补丁并并行重启。

,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...