我正在尝试向Vagrantfile添加一些自定义命令,因此我可以使用vagrant <cmd>
而不是使用大量额外脚本来混乱项目文件夹。
有没有办法在不上传宝石的情况下这样做?具体来说,如果一旦从git中检出项目,这些命令就可以开箱即用,这是理想的。
答案 0 :(得分:3)
对于2016年或之后来到这里的人,流浪者现在支持:
for (ItemStack item : inventory.getContents()) {
if (item == null) {
continue;
}
// Your enchantment code here
}
参见&#34; PLUGIN DEVELOPMENT: COMMANDS&#34;详情:
在插件定义的上下文中。 。 。命令是使用
vagrant YOUR-COMMAND
方法定义的,该方法将命令的名称作为参数,在本例中为&#34; foo。&#34;这意味着该命令可以通过command
调用。
vagrant foo
答案 1 :(得分:1)
我做了一些挖掘并发现了this thread。我真的很喜欢agoebel的解决方案,但是劫持Vagrantfile
看起来有点hacky并且仍然没有引入自定义命令。我认为这种方法适用于检查插件依赖性,或者在运行标准命令之前进行一些额外的检查:
REQUIRED_PLUGINS = %w(vagrant-ohai vagrant-vbguest)
restart_required = REQUIRED_PLUGINS.any? do |plugin|
system "vagrant plugin install #{plugin}" unless Vagrant.has_plugin?(plugin)
end
但您也可以在Vargrantfile
名为.vagrantplugins
的同一目录中创建一个文件,其插件定义如下:
class MyCommand < Vagrant.plugin(2, :command)
def self.synopsis
"Says Hello"
end
def execute
puts "Hello"
0
end
end
class MyPlugin < Vagrant.plugin(2)
name "My Plugin"
command "mycommand" do
MyCommand
end
end
有效地允许您编写自定义命令。 Vagrant删除了允许在新的2.x.x版API中内联定义自定义命令的功能。
这是一个很好的妥协。如果您vargrant list-commands
,您应该看到:
mycommand Says Hello
希望这有帮助!
答案 2 :(得分:0)
所以,虽然它不是一个完整的“流浪汉命令”,但只要我exit
Vagrant.configure
之前,我就可以劫持该剧本。似乎hacky但它应该工作正常,至少重定向两个简单的命令。没有帮助陷入流浪信息,但这并不理想。