Die Abbildung benötigt wird, Wenn Sie verschiedene Werte auf verschiedenen Betriebssystemen haben, werfen Sie einen Blick auf a t das folgende Beispiel aus dem documentation, in Ihrem Fall map.jinja Teil können Sie die folgende verwenden, zB:
{% 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',
},
}) %}
Der obige Code die Werte von server
verwenden, client
, service
, usw. nach dem OS
sie wird auf Hinweis laufen die ich folgende merge=salt['pillar.get']('mysql:lookup')
ein weiteres Beispiel entfernt haben, wenn Sie apache-Dienst auf Ubuntu apache2
und Namen auf Centos Namen müssen beginnen httpd
so benötigen Sie eine Lookup-Tabelle verschiedene Pfade und Dienstleistungen Namen zu handhaben .
Ich hatte vorher keine Chance, eine Formel auf einem zufälligen OS anders als Betriebssysteme zu versuchen, die unter map.jinja definiert sind, aber ich denke, dass es gebrochen wird.
Um zu verhindern, dass die Formel unter Unerwünschten Betriebssystemen ausgeführt wird, müssen Sie Ihren Code zwischen if statement
umwandeln, z. B. eine Ihrer Anforderungen ist CentOS 6 oder CentOS 7. Was ist mit CentOS 5? Sie können Folgendes tun:
# This will be matched with CentOS/Redhat 6 or higher
{% if grains.os_family == 'RedHat' and grains.osmajorrelease >= '6' %}
# do something
{% endif %}
Und Sie elif
können mehrere Bedingungen hinzufügen möchten, werfen Sie einen Blick auf mehr Informationen über using jinja in states bekommen und vergessen Sie nicht die Körner Ihrer Günstlinge, um zu überprüfen Bedingungen hinzuzufügen in ein korrekter Weg, damit es wie erwartet funktioniert.