【问题标题】:How can I define the run order of vagrant middleware plugins?如何定义 vagrant 中间件插件的运行顺序?
【发布时间】:2015-10-15 03:24:53
【问题描述】:

我正在用 vagrant 在 VirtualBox 中创建一个 Red Hat Enterprise Linux 7 VM。如果我有一个既没有添加 VirtualBox 来宾且未注册的基础框,则我需要手动执行以下操作:

  • 向订阅管理器注册盒子
  • 安装来宾添加

我需要先注册的原因是,要安装来宾添加,我需要安装一些额外的包。

现在,这两个任务都有 3rd-party vagrant 插件:vagrant-registrationvagrant-vbguest

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

有没有办法强制其中一个在另一个之前运行?或者我还没有想到的任何其他替代解决方案(我还不是流浪巫师(或者那只是被称为流浪汉?))?

【问题讨论】:

  • 可能不是您正在寻找的答案,但您可以为您的虚拟机禁用 vbguest 插件(添加 config.vbguest.auto_update = false )并在使用 vagrant vbguest 启动后手动运行它。
  • @FredericHenri 是的,我已经知道了,谢谢。我正在寻找一种更好的方法。无论如何感谢您的评论:)

标签: vagrant virtualbox rhel vagrant-plugin


【解决方案1】:

这似乎是 vagrant-registration 插件的问题。见https://github.com/projectatomic/adb-vagrant-registration/issues/69

问题已修复,现已发布修复版本,即https://rubygems.org/gems/vagrant-registration/versions/1.2.2

【讨论】:

    【解决方案2】:

    本着我的 cmets 的精神,但它应该以更自动的方式

    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 无法安装必要的库。

    我看到的另一种可能性是使用 vagrant 触发器插件 (https://github.com/emyl/vagrant-triggers),您可以定义在运行特定命令后运行特定脚本

    config.vbguest.auto_update = false
    config.trigger.after :up do
      run "vagrant vbguest --auto-reboot --no-provision"
    end
    

    vbguest 在机器启动后正确运行(所以我假设在 vagrant-registration 做了自己的事情之后)

    运行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.
    

    安装来宾添加继续,机器重启正常

    【讨论】:

    • 感谢您的意见。不过,似乎 vagrant 不喜欢与 exec 一起运行。这是我得到的(即使我将其更改为vagrant status):“Vagrant 似乎在 Bundler 环境中运行。您现有的 Gemfile 将被使用。Vagrant 不会自动加载使用vagrant plugin 安装的任何插件。Vagrant 将自动加载 Gemfile 中 'plugins' 组中的任何插件。你可以强制 Vagrant 使用 VAGRANT_FORCE_BUNDLER 接管。然后这似乎无限循环。
    • 您是否尝试将exec替换为system
    • 我现在刚刚尝试过,它用 vagrant 进程杀死了我的主机。有没有办法只为特定的流浪命令“执行”或“系统”?我认为问题在于即使我说vagrant status 它也在运行
    • 有办法只为特定命令运行,但它不起作用,它不等待运行。使用 vagrant trigger 插件进行编辑 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多