Mit dem Vorschlag in returning a value from a provision script to vagrant, ich bin ein Provisioning-Skript ausgeführt, die einen Wert in Datei schreibt. Ich möchte, dass Ruby diese Datei öffnet und die VM je nach dem Wert bedingt neu lädt (die config.vm.provision :reload
Zeile ist erreichbar, indem ein Plugin über vagrant plugin install vagrant-reload
installiert wird). Dann möchte ich, dass das zweite Bereitstellungsskript ausgeführt wird.Verwenden von Ruby zum bedingten Laden einer vagrant VM zwischen laufenden Provisioning-Skripts
Ich bin verwirrt, wie und wann die Ruby-Befehle mit dem folgenden Code in meinem vagrantfile ausgeführt werden: Wenn das erste Provisioner-Skript abgeschlossen ist, geht es direkt zum zweiten, ohne etwas zu drucken oder neu zu laden (der Wert in requestreboot.txt ist wahr).
Welche Änderungen muss ich vornehmen, damit der Dateiverarbeitungscode ausgeführt wird, nachdem das erste Provisionierungsskript beendet wurde?
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script1 = <<SCRIPT
echo "Run this provisioner first to write a value to requiresreboot.txt... "
start-process "C:\\...\\vagrant_provisioning_file1.bat" -wait
SCRIPT
$script2 = <<SCRIPT
echo "Run this provisioner second... "
start-process "C:\\...\\vagrant_provisioning_file2.bat" -wait
SCRIPT
Vagrant.configure(2) do |config|
# Other vagrant setup.....
# ........................
File.new("requiresreboot.txt", "w+");
# Enable provisioning with a shell script 1.
config.vm.provision "shell", inline: $script1
file = File.open("requiresreboot.txt", "r")
contents = file.read
if contents == "max_rearms_reached"
print "Cannot extend Windows 7 trial: maximum number of rearms reached."
elsif contents == "true"
# trigger reload (reboot to apply changes for Windows trial renewal)
print "Windows trial renewal is required"
config.vm.provision :reload
elsif contents == "false"
print "No reload required, continuing with provisioning..."
end
file.close
# Enable provisioning with a shell script 2.
config.vm.provision "shell", inline: $script2
end
@ allesandro-caetano Wie könnte ich in jedem Fall die VM aus dem externen Skript laden? d. h. führen Sie 'config.vm.provision: reload' –
@ kieran_pli aus, da Sie Shell-Skripte ausführen, die Sie einfach' vagrant reload' aus dem Skript heraus aufrufen können. Wenn Sie ein Ruby-Skript verwenden, können Sie einfach einen Subprozess mit 'IO erstellen.popen ("vagrant reload") –