Amazon web services 如何允许盐栈公式仅在特定的操作系统版本上运行?

Amazon web services 如何允许盐栈公式仅在特定的操作系统版本上运行?,amazon-web-services,salt-stack,Amazon Web Services,Salt Stack,我正在为安装写一篇文章 安装脚本需要某些操作系统版本-我如何在公式中说明这一点 中的map.jinja执行以下操作-这是正确的方法吗 {% set os_map = salt['grains.filter_by']({ 'Debian': { 'pkg_name': 'redis-server', 'svc_name': 'redis-server', 'cfg_name': '/etc/redis/redis.conf',

我正在为安装写一篇文章

安装脚本需要某些操作系统版本-我如何在公式中说明这一点

中的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'), 
操作系统要求:

  • Ubuntu 14
  • 亚马逊Linux 2012.03或2015.03
  • Centos 6或7
  • 红帽6号或7号

当您在不同的操作系统上有不同的值时,需要进行映射,请查看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',
    },
}) %}
上述代码将根据运行它们的
OS
使用
server
client
service
等值 注意,我已经删除了下面的
merge=salt['pillar.get']('mysql:lookup')

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

我以前没有机会在随机操作系统上尝试一个公式,而不是在map.jinja下定义的操作系统,但我认为它会被打破

为了防止公式在不需要的操作系统上运行,您必须在
if语句
之间包装代码。例如,您的一个需求是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
添加更多条件,查看更多信息,不要忘记检查您的仆从的粒度,以便以正确的方式添加条件,使其按预期工作。

当您在不同的操作系统上有不同的值时,需要映射,从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',
    },
}) %}
上述代码将根据运行它们的
OS
使用
server
client
service
等值 注意,我已经删除了下面的
merge=salt['pillar.get']('mysql:lookup')

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

我以前没有机会在随机操作系统上尝试一个公式,而不是在map.jinja下定义的操作系统,但我认为它会被打破

为了防止公式在不需要的操作系统上运行,您必须在
if语句
之间包装代码。例如,您的一个需求是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
添加更多条件,查看更多信息,不要忘记检查您的仆从的粒度,以便以正确的方式添加条件,使其按预期工作