tipos tecnicas que logistica importancia gestion estrategias cadena aprovisionamiento ruby vagrant

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