Vagrant 手冊之 Provisioning - File

原文地址html

Provisioner 名字:"file"git

Vagrant 的 file provisioner 容許將文件或目錄從主機上傳到客戶機。web

File provisioning 文件配置是一種簡單的方法,例如,將本地的 ~/.gitconfig 複製到客戶機上的 Vagrant 用戶主目錄,這樣每次配置新虛擬機時都沒必要運行 git config --globalshell

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

1. 選項

file provisioner 只有兩個選項,都是必須的:this

  • source (string):要上傳的文件或目錄的本地路徑。
  • destination (string):用於上傳的客戶機的遠端路徑。文件或目錄使用 SSH 用戶藉助 SCP 上傳,所以 SSH 用戶必須對這個目錄具備寫權限。SSH 用戶默認是「vagrant」,能夠經過 vagrant ssh-config 查看。

2. 注意事項

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"
相關文章
相關標籤/搜索