Durante la fase di startup della virtual machine di esempio, una delle ultime operazioni di cui abbiamo notizia è qualcosa di simile:
[...]
==> default: Mounting shared folders...
default: /vagrant => C:/VM-htmlit
[...]
In questa caso, Vagrant ci sta informando del mapping realizzato tra la directory /vagrant
sul computer guest e C:/VM-htmlit
sul computer host.
Così come nel caso di SSH, non abbiamo scritto nulla di simile nel Vagrantfile. Utilizzando una configurazione di default, Vagrant ha reso possibile la realizzazione di quella che viene chiamata synced folder (shared folder nelle versioni precedenti).
A questo punto, se non fosse ancora chiaro, una synced folder è un punto di incontro tra il file system della macchina virtuale e quello della macchina locale: in questo caso, tutto il contenuto presente all'interno del path /vagrant
della macchina guest sarà accessibile anche dal path C:/VM-htmlit
della macchina host (e viceversa).
Questo è perfettamente in linea con i dettami del Tao di Vagrant, in quanto grazie a questo meccanismo possiamo modificare dei file presenti sulla macchina virtuale come se fossero sul nostro computer locale, utilizzando quindi i nostri strumenti preferiti. Inoltre i file nella synced folder non verrano persi qualora effettuassimo il destroy della macchina.
Sebbene molto utili, le synced folder non sono molto performanti per cui non è consigliabile appoggiare al loro interno file su cui andranno eseguite molte operazione di I/O. Una macchina guest può avere più di una synced folder.
Synced folder oltre i default
Come ogni altra funzionalità di Vagrant, anche questa può essere personalizzata per venire incontro alle nostre esigenze. Per intenderci, se i default del paragrafo precedente non dovessero fare al caso nostro possiamo modificarli accedendo al Vagrantfile e scrivendo qualcosa del genere.
[...]
config.vm.synced_folder ".", "/etc/synced_folder"
[...]
Il punto indica che, lato host, la synced folder sarà la directory corrente, ovvero, la stessa che contiene il Vagrantfile. Il secondo parametro è invece il path della synced folder per quanto riguarda la macchina guest, se tale path non esistesse questo verrebbe interamente ricreato.
Inoltre, il primo parametro può esser scritto sia in maniera relativa (partendo cioè dalla directory di progetto) che assoluta, in entrambe i casi però, questo deve essere un path realmente esistente. Ad esempio, questa definizione:
[...]
config.vm.synced_folder "src", "/etc/src"
[...]
al momento del vagrant up (o vagrant reload se la macchina è già in running) solleverà un errore in quanto la direcotry src non esiste nella directory di progetto. A questo punto abbiamo due strade: crearla a mano, o aggiungere una proprietà che lo faccia al posto nostro:
[...]
config.vm.synced_folder "src", "/etc/src", create: true
[...]
Ovviamente la seconda è di gran lunga preferibile!
A questo punto se andassimo a spulciare l'output della fase di up della nostra macchina noteremo due synced folder: quella di default che punta alla directory di progetto (quella col Vagrantfile) e quella che punta ad src. Se volessimo sbarazzarci della prima utilizzeremo per questa la proprietà disabled, e il nostro Vagrantfile diventerebbe:
[...]
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "src", "/etc/src", create: true
[...]
Al successivo avvio della macchina vedremo solo la seconda synced folder. Eventuali altre proprietà utilizzabili sono elencate nella documentazione di Vagrant.