假设执行a Vagrantfile需要安装特定的Vagrant插件.所以,基本上你需要做的是
$ vagrant plugin install foobar-plugin
$ vagrant up
Run Code Online (Sandbox Code Playgroud)
如果跳过第一步,则vagrant up失败.
Vagrant中是否有一个选项可以让它自动安装插件?换句话说:Vagrantfile在创建和启动计算机之前,是否可以在哪个插件中指定自动安装?
Amo*_*ira 67
更新2018年8月31日:有关Vagrant的更高版本,请参阅下面的@ Starx修复程序
这是基于Louis St. Amour解决方案的版本以及Rob Kinyon关于重新执行的评论如果安装了新插件,我在我自己的设置中成功使用它:
required_plugins = %w(vagrant-share vagrant-vbguest...)
plugins_to_install = required_plugins.select { |plugin| not Vagrant.has_plugin? plugin }
if not plugins_to_install.empty?
puts "Installing plugins: #{plugins_to_install.join(' ')}"
if system "vagrant plugin install #{plugins_to_install.join(' ')}"
exec "vagrant #{ARGV.join(' ')}"
else
abort "Installation of one or more plugins has failed. Aborting."
end
end
Run Code Online (Sandbox Code Playgroud)
Lou*_*our 51
由于我是一个Ruby开发人员,并且Bindler不再被维护,我发现在我的Vagrantfile顶部编写一些代码来安装所需的插件(如果丢失Vagrant.configure)是最自然的(例如在行之前)
以下适用于我:
required_plugins = %w( vagrant-hostmanager vagrant-someotherplugin )
required_plugins.each do |plugin|
system "vagrant plugin install #{plugin}" unless Vagrant.has_plugin? plugin
end
Run Code Online (Sandbox Code Playgroud)
system,与使用反引号不同,将命令回显到stdout,就像自己运行命令一样.这样我就不需要另一个奇怪命名的插件或系统来跟踪所需的插件,无论如何都可以通过Vagrant进行更新.
fgr*_*ehm 48
正如我在回答您的其他问题时指出的那样,您可以使用bindler使用单个命令安装一组特定于项目的插件.
如果安装了bindler并且没有安装所需的插件,bindler将会出错并将中止该进程.还有一个与自动安装插件有关的未解决的问题,vagrant up但到目前为止还没有人注册.
如果您不想使用bindler,则可以Vagrant.has_plugin?在您的顶部使用(在1.3.0+上可用),Vagrantfile如果未安装所需的插件,则会出错.
就像是:
unless Vagrant.has_plugin?("vagrant-some-plugin")
raise 'some-plugin is not installed!'
end
Vagrant.configure("2") do |config|
config.vm.box = "box-name"
end
Run Code Online (Sandbox Code Playgroud)
更新:Bindler不再受支持,截至2015年5月11日,Vagrant核心未提供相应的功能
Jon*_*der 10
请注意,从Vagrant 1.5开始,您可以指定您的依赖项Gemfile.根据更新的博客文章:
现在,Vagrant 1.5将自动加载Gemfile中"plugins"组中的任何gem.举个例子,这里是"vagrant-bar"插件的Gemfile:
Run Code Online (Sandbox Code Playgroud)source "https://rubygems.org" group :development do gem "vagrant", git: "https://github.com/mitchellh/vagrant.git" end group :plugins do gem "vagrant-foo", gem "vagrant-bar", path: "." end
Mor*_*unz 10
2019更新:Vagrant现在具有通过以下方式要求插件的功能Vagrantfile:
Vagrant.configure("2") do |config|
config.vagrant.plugins = "vagrant-some-plugin"
# or as array:
config.vagrant.plugins = ["vagrant-some-plugin", "vagrant-some-other-plugin"]
# or as hash
config.vagrant.plugins = {"vagrant-some-plugin" => {"version" => "1.0.0"}}
end
Run Code Online (Sandbox Code Playgroud)
参见https://www.vagrantup.com/docs/vagrantfile/vagrant_settings.html
小智 6
无法对Louis St-Amour的回答添加评论,但我想发布这个以防万一有人需要帮助扩展他的解决方案.
# Check for missing plugins
required_plugins = %w(vagrant-list)
plugin_installed = false
required_plugins.each do |plugin|
unless Vagrant.has_plugin?(plugin)
system "vagrant plugin install #{plugin}"
plugin_installed = true
end
end
# If new plugins installed, restart Vagrant process
if plugin_installed === true
exec "vagrant #{ARGV.join' '}"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20550 次 |
| 最近记录: |