2017-01-05 2 views
0

Ich schreibe eine SaltStack formula für die Installation von AWS Application Discovery Service.Wie kann ich eine Salzstapelformel nur auf bestimmten Betriebssystemversionen ausführen lassen?

Das Installationsskript erfordert bestimmte Betriebssystemversionen - wie kann ich dies in meiner Formel berücksichtigen?

Die map.jinja in der redis formula tut folgendes - ist das der richtige Weg?

{% 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 Bedarf:

  • 14 Ubuntu
  • Amazon Linux 2012.03 oder 2015,03
  • Centos 6 oder 7
  • Redhat 6 oder 7

Antwort

3

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.

Verwandte Themen