原文地址html
Provisioner 名字:"file"
git
Vagrant 的 file provisioner 容許將文件或目錄從主機上傳到客戶機。web
File provisioning 文件配置是一種簡單的方法,例如,將本地的 ~/.gitconfig
複製到客戶機上的 Vagrant 用戶主目錄,這樣每次配置新虛擬機時都沒必要運行 git config --global
。shell
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
end
若是想將文件夾上傳到客戶機系統,能夠經過下面的 file provisioner 實現。複製時,客戶機的最終文件夾將被替換。注意,若是但願在客戶機上使用相同的文件夾名稱,請確保目標路徑與主機上的文件夾名稱相同。bash
Vagrant.configure("2") do |config|
# ... other configuration
config.vm.provision "file", source: "~/path/to/host/folder", destination: "$HOME/remote/newfolder"
end
將 ~/path/to/host/folder
複製到客戶機以前:ssh
folder
├── script.sh
├── otherfolder
│ └── hello.sh
├── goodbye.sh
├── hello.sh
└── woot.sh
1 directory, 5 files
將 ~/path/to/host/folder
複製到客戶機的 $HOME/remote/newfolder
以後:svg
newfolder
├── script.sh
├── otherfolder
│ └── hello.sh
├── goodbye.sh
├── hello.sh
└── woot.sh
1 directory, 5 files
注意,與同步目錄不一樣,上傳的文件或目錄不會保持同步。繼續上面的例子,若是對本地 ~/.gitconfig
進行了進一步更改,它們將不會當即反映在您上傳到客戶機的副本中。工具
由 file provisioner 上傳的文件以 SSH 或 PowerShell 用戶身份完成。這很重要,由於這些用戶一般本身沒法提高權限。若是想將文件上傳到須要提高權限的位置,建議將它們上傳到臨時位置,而後使用 shell provisioner 將其移動到位。ui
file provisioner 只有兩個選項,都是必須的:this
vagrant ssh-config
查看。While the does support trailing slashes or 「globing」, this can lead to some confusing results due to the underlying tool used to copy files and folders between the host and guests. For example, if you have a source and destination with a trailing slash defined below:
雖然 file provisioner 確實支持尾部斜槓或「全局」,但對於用於在主機和客戶機之間複製文件和文件夾的底層工具,這可能會致使一些使人困惑的結果。例如,若是源和目標的尾部斜槓定義以下:
config.vm.provision "file", source: "~/pathfolder", destination: "/remote/newlocation/"
這是在告訴 vagrant 上傳遠程目錄 /remote/newloaction
下的 ~/pathfolder
目錄,看起來是這樣的:
newlocation
├── pathfolder
│ └── file.sh
1 directory, 2 files
也能夠用下面的定義實現這個目的:
config.vm.provision "file", source: "~/pathfolder", destination: "/remote/newlocation/pathfolder"
另外一個例子是在主機上使用 globing 來抓取文件夾內的全部文件,但不是頂層文件夾自己:
config.vm.provision "file", source: "~/otherfolder/.", destination: "/remote/otherlocation"
file provisioner 會將 ~/otherfolder
下的全部文件包含到新位置 /remote/otherlocation
中。這個想法能夠經過簡單地讓目標文件夾與源文件夾不一樣來實現:
config.vm.provision "file", source: "/otherfolder", destination: "/remote/otherlocation"