Fabric: Zusätzliche Roledefs-Schlüssel über 'hosts' hinaus, die nicht in env geladen werden

Erstellt am 13. Feb. 2015  ·  7Kommentare  ·  Quelle: fabric/fabric

Dieser Ausschnitt aus der Dokumentation stellt dem Benutzer nicht die Beispielschlüssel 'foo' über env zur Verfügung, nur der Schlüssel 'hosts' wird nachträglich von Fabric geladen (in env.hosts)

from fabric.api import env

env.roledefs = {
    'web': {
        'hosts': ['www1', 'www2', 'www3'],
        'foo': 'bar'
    },
    'dns': {
        'hosts': ['ns1', 'ns2'],
        'foo': 'baz'
    }
}

Weitere Dokumentation zu dieser Stackoverlow-Frage

Hilfreichster Kommentar

@bitprophet Warum wurde das geschlossen? Das Verhalten von zusätzlichen Roledef-Schlüsseln hat sich nicht geändert, ist dies also ein "wird nicht behoben"?

Alle 7 Kommentare

Sie können das folgende Beispiel als Konfigurationsdatei verwenden und dann einige interne Funktionen hinzufügen, um fabfiles.py zu verarbeiten

wie: list.db
Schnittstelle|IP|Passwort|Rolle....
hoffe es wird bei dir funktionieren.

Es gibt mehrere env-Schlüssel, die von Fabric verwendet werden, um zu bestimmen, mit welchem/n Host(s) für jede Sitzung eine Verbindung hergestellt werden soll, dh Rollen, effektive_Rollen, Hosts, Host_String. Und natürlich auch Dekorateure.

Das heißt, die roledefs ist nur eine Namenszuordnung zum Gruppieren von Hosts, die nicht unbedingt in env.hosts zusammengeführt werden muss.

Wenn Sie die roledefs als dict definieren, können Sie neben Hosts auch andere benutzerdefinierte Einstellungen organisieren, die rollenspezifisch sind. Sie können über den vollständigen env-Pfad darauf zugreifen, dh env.roledefs.web.foo

Aber wie Sie sagen und vielleicht erwarten, sollte eine als dict definierte Rolle mit dem env-Root zusammengeführt werden.
Dafür verwende ich es persönlich auch. Ich habe einfach noch keine schöne Möglichkeit gefunden, es und Pull-Requests zu implementieren, aufgrund all der Möglichkeiten, die "aktuellen" Rollen beim Ausführen einer bestimmten Aufgabe tatsächlich festzulegen / zu erhalten, und der Komplexierbarkeit beim Aufrufen von Teilaufgaben innerhalb von Aufgaben . Einfach erklärt, ich mache dies, indem ich Änderungen an env abonniere und die Rolle zusammenführe, wenn der Schlüssel roles in env gesetzt wird. Aber der "schwierige" Teil besteht darin, den Status beizubehalten und jede Rollenzusammenführung zu bereinigen, wenn neue Rollen innerhalb der Sitzung verwendet werden.

env.roledefs.web.foo erzeugt den Fehler: AttributeError: 'dict' object has no attribute 'web'

Ich meine, Sie könnten wie ein normales Diktat darauf zugreifen, env.roledefs['web']['foo'], aber dann verstehe ich nicht, warum diese Funktionalität überhaupt in Fabric existiert, es ist nur ein einfaches Diktat. Es scheint, dass diese Funktion aus einem nützlicheren Grund implementiert wurde?

Entschuldigung, Sie haben Recht, Sie müssen darauf zugreifen, wie Sie sagen.

Derzeit gibt es keinen anderen Grund, als Ihnen zu erlauben, weitere Rolleneinstellungen neben Hosts zu gruppieren.
Aber wenn Meilenstein 1.11 veröffentlicht wird und #1092 existiert, dann macht es mehr Sinn.

Auch #1088 ist Teil von 1.11, was ähnlich zu dem ist, was Sie beschreiben/erwarten. Aber ich habe, wie gesagt, noch keine schöne Möglichkeit gefunden, das Zusammenführen von Roledefs zu implementieren. Nur ein Cocept-Proof in Fork mit "hässlichem" Deep-Affe-Patching.

Ah in Ordnung, das macht, ich habe meinen Kopf gegen die Wand geschlagen, weil ich dachte, ich würde etwas verpassen :) Diese referenzierten Nummern sehen so aus, als würden sie ziemlich helfen, wenn sie rollen. Danke Jonas!

Dies ist verwirrend und ich denke, es sollte in der Dokumentation beachtet werden, dass diese zusätzlichen Variablen außerhalb der Roledefs nicht zugänglich sind.

@bitprophet Warum wurde das geschlossen? Das Verhalten von zusätzlichen Roledef-Schlüsseln hat sich nicht geändert, ist dies also ein "wird nicht behoben"?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen