Puppet – Aktionen pro Umgebung beschränken?

Puppet – Aktionen pro Umgebung beschränken?

Wie kann ich die Puppet-Agent-Befehle einschränken? Ich muss nur zulassen, dass der Puppet-Agent ohne Noop im Produktionszweig ausgeführt wird.

  • Blockpuppet agent --test --environment devbranch
  • Erlaubenpuppet agent --test --environment devbranch --noop
  • Erlaubenpuppet agent --test --environment production

Ich denke, dass das mit einer Art Zauberei in auth.conf zu erledigen wäre, aber ich kenne mich damit nicht gut genug aus.

Antwort1

Dank @Zoredache habe ich es geschafft, diesen Build so zu gestalten, wie ich ihn brauche.

Ich verwende den Abschnitt [main], um Zweige dynamisch zu erstellen und zu verwalten, und [production], um die Noop-Einstellung zu überschreiben. Ich bin sicher, dass dies auch in [agent] möglich wäre, aber ich habe es hier bereits gestartet.

[main]
    logdir = /var/log/puppet
    rundir = /var/run/puppet
    confdir = /puppet/$environment
    vardir = /puppet/.$environment-var
    ssldir=/etc/puppet/ssl
    environment = production
    server = puppet.domain.org
    pluginsync = true
    noop = true
    # Disable running all branches by default

[production]
    noop = false

EDIT: Sieht so aus, als hätte ich zu früh gesprochen. Das Noop sickert durch. Obwohl die obige Syntax richtig ist, lässt eine der Einschränkungen, die ich mir angesehen habe, dies nicht funktionieren.https://puppet.com/docs/puppet/latest/env_environments.html

.. Umgebungen weisen einige Einschränkungen auf, bei denen es sich meist eher um bekannte Fehler oder Unwägbarkeiten bei der Implementierung als um Designentscheidungen handelt.

Puppet liest nur die Einstellungen für Modulpfad, Manifest, Manifestverzeichnis und Vorlagenverzeichnis aus Umgebungskonfigurationsblöcken; andere Einstellungen in einem dieser Blöcke werden zugunsten der Einstellungen in den Blöcken [master] oder [main] ignoriert. (Problem 7497)

Antwort2

So können Sie das nicht machen. Jemand mit Zugriff auf die Befehlszeile könnte praktisch jede Option erzwingen.

Wenn Sie kontrollieren möchten, wer welche Umgebung einsetzen kann, empfehle ich die Verwendung vonMCollectivezum Ausführen von Puppet. Sie können dort ziemlich detaillierte ACLs erstellen und Puppet auf mehreren Knoten koordinieren und Dinge tun wie „Auf 2 Maschinen bereitstellen, wenn es nicht fehlschlägt, auf den nächsten 10 bereitstellen, wenn es nicht fehlschlägt, auf dem Rest bereitstellen“.

verwandte Informationen