Wie kann ich die Puppet-Agent-Befehle einschränken? Ich muss nur zulassen, dass der Puppet-Agent ohne Noop im Produktionszweig ausgeführt wird.
- Block
puppet agent --test --environment devbranch
- Erlauben
puppet agent --test --environment devbranch --noop
- Erlauben
puppet 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“.