Amazon web services 如何允许盐栈公式仅在特定的操作系统版本上运行?
我正在为安装写一篇文章 安装脚本需要某些操作系统版本-我如何在公式中说明这一点 中的map.jinja执行以下操作-这是正确的方法吗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',
{% 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号
{% 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
添加更多条件,查看更多信息,不要忘记检查您的仆从的粒度,以便以正确的方式添加条件,使其按预期工作