Setze sysctl.conf Parameter mit Puppet

Das war eine Brise in CFEngine … Aber ich bin jetzt in einer Puppenumgebung und muss in der Lage sein, bestimmte sysctl.conf variables zuzuordnen / zu sichern / zu überprüfen. In der CFEngine-Welt konnte ich einfach auf bestimmte Zeilen innerhalb einer configurationsdatei überprüfen … Ich habe einen kleinen Hinweis auf ein Sysctl-module auf dem Puppet-Wiki und ein Projekt in Github gefunden , das zu tun scheint, was ich will.

Aber auch nicht gut dokumentiert Ich suche einfach nach einer Möglichkeit, ein paar Werte wie net.core.rmem_default und net.core.wmem_max zu bearbeiten. Im Format des Projekts, das auf github gehostet wird , sollte die config in meinem init.pp manifest aussehen:

 class sysctl { sysctl::value { "net.core.rmem_default": value => "9000000"; "net.core.wmem_default": value => "9000000"; "net.core.rmem_max": value => "16777216"; "net.core.wmem_max": value => "16777216"; } } 

Durch die Foren und Mailing-listn geht es um Verwirrung über den Unterschied zwischen Puppet-Plugins und moduleen. Die Begriffe werden fast austauschbar verwendet … Ich habe endlich die Notwendigkeit, Pluginsync auf meine Kunden zu aktivieren, um an einigen behaarten Fehlern vorbei zu kommen. Ich dachte, das war ein module!

Die aktuellen Client-Fehler:

 info: Loading downloaded plugin /var/lib/puppet/lib/puppet/type/sysctl.rb info: Loading downloaded plugin /var/lib/puppet/lib/puppet/provider/sysctl/parsed.rb err: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type sysctl::value at /var/lib/puppet/base/modules/sysctl/manifests/init.pp:12 on node shimano.deore.abc.net warning: Not using cache on failed catalog err: Could not retrieve catalog; skipping run 

Irgendwelche Gedanken, wie man das mit dem geringsten Schmerz erreichen kann?

Bearbeiten: Bin ich von diesem Fehler betroffen?

Bearbeiten: Fixed mit Augeas Bibliothek wie von Jeff Ferland und aus dem Puppet Wiki vorgeschlagen .

Ich habe ein sysctl module erstellt …

 class sysctl { # nested class/define define conf ( $value ) { # $name is provided by define invocation # guid of this entry $key = $name $context = "/files/etc/sysctl.conf" augeas { "sysctl_conf/$key": context => "$context", onlyif => "get $key != '$value'", changes => "set $key '$value'", notify => Exec["sysctl"], } } file { "sysctl_conf": name => $operatingsystem ? { default => "/etc/sysctl.conf", }, } exec { "/sbin/sysctl -p": alias => "sysctl", refreshonly => true, subscribe => File["sysctl_conf"], } } 

… und ein anderes module zur Einstellung der relevanten Einstellungen …

 class prod_sysctl { include sysctl sysctl::conf { # increase PID rollover value "kernel.pid_max": value => "1048576"; } } 

  • Verwalten von Service-Passwörtern mit Puppet
  • Wie benutzt man einen benutzerdefinierten Statusbefehl für einen Dienst in der Puppe?
  • Ssh_known_hosts mit Puppe verwalten
  • Wie generiere ich gute Serien für DNS-Zonen mit Puppet?
  • Sind Konfigurations-Management-Tools (Puppet, Chef) in der Lage, installierte Pakete auf dem Laufenden zu halten?
  • NRPE und die Variable $ USER1 $
  • 3 Solutions collect form web for “Setze sysctl.conf Parameter mit Puppet”

    Spezifische Antwort: Sofort spricht man sysctl :: value, aber der Wert wird nicht in deiner sysctl-class deklariert. Siehe dieses Beispiel , das eine sysctl :: conf-Deklaration verwendet. Ohne den define value gibt es keine sysctl :: Wert Unterklasse für Sie zu rufen.


    Allgemeine Antwort und Anleitung: Das Augeas- Konstrukt (siehe auch seine Typenreferenzdokumentation ), das Teil der aktuellen Versionen von Puppet ist, ermöglicht es, Zeilen in einer configurationsdatei zu pflegen und den Kontext zu respektieren. So können Sie fileen wie eine git-configuration verwalten. Das folgende Beispiel zeigt sowohl die functionalität als auch die Aufmerksamkeit auf eine großartige referencesammlung von Puppet configs – den Live-configurationsspeicher für Wikipedia-server.

     [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true [remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = https://gerrit.wikimedia.org/r/p/operations/puppet [branch "production"] remote = origin merge = refs/heads/production 

    Ein einfaches Beispiel aus der obigen configurationsdokumentation wäre das:

     augeas { "sshd_config": context => "/files/etc/ssh/sshd_config", changes => [ "set PermitRootLogin no", ], } 

    Wenn Sie also Ihre /etc/sysctl.conf verwalten möchten, geben Sie folgendes ein:

     augeas { "sysctl": context => "/files/etc/sysctl.conf", changes => [ "set kernel.sysrq = 0", #and whatever other lines are interesting to you ], } 

    Das Augeas-Beispiel hat auch ein Konstrukt für eine sysctl-class auf der Grundlage von Augeus, die ähnlich ist, was du in deiner Frage gepostet hast, also kann auch etwas Licht verschütten.

    Ich habe dieses module in der Vergangenheit mit RHEL5: puppet-sysctl benutzt

    Um es zu benutzen, musst du das module in deinem module-Ordner installieren (wahrscheinlich / etc / puppet / modules / sysctl) die class auf deinem Knoten einbeziehen: (include sysctl) und dann die def-Ressource wie folgt aufrufen:

     class s_sysctl::rhel_defaults { include sysctl # Controls IP packet forwarding sysctl::set_value { "net.ipv4.ip_forward": value => 0 } # Controls source route verification sysctl::set_value { "net.ipv4.conf.default.rp_filter": value => 1 } } 

    Also fragst du dich vielleicht, wo kommt dieser Code eigentlich? Ich organisiere meinen Puppenbaum so:

     site.pp -> nodes.pp -> roles.pp -> /etc/puppet/site-modules/s_sysctl -> /etc/puppet/modules/sysctl 

    Auf diese Weise werden die Site-modulee hiera-data oder Tunables enthalten und die modulee bleiben generisch, steckbar und "modular".

    Solange du den Wert nicht ändern musst (oder mit dem Anfügen von Zeilen mit den neuen Werten zufrieden ist) kannst du die line Common line . Sie können ein Paar von present / absent configurationen verwenden, wenn Sie den Wert ändern.

    Um den Wert zu ändern – vorausgesetzt, die Zeile existiert bereits – können Sie im selben module replace .

    Oder man kann sich anschauen, wie diese Definitionen geschrieben werden, um eine für Ihre Aufgabe geeignet zu machen – was, denkst du, ich denke, ist einfach und gemein genug, dass es von den Standardtypen der Puppe bereitgestellt werden sollte.

    Also, warum nicht? Weil Puppet Sie erwartet, dass Sie die Dinge, die Sie verwalten, vollständig verwalten können. Das heißt, du solltest die ganze sysctl-file verteilen, anstatt nur einen Wert hinzuzufügen oder zu entfernen. Ich sage nicht, das ist unbedingt eine leichte Sache zu tun, aber wenn du damit wegkommst, bist du das einfachste path, es zu tun.

    Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.