【问题标题】:Vagrant provisioning script is not being copied to host locationVagrant 配置脚本未复制到主机位置
【发布时间】:2014-09-25 18:55:49
【问题描述】:

主机:Windows 7

来宾:Windows 8

我有一个简单的 Vagrantfile,它运行一个 powershell 脚本来配置来宾。打包盒子的时候看到文件添加了,但是运行vagrant up的时候报错shell provisioner:* `path` for shell provisioner does not exist on the host system: D:/VirtualMachines/test/provision.ps1

我验证provision.ps1 存在于include 目录下的vagrant box 位置。

那么,当我运行vagrant up 时,为什么不将provision.ps1 复制到它需要的位置?

流浪文件:

VAGRANTFILE_API_VERSION = "2"
modified_name = ENV["COMPUTERNAME"][0..12]
comp_name = modified_name + "TA"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "base"
  config.vm.hostname = comp_name
  config.vm.communicator = "winrm"
  config.vm.network "forwarded_port", host: 3389, guest: 3389, auto_correct: true 
  config.vm.provision "shell", path: "provision.ps1"
end

【问题讨论】:

  • Vagrant docs 表示path 相对于Vagrantfile 的位置。我还没有创建自己的盒子,所以可能会关闭,但您可以尝试将该文件直接放在与 Vagrantfile 相同的位置以查看它是否被拾取。
  • 当我手动添加文件时它确实被拾起,但这违背了目的。当我执行vagrant box add [my box] 时,它会打包我的盒子并将powershell 脚本添加到位置下的盒子中:D:\VirtualMachines\vagrant\boxes\TestAgent\0\virtualbox\include 我的假设是当我在另一个目录(D:\VirtualMachines\test\)中运行vagrant up 时,它应该复制配置文件到这个新位置,这样它就可以运行了。我的假设错了吗?
  • 想通了,请看下面我的回答。

标签: vagrant vagrantfile


【解决方案1】:

How to package files with a Vagrant box? 的回答帮助了我。

这是我如何让它工作的:

  config.vm.provision "shell" do |s|
    p = File.expand_path("../", __FILE__)
    s.path = p + "\\provision.ps1"
  end 

【讨论】:

    【解决方案2】:

    我在主机 Windows 8 上使用 Vagrant 1.8.1 时遇到了同样的问题。在阅读 https://github.com/fideloper/Vaprobash/issues/30 之后,我刚刚将 bootstrap.sh 重命名为 bootstrp.sh,再次尝试它奏效了。将 bootstrp.sh 重命名为 bootstrap.sh 后它仍然有效。

    我想在我的情况下,文件名中有一些奇怪的不可见字符。

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2014-07-13
      相关资源
      最近更新 更多