ruby - tecnicas - Vagrant-cómo tener pasos de aprovisionamiento específicos de plataforma de host
tecnicas de aprovisionamiento (2)
Descubre el sistema operativo actual dentro de Vagrantfile.
Agregue esto a su Vagrantfile:
module OS
def OS.windows?
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end
def OS.mac?
(/darwin/ =~ RUBY_PLATFORM) != nil
end
def OS.unix?
!OS.windows?
end
def OS.linux?
OS.unix? and not OS.mac?
end
end
Entonces puedes usarlo como quieras.
if OS.windows? [then]
code...
end
Editar: ¿faltaba el? en condición de si.
Ejemplo utilizado para probar:
is_windows_host = "#{OS.windows?}"
puts "is_windows_host: #{OS.windows?}"
if OS.windows?
puts "Vagrant launched from windows."
elsif OS.mac?
puts "Vagrant launched from mac."
elsif OS.unix?
puts "Vagrant launched from unix."
elsif OS.linux?
puts "Vagrant launched from linux."
else
puts "Vagrant launched from unknown platform."
end
Ejecutar:
# Ran provision to call Vagrantfile.
$ vagrant provision
is_windows_host: false
Vagrant launched from mac.
Tenemos un equipo de desarrollo diverso, uno en Windows, otro en Ubuntu y otro en OSX. Al ser Windows Boy, configuré la primera versión del script de configuración vagrant que funciona fabulosamente;)
Sin embargo, cuando se ejecuta en el host de Ubuntu, la primera vez que llega a un paso de provisión que llama a un script bash, falla debido a permisos.
En Windows, esto no importa ya que el recurso compartido samba tiene automáticamente suficientes permisos para ejecutar el script bash (que reside dentro de la jerarquía del proyecto, por lo que está presente en el recurso compartido / vagabundo en la máquina virtual), pero con ubuntu necesito configurar el Permisos en este archivo en el script de provisión antes de que lo llame.
Este no es el problema y, para ser honesto, sospecho que incluso con el paso adicional de "chmod" funcionaría correctamente en Windows, pero, ¿hay alguna forma en el archivo vagabundo de marcar ciertos pasos de aprovisionamiento como ''Solo Windows''? '' ¿Solo Linux ''o'' Solo Mac ''?
Es decir, en código pseduo, algo así.
.
.
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
.
.
Gracias por adelantado.
Tenga en cuenta que Vagrant, en la clase Vagrant :: Util :: Platform, ya implementa una versión más avanzada de la lógica de comprobación de la plataforma en share de .
Entonces, en un Vagrantfile, puede simplemente usar lo siguiente:
if Vagrant::Util::Platform.windows? then
myHomeDir = ENV["USERPROFILE"]
else
myHomeDir = "~"
end