0

我试图解决vagrant-rackspace plugin中的一个问题,该问题需要在同步文件夹运行之前运行命令从 sudoers 文件中删除该requiretty行,因为 rsync 命令将失败并显示sudo: sorry, you must have a tty to run sudo.

但是,无论 Vagrantfile 中的顺序如何,同步文件夹操作总是先执行。似乎在核心 Vagrant 中,已同步的文件夹具有最高优先级,并且将始终首先运行。我认为这就像配置程序一样,它们按照放入 Vagrantfile 的顺序运行

4

1 回答 1

0

最终,我想起了我最近使用的插件中类似的代码行:

 action_hook(:install_chef, Plugin::ALL_ACTIONS) do |hook|
    require_relative 'action/install_chef'
    hook.after(Vagrant::Action::Builtin::Provision, Action::InstallChef)

    if defined? VagrantPlugins::AWS::Action::TimedProvision
      hook.after(VagrantPlugins::AWS::Action::TimedProvision,
                 Action::InstallChef)
    end
  end

所以,我只是更改了它以确保我想要的任务总是在同步文件夹任务之前运行:

  action_hook(:tty_workaround, Plugin::ALL_ACTIONS) do |hook|
     require_relative 'action/tty_workaround'
     hook.after(Vagrant::Action::Builtin::SyncedFolders, Action::TTYWorkaround)
  end

像魅力一样工作!

我仍在试图弄清楚在 Vagrant 核心中是否有这样做的方法,但现在我计划制作一个 vagrant 插件,您可以在其中提供要在 vagrant 节点上运行的脚本的路径config,允许您在任何 Vagrant 实例中使用上述方法,而不仅仅是 vagrant-rackspace。

于 2014-08-01T23:16:08.663 回答