Landstreicher - wie die host-Plattform bestimmte provisioning-Schritte
Wir haben eine vielfältige dev-team, eine auf Windows, andere auf Ubuntu und anderen auf OSX. Als windows-junge, richte ich die erste version des vagrant-setup-Skript, das funktioniert Fabelhaft 😉
Allerdings, wenn es läuft auf dem Ubuntu-host, die erste Zeit wird es um eine Bestimmung im Schritt, fordert ein bash-Skript, es scheitert an den Berechtigungen.
Unter windows, das ist egal, wie der samba-share automatisch über ausreichende Berechtigungen zum ausführen des bash-Skripts (die wohnt in der Projekt-Hierarchie, so ist in der /vagrant share auf die VM), aber mit ubuntu, die ich brauche, um die Berechtigungen auf diese Datei in der Bereitstellung-Skript, bevor ich es nenne.
Dies ist nicht das problem und um ehrlich zu sein, ich vermute, sogar mit dem extra "chmod" Schritt wäre es immer noch gute Arbeit unter windows, aber gibt es eine Möglichkeit in der vagrant Datei Kennzeichnen, die bestimmte provisioning-Schritte als "Nur Windows", "Linux" oder "Mac-Only"?
d.h. in pseduo-code, so etwas wie.
.
.
if (host == windows) then
config.vm.provision : shell, : inline => "/vagrant/provisioning/only_run_this_on_windows.sh"
else if (host == linux) then
config.vm.provision : shell, : inline => "/vagrant/provisioning/only_run_this_on_linux.sh"
else if (host == osx) then
config.vm.provision : shell, : inline => "/vagrant/provisioning/only_run_this_on_osx.sh"
end if
.
.
Vielen Dank im Voraus.
- Jemand gerade verärgert (vielleicht auch mit den Frage/Antwort wurde nach unten gewählt) und ging in "down-vote-spree" -- sehen Sie eine meiner 3 letzten Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie heraus, die aktuelle OS innerhalb Vagrantfile.
Fügen Sie diese in Ihre Vagrantfile:
Dann können Sie es verwenden, wie Sie möchten.
Edit: war fehlt ? auf die if-Bedingung.
Beispiel verwendet, um zu testen:
Ausführen:
block in <top (required)>': undefined method
unix' für OS:Modul (NoMethodError)" Vagrant Datei: VAGRANTFILE_API_VERSION = "2" habe ich das Modul-code direkt unterhalb von 'VAGRANTFILE_API_VERSION = "2"' und dann, wenn kurz vor dem 'Ende' am Ende der Datei. wenn OS.unix-config.vm.Bestimmung : - shell :inline => "sudo chmod 755 /vagrant/Beistellung/*.sh"; Ende (sorry für die Hose Formatierung...)Beachten Sie, dass die Wandernden selbst, in die Landstreicher::Util::Platform-Klasse schon implementiert eine erweiterte version der Plattform die überprüfung der Logik in die Antwort von BernardoSilva.
So, in einem Vagrantfile, können Sie verwenden Sie einfach die folgende:
Vagrant::Util::Platform::mac?
und ich glaube nicht, dassthen
es sein sollte.then
ist wahlweise in Ruby, die die Sprache Vagrantfile geschrieben ist.Vagrant::Util::Platform::darwin?
Hier ist eine version, die mithilfe der Landstreicher utils, dass die Kontrollen für mac und windows:
Vagrant::Util::Platform.mac?
undVagrant::Util::Platform::darwin?
. Bernado Silva Antwort hat Super funktioniert.Wenn ich die ursprüngliche Frage nach mir, es ist nicht, wie Sie herausfinden, auf welche OS vagrant es sich von selbst läuft, aber das OS machen die virtuellen Maschinen bereitgestellt werden müssen. Das ist, warum Sie laufen wollen eine andere Regelung-Skript abhängig von den unterschiedlichen OSses der neuen VMs, z.B.: "/vagrant/provisioning/only_run_this_on_${OS_OF_NEW_VM}.sh".
Leider Vagrant nicht über diese Fähigkeit (noch) nicht, so ist dies meine Lösung: ich definiere meine VMs auf meinem vagrant Datei:
Dann werden diese Bedingungen in meinem code bereitstellen von verschiedenen Möglichkeiten, je nach OS der VM ist:
Durch die Art und Weise, nur das ansible-controller haben sollte, ansible installiert, weil im realen Leben (ja das Amt), die ich nicht verwenden Landstreicher, sondern ein ansible-controller, die möchte ich auch in meinem Labor (OK Virtual Box auf meinem Windows 10 desktop als auch auf meinem Ubuntu-laptop). Ich verwenden Sie eine Bedingung testen "type = 0" (die ich für einen ansible "controller"). Nur der ansible controller startet ansible_local zur Bestimmung der cluster von VMs mit ansible.
Dieser wird angezeigt, während ein vagrant provision:
PS D:\Documents\vagrant\top> vagrant provision Steuern.top.RHEL76
is_linux_host: centos/7
is_linux_host: centos/7
is_linux_host: centos/7
is_windows_host: mwrock/Windows2016
Dieser wird angezeigt, während ein vagrant provision:
PS D:\Documents\vagrant\ansible> vagrant provision control.ansible.RHEL76
is_linux_host: centos/7
is_linux_host: centos/7
is_linux_host: centos/7
is_windows_host: mwrock/Windows2016
--- many more lines, not relevant ---
Viel Spaß beim Experimentieren und Bereitstellung Ihrer maschinenübergreifende /multi-OS-labs!