Vagrant 如何定义漫游中间件插件的运行顺序?

Vagrant 如何定义漫游中间件插件的运行顺序?,vagrant,virtualbox,rhel,vagrant-plugin,Vagrant,Virtualbox,Rhel,Vagrant Plugin,我正在用vagrant在VirtualBox中创建一个Red Hat Enterprise Linux 7虚拟机。如果我有一个基本框,它既没有VirtualBox来宾添加,也没有注册,那么我需要手动执行以下操作: 向subscription manager注册此框 安装来宾添加 我需要首先执行注册的原因是,要安装来宾添加,我需要安装一些额外的软件包 现在,这两个任务都有第三方vagrant插件:和 我遇到的问题是,vagrant vbguest插件始终会尝试首先运行,并且无法下载它需要的软件

我正在用vagrant在VirtualBox中创建一个Red Hat Enterprise Linux 7虚拟机。如果我有一个基本框,它既没有VirtualBox来宾添加,也没有注册,那么我需要手动执行以下操作:

  • 向subscription manager注册此框
  • 安装来宾添加
我需要首先执行注册的原因是,要安装来宾添加,我需要安装一些额外的软件包

现在,这两个任务都有第三方vagrant插件:和

我遇到的问题是,
vagrant vbguest
插件始终会尝试首先运行,并且无法下载它需要的软件包,因为
vagrant registration
插件还没有机会注册系统


有没有办法强迫其中一个先运行另一个?或者我还没有想到的任何其他替代解决方案(我不是一个流浪巫师(或者这只是一个流浪巫师?)呢?

在我的评论中,但它应该是以一种更自动的方式

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vbguest.auto_update = false

  if Vagrant.has_plugin?("vagrant-registration")
    system "vagrant vbguest --auto-reboot --no-provision" if ARGV[0] == 'up'
  end
不确定它是否会以正确的顺序运行(我自己没有尝试)

编辑此代码的问题是,它将在启动命令时尝试运行vbguest,因此在vm运行之前,vbguest无法安装必要的LIB

我看到的另一种可能性是使用vagrant trigger plugin(),您可以定义在运行特定命令后运行特定脚本

config.vbguest.auto_update = false
config.trigger.after :up do
  run "vagrant vbguest --auto-reboot --no-provision"
end
vbguest在机器启动后正确运行(因此我假设在vagrant注册完成自己的工作后)

运行
vagrant up
的输出(有趣的部分):

==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 4.3
==> default: Mounting shared folders...
    default: /vagrant => /Users/fhenri/project/examples/vagrant/precise
==> default: Running triggers after up...
==> default: Executing command "vagrant vbguest --auto-reboot --no-provision"...
==> default: GuestAdditions versions on your host (4.3.16) and guest (4.2.0) do not match.

来宾添加的安装继续进行,机器重新启动ok

这似乎是vagrant注册插件的问题。看


问题已经解决,固定版本现在已经发布,也就是说,

可能不是你想要的答案,但是你可以为你的虚拟机禁用vbguest插件(添加
config.vbguest.auto_update=false
),并在启动后手动运行它,使用
vagrant vbguest
@FredericHenri是的,我已经弄明白了,谢谢我要找的是更好的方法。谢谢你的评论:)谢谢你的意见。不过,似乎流浪汉不喜欢和高管一起经营。以下是我得到的(即使我将其更改为
流浪状态
):“Vagrant似乎在捆绑机环境中运行。将使用您现有的文件。Vagrant不会自动加载任何安装了
Vagrant插件的插件。Vagrant将自动加载您文件中“plugins”组中的任何插件。你可以用流浪汉捆绑机强迫流浪汉接管。“这似乎会无限循环。您是否尝试将
exec
替换为
system
?我现在刚刚尝试过,它用不稳定的进程杀死了我的主机。有没有一种方法可以仅针对特定的流浪命令而使用“exec”或“system”?我认为问题在于,它正在运行,即使我说的是
vagrant status
,也有办法只为特定的命令运行,但它不工作,它不等待运行。使用vagrant触发器插件进行编辑-