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
希望你身体健康:)
我有一个 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