Ich verwende Vagrant, um VMs für die Entwicklung bereitzustellen. Eine der Voraussetzungen ist, dass vagrant provision
einen neuen Benutzer erstellt (getan in einem Provisionierungsskript, das ich geschrieben habe) und dann vagrant ssh
mit diesem Benutzer verbindet.
Ich kann nicht herausfinden, wie ich feststellen kann, ob die Box bereitgestellt wurde oder nicht.
Ich sehe, dass die Vagrant-Bereitstellung einen Code enthält setzt env[:provision_enabled]
, wenn dieser Lauf eine Provisionierung durchführen soll, also dachte ich, ich könnte so etwas machen:
Die Idee ist, dass SSH-Verbindungen für die Bereitstellung eine Verbindung und SSH-Verbindungen für alle anderen die andere verwenden würden.
env[:provision_enabled]
scheint jedoch in Vagrantfile
nicht verfügbar zu sein.
Gibt es eine Möglichkeit, dies zu tun?
Dies scheint durch die action_provision
-Datei im Vagrant-Datenverzeichnis ( .vagrant/
) bestimmt zu sein. Es befindet sich normalerweise im selben Ordner wie Ihr Vagrantfile
.
Eine rohe Problemumgehung wäre also, den ssh-Benutzernamen in Ihrer Vagrant-Datei abhängig davon festzulegen, ob die Datei existiert oder nicht. Ich konnte das zwar nicht testen, aber wenn Sie nur die Datei action_provision
umbenennen oder entfernen und vagrant reload
gehen, sollte sie erneut bereitgestellt werden.
Also für diejenigen, die bereit sind, %code% code Anweisungen zu verwenden, ist hier eine Funktion, die prüft, ob VM bereitgestellt wurde und Verwendungsbeispiel:
%Vor%Warnung! Es ist Hackery-Methode mit %code% -Datei Existenz zu überprüfen. Aber es funktioniert und zum Zeitpunkt der Veröffentlichung gibt es keine anderen guten Möglichkeiten.
BEARBEITEN
War zu schnell, um zu antworten, ohne es vorher auszuprobieren. Der Code im unten stehenden Link funktioniert möglicherweise in früheren Versionen, in Version 1.7.2 funktioniert er jedoch nicht. Sie müssen es ein wenig zwicken:
%Vor%ursprüngliche Antwort unten
Ich bin hier auf der Suche nach einer Antwort auf die gleiche Frage gewesen, aber keine der existierenden war ziemlich befriedigend, also fand ich mit ein bisschen mehr Graben this Kommentar zu Github darüber, wie Sie Ihre Anforderungen erfüllen können:
%Vor%Sie überprüfen nur, ob der von Ihnen ausgegebene vagrant -Befehl %code% ist, dann wird der von Ihnen angegebene Benutzername verwendet.
Ich verwende Vagrant, um VMs für die Entwicklung bereitzustellen. Eine der Voraussetzungen ist, dass %code% einen neuen Benutzer erstellt (getan in einem Provisionierungsskript, das ich geschrieben habe) und dann %code% mit diesem Benutzer verbindet.
Ich kann nicht herausfinden, wie ich feststellen kann, ob die Box bereitgestellt wurde oder nicht.
Ich sehe, dass die Vagrant-Bereitstellung einen Code enthält setzt %code% , wenn dieser Lauf eine Provisionierung durchführen soll, also dachte ich, ich könnte so etwas machen:
%Vor%Die Idee ist, dass SSH-Verbindungen für die Bereitstellung eine Verbindung und SSH-Verbindungen für alle anderen die andere verwenden würden.
%code% scheint jedoch in %code% nicht verfügbar zu sein.
Gibt es eine Möglichkeit, dies zu tun?
Ich finde keinen einfachen Weg, dies zu tun. Klingt wie die einfachste Lösung wäre, das Bereitstellungsergebnis zu überprüfen, d. H., Können Sie sich mit dem Benutzer anmelden, der nach der Bereitstellung erstellt wurde?
Eine weitere Möglichkeit wäre, %code% immer auszuführen, um sicherzustellen, dass sich die Box in einem Bereitstellungszustand befindet, bevor Sie fortfahren.
Also für diejenigen, die bereit sind, Vagrantfile
code Anweisungen zu verwenden, ist hier eine Funktion, die prüft, ob VM bereitgestellt wurde und Verwendungsbeispiel:
Warnung! Es ist Hackery-Methode mit
action_provision
-Datei Existenz zu überprüfen. Aber es funktioniert und zum Zeitpunkt der Veröffentlichung gibt es keine anderen guten Möglichkeiten.
BEARBEITEN
War zu schnell, um zu antworten, ohne es vorher auszuprobieren. Der Code im unten stehenden Link funktioniert möglicherweise in früheren Versionen, in Version 1.7.2 funktioniert er jedoch nicht. Sie müssen es ein wenig zwicken:
%Vor%ursprüngliche Antwort unten
Ich bin hier auf der Suche nach einer Antwort auf die gleiche Frage gewesen, aber keine der existierenden war ziemlich befriedigend, also fand ich mit ein bisschen mehr Graben this Kommentar zu Github darüber, wie Sie Ihre Anforderungen erfüllen können:
%Vor% Sie überprüfen nur, ob der von Ihnen ausgegebene vagrant -Befehl ssh
ist, dann wird der von Ihnen angegebene Benutzername verwendet.
Ich finde keinen einfachen Weg, dies zu tun. Klingt wie die einfachste Lösung wäre, das Bereitstellungsergebnis zu überprüfen, d. H., Können Sie sich mit dem Benutzer anmelden, der nach der Bereitstellung erstellt wurde?
Eine weitere Möglichkeit wäre, vagrant reload --provision
immer auszuführen, um sicherzustellen, dass sich die Box in einem Bereitstellungszustand befindet, bevor Sie fortfahren.
Tags und Links vagrant