问题描述
希望您身体健康:)
短篇小说:
使用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