如何仅在某些操作系统版本上允许盐栈公式 运行?

How do I allow a salt stack formula to run on only certain operating system versions?

我正在写 SaltStack formula for installation of AWS Application Discovery Service

安装脚本需要某些 OS 版本 - 我如何在我的公式中考虑到这一点?

redis formula 中的 map.jinja 执行以下操作 - 这是正确的方法吗?

{% set os_map = salt['grains.filter_by']({
    'Debian': {
        'pkg_name': 'redis-server',
        'svc_name': 'redis-server',
        'cfg_name': '/etc/redis/redis.conf',
        'cfg_version': salt['grains.filter_by']({
            'wheezy': '2.4',
            'jessie': '2.8',
            'default': '2.8'
}, grain='oscodename'), 

OS要求:

当你在不同的 OS 上有不同的值时需要映射,请看下面 documentation、map.jinja 部分的示例你可能会使用例如以下内容:

{% set mysql = salt['grains.filter_by']({
    'Debian': {
        'server': 'mysql-server',
        'client': 'mysql-client',
        'service': 'mysql',
        'config': '/etc/mysql/my.cnf',
        'python': 'python-mysqldb',
    },
    'RedHat': {
        'server': 'mysql-server',
        'client': 'mysql',
        'service': 'mysqld',
        'config': '/etc/my.cnf',
        'python': 'MySQL-python',
    },
    'Gentoo': {
        'server': 'dev-db/mysql',
        'client': 'dev-db/mysql',
        'service': 'mysql',
        'config': '/etc/mysql/my.cnf',
        'python': 'dev-python/mysql-python',
    },
}) %}

以上代码将使用 serverclientservice 等值,根据 OS 它们将 运行 请注意,我已删除以下 merge=salt['pillar.get']('mysql:lookup')

另一个例子,当你需要在名为 apache2 的 Ubuntu 和名为 httpd 的 Centos 上启动 apache 服务时,你需要查找 table 来处理不同的路径和服务名称。

我之前没有机会尝试随机 OS 的公式,而不是 map.jinja 下定义的 OSes,但我认为它会被破坏。

为了防止公式 运行 出现在不需要的 OS 上,您必须将代码包装在 if statement 之间,例如您的要求之一是 CentOS 6或 CentOS 7 那么 CentOS 5 呢?您可以执行以下操作:

# This will be matched with CentOS/Redhat 6 or higher
{% if grains.os_family == 'RedHat' and grains.osmajorrelease >= '6' %}
# do something
{% endif %}

并且您可以使用 elif 添加更多条件,查看以获取有关 using jinja in states 的更多信息并且不要忘记检查您的仆从的谷物以便在中添加条件使其按预期工作的正确方法。