根据分发版本安装包
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 细节,提供合理的默认支柱,以及单独测试这个特定公式的可能性。
我有那个状态:
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 细节,提供合理的默认支柱,以及单独测试这个特定公式的可能性。