带有插件的自定义Vagrant命令

时间:2015-02-02 17:16:46

标签: vagrant vagrantfile

我正在尝试向Vagrantfile添加一些自定义命令,因此我可以使用vagrant <cmd>而不是使用大量额外脚本来混乱项目文件夹。

有没有办法在不上传宝石的情况下这样做?具体来说,如果一旦从git中检出项目,这些命令就可以开箱即用,这是理想的。

3 个答案:

答案 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但它​​应该工作正常,至少重定向两个简单的命令。没有帮助陷入流浪信息,但这并不理想。