Nous avons une équipe de développeurs diversifiée, une sur Windows, une autre sur Ubuntu et une autre sur OSX. En tant que windows boy, j’ai installé la première version du script de configuration vagrant qui fonctionne à merveille;)
Cependant, lors de son exécution sur l'hôte Ubuntu, la première fois qu'une étape de provision appelle un script bash, elle échoue à cause d'autorisations.
Sous Windows, cela n'a pas d'importance, car le partage samba a automatiquement les autorisations suffisantes pour exécuter le script bash (qui réside dans la hiérarchie du projet, il est donc présent dans le partage/vagrant sur la machine virtuelle), mais avec ubuntu, je dois définir la les autorisations sur ce fichier dans le script de provision avant que je l'appelle.
Ce n’est pas le problème et, pour être honnête, je suppose que même avec l’étape supplémentaire "chmod", cela fonctionnerait toujours correctement sous Windows, mais existe-t-il un moyen dans le fichier errant de signaler certaines étapes de provisioning comme "Windows uniquement", " Linux uniquement »ou« Mac uniquement »?
c'est-à-dire dans le code pseduo, quelque chose comme.
.
.
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
.
.
Merci d'avance.
Ajoutez ceci dans votre 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
Ensuite, vous pouvez l'utiliser comme vous le souhaitez.
if OS.windows? [then]
code...
end
Edit: il manquait le? sur si condition.
Exemple utilisé pour tester:
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
Exécuter:
# Ran provision to call Vagrantfile.
$ vagrant provision
is_windows_Host: false
Vagrant launched from mac.
Notez que Vagrant lui-même, dans la classe Vagrant :: Util :: Platform implémente déjà une version plus avancée de la logique de vérification de la plateforme dans the answer by BernardoSilva .
Ainsi, dans un fichier Vagrant, vous pouvez simplement utiliser les éléments suivants:
if Vagrant::Util::Platform.windows? then
myHomeDir = ENV["USERPROFILE"]
else
myHomeDir = "~"
end
Voici une version utilisant les utils Vagrant qui vérifie mac et windows:
if Vagrant::Util::Platform.windows?
# is windows
elseif Vagrant::Util::Platform.mac?
# is mac
else
# is linux
end