【问题标题】:How to execute multiple scripts with Salt cmd.script?如何使用 Salt cmd.script 执行多个脚本?
【发布时间】:2023-01-26 03:20:08
【问题描述】:

我正在尝试应用由多个脚本组成的盐态。但由于某些原因只有 script4 正在运行。

这是我的状态文件。

#!jinja|yaml|gpg

Distro_Specific_Scripts:
  cmd.script:
    - name: Run Scripts.sh
  {% if grains['os_family'] == 'RedHat' %}
    - source: salt://scripts/files/scripts/script_for_redhat.sh
  {% elif grains['os_family'] == 'Debian' %}
    - source: salt://scripts/files/scripts/script_for_ubuntu.sh
  {% endif %}
    - source: salt://scripts/files/scripts/script2.sh
    - source: salt://scripts/files/scripts/script3.sh
    - source: salt://scripts/files/scripts/script4.sh

您能分享一下运行多个脚本的经验吗?或者你能告诉我哪里出了问题吗?

【问题讨论】:

  • 你不能重复争论。

标签: salt-stack


【解决方案1】:

有多种写法。

选项1:

这将是最简单的方法。如果你有对应grains['os_family']的脚本,即

  • script_for_debian.sh 适用于 Debian
  • script_for_ubuntu.sh 适用于 Ubuntu
  • script_for_redhat.sh 红帽
run_my_scripts:
  cmd.script:
    - names:
        - salt://scripts/files/scripts/script_for_{{ grains['os_family'] | lower }}.sh
        - salt://scripts/files/scripts/script2.sh
        - salt://scripts/files/scripts/script3.sh
        - salt://scripts/files/scripts/script4.sh

选项 2:

如果没有,那么我们可以有条件地在状态声明之外设置脚本名称:

{% set os_specific_script = salt['grains.filter_by']({
  'Debian': 'script_for_ubuntu.sh',
  'RedHat': 'script_for_redhat.sh'
}) %}

run_my_scripts:
  cmd.script:
    - names:
        - salt://scripts/files/scripts/{{ os_specific_script }}
        - salt://scripts/files/scripts/script2.sh
        - salt://scripts/files/scripts/script3.sh
        - salt://scripts/files/scripts/script4.sh

如果您可以控制脚本的名称,则选项 1 将是更好的选择。

【讨论】:

  • grains.filter_by 正是为此而设计的
  • 同意!谢谢指点,看起来更干净了。我会更新我的答案。
【解决方案2】:

实际上,我找到了实现目标的方法。但是,如果有最聪明的方法来做到这一点,我们将不胜感激:)

#!jinja|yaml|gpg

Distro_Specific_Scripts:
  cmd.script:
    - name: Distro Specific Scripts
  {% if grains['os_family'] == 'RedHat' %}
    - source: salt://scripts/files/scripts/script_for_redhat.sh
  {% elif grains['os_family'] == 'Debian' %}
    - source: salt://scripts/files/scripts/script_for_debian.sh
  {% endif %}
script2:
  cmd.script:
    - name: script2.sh
    - source: salt://scripts/files/scripts/script2.sh
script3:
  cmd.script:
    - name: script3
    - source: salt://scripts/files/scripts/script2.sh
script4:
  cmd.script:
    - name: script4.sh
    - source: salt://scripts/files/scripts/script2.sh

【讨论】:

  • 您无需重复name
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2014-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多