2016-04-12 4 views
0

Bis vor kurzem haben wir Marionette auf eine sehr einfache Art und Weise verwendet. Um iptables zu verwalten, haben wir eine iptables-save-Datei erstellt und diese geladen. Ich möchte unser iptables-Management neu gestalten und das puppetlabs/firewall-Modul verwenden.Marionette: Verwendung von YAMLs mit Puppetlabs/Firewall

Best Practices schlagen vor, dass ich .yaml-Dateien verwenden, um damit umzugehen, aber ich habe eine Menge Probleme mit Hiera() und Yamls.

ich common.yaml möchte eine Liste von Bereichen mit einer gewissen Gruppe zugeordnet haben:

firewall_group: 
    localdomain: 
    - 10.0.0.3/32 
    - 10.10.0.0/26 
    anotherdomain: 
    - 172.0.1.0/26 

Und ich möchte in einem anderen {$ certname} .yaml eine Liste von Ports enthalten, die der Host akzeptieren Zugang aus von einer Liste der Gruppen:

ports: 
    ssh: 
    number: 22 
    groups: 
     - localdomain 
    http: 
    number: 80 
    groups: 
     - localdomain 
     - anotherdomain 

Was ist der beste Weg, um diese Firewall-Regeln mit Puppet Labs/Firewall erstellen? (Angenommen, die Hiera.Yaml sucht diese .Yaml-Dateien korrekt) Ich setze die .pp-Datei in die Datei custom_fw/manifests/core.pp, die init.pp enthält.

Ich habe versucht, die $ ports.each-Methode und die create_resources() -Methode zu verwenden Suche nach "verschachtelte Yaml-Loop-Puppe", aber ich bin mir sicher, dass ich einen Fehler gemacht, der die Marionette fehlschlagen.

Vielen Dank im Voraus für jede Einsicht!

Antwort

1

Ich habe einige Zeit mit diesem speziellen Problem verbracht und kam zu der folgenden Lösung.

Erstens, erhalten Sie mein Modul alexharvey/firewall_multi. Zum Zeitpunkt des Schreibens würden Sie auch das neueste Puppetlabs/Firewall-Modul (v1.8.0) benötigen, obwohl ich bereit bin, mein Modul für jeden zu patchen, der Kompatibilität mit früheren Versionen der Puppet Labs Firewall benötigt.

Das Modul firewall_multi stellt dem Firewall-Modul von Puppet Labs ein Multiplexer-Frontend zur Verfügung, mit dem wir Arrays von Quellen und Zielen festlegen können.

Zweitens benötigen Sie Hiera Version 3, die die alias lookup function hat, mit der Sie einen Alias ​​für ein Hiera-Array definieren können, das an anderer Stelle in Hiera verwendet werden kann.

Sie können dies jetzt tun:

--- 
mylocaldomain: 
    - 10.0.0.3/32 
    - 10.10.0.0/26 
myotherdomain: 
    - 172.0.1.0/26 

myclass::firewall_multis: 
    '00099 accept tcp port 22 for ssh': 
    dport: '22' 
    action: 'accept' 
    proto: 'tcp' 
    source: "%{alias('mylocaldomain')}" 
myotherclass::firewall_multis: 
    '00200 accept tcp port 80 for http': 
    dport: '80' 
    action: 'accept' 
    proto: 'tcp' 
    source: "%{alias('myotherdomain')}" 

Und:

class myclass (
    $firewall_multis, 
) { 
    validate_hash($firewall_multis) 
    create_resources(firewall_multi, $firewall_multis) 
    ... 
} 

class myotherclass (
    $firewall_multis, 
) { 
    validate_hash($firewall_multis) 
    create_resources(firewall_multi, $firewall_multis) 
    ... 
} 
+0

Thank you! Ich konnte firewall_multi leider nicht zum arbeiten bringen. Ich schaffte es, herauszufinden, wie ich meine Frage mit .each() lösen konnte, obwohl es etwas Feingefühl erforderte. –

+0

Wenn Sie mich wissen lassen könnten, was schief gelaufen ist, als Sie versucht haben, firewall_multi zu verwenden, wäre ich Ihnen dankbar. Sie sollten keine Schleife über Ports (Ports.each usw.) brauchen, da das Firewall-Modul (das Puppet Labs) bereits ein Array von Ports als Eingabe akzeptiert. Fyi –

+0

Oh Entschuldigung, ich verstehe. Sie haben Ihren Hash in Hiera "Ports" aufgerufen. Ok, ignoriere meinen Kommentar. –

Verwandte Themen