salt-stack - 根据发行版本安装包
问题描述
我有那个状态:
pkg.installed:
- pkgs:
- libqt4-core
- libqt4-gui
在新版本中更改了这些软件包名称之前,它工作正常,现在可以正常工作:
pkg.installed:
- pkgs:
- libqtcore4
- libqtgui4
无论系统版本如何,如何使其工作?
解决方案
存在几种可能性,但我认为第一步是将代码在状态(处理)和支柱(数据)之间分开。这样,您可以“注入”您所在州的软件包名称,而无需为您想要支持的每个新版本或新操作系统更改它。
使用支柱的简单选项只是针对您的操作系统或释放(使用谷物)使用一个支柱或另一个支柱,例如
# /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', []) }}
一个更复杂的解决方案是将此状态实现为“公式”,并使用 amap.jinja
来定义不同的选项,具体取决于版本/操作系统/其他。有关详细信息,请参阅此答案https://serverfault.com/a/957401/61847。这更复杂,但有很多好处:隔离特定软件的代码、抽象操作系统细节、提供健全的默认支柱,以及单独测试这个特定公式的可能性。
推荐阅读
- javascript - 错误:重新渲染过多。React 限制了渲染的数量以防止无限循环。如何防止此错误?
- javascript - 如何识别抛出错误的源匿名函数
- ruby-on-rails - 如何在 Rails 中使用葡萄捕获无效参数
- javascript - React Native 旧数据状态问题
- powerbi - PowerBI 帮助 - 自定义工具提示未按日期筛选
- python - PyCharm 是否可以检测到变量或函数何时没有类型?
- powerbi - Power BI - 创建了一个按钮,但缺少导航到另一个页面的选项
- java - 启动时出现 Intellij 错误:Java:jobScheduler FJ 池
- php - 使用 URL 参数的 PHP 重定向
- php - 无法在 php 中的散列中从数组中获取所需的值