根据分发版本安装包

Install package depending on distribution release version

我有那个状态:​​

pkg.installed:
- pkgs:
  - libqt4-core
  - libqt4-gui

在新版本中更改了这些包名称之前一直运行良好,现在可以正常运行了:

pkg.installed:
  - pkgs:
    - libqtcore4
    - libqtgui4

如何让它不受系统版本影响?

存在多种可能性,但我认为第一步是在状态(处理)和支柱(数据)之间分离代码。 这样您就可以 'inject' 您所在州的软件包名称,而无需为每个新版本或您想要支持的新 OS 更改它。

使用柱子的简单选项只是针对您的 OS 或释放(使用谷物)一个或另一个柱子的使用,例如

# /srv/pillar/top.sls
base:
  'G@release1':
    - release1
  'G@release2':
    - release2

# /srv/pillar/release1.sls
pkgs:
  - libqt4-core
  - libqt4-gui

# /srv/pillar/release2.sls
pkgs:
  - libqtcore4
  - libqtgui4

# /srv/salt/my_state.sls
pkg.installed:
  - pkgs: {{ salt['pillar.get']('pkg', []) }}

一个更复杂的解决方案是将此状态实现为 'formula' 并使用 map.jinja 根据 release/OS/whatever 定义不同的选项。有关详细信息,请参阅此答案 https://serverfault.com/a/957401/61847。这更复杂但有很多好处:隔离特定软件的代码,抽象 OS 细节,提供合理的默认支柱,以及单独测试这个特定公式的可能性。