在不同目录之间共享一个Vagrant实例

时间:2014-01-29 08:57:39

标签: vagrant

我有一些具有不同Mercurial历史的目录,我正在并行处理。它们都具有相同的Vagrant文​​件,因此对所有这些文件只使用一个实例是很自然的。 但是当我在新目录中运行“vagrant up”时,它会从链接现有VM,设置环境等开始。 如何在不同目录之间共享Vagrant实例?

更新:我的目录结构:

\
 Vagrantfile
 puppet
  *.pp
 support
  nginx.conf
  uwsgi.development.ini
 other_repo_related_files_and_dirs

2 个答案:

答案 0 :(得分:5)

好吧,如果你想与同一个Vagrant实例共享一些目录,你可以配置Vagrantfile。

这是一个示例有两个VM(应用和网络),使用相同的框(ubuntu-12.04)相同的Vagrantfile 。每个实例都有两个文件夹(VM的一个文件夹)。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define 'app' do |app_config|
    app_config.vm.box = 'ubuntu-12.04'
    app_config.vm.host_name = 'app'
    app_config.vm.network "private_network", ip: "192.168.33.33"
    app_config.vm.synced_folder "app_config", "/app_config"    
  end
  config.vm.define 'web' do |web_config|
    web_config.vm.box = 'ubuntu-12.04'
    web_config.vm.host_name = 'web'
    web_config.vm.network "private_network", ip: "192.168.33.34"
    web_config.vm.synced_folder "web_config", "/web_config"
  end  
end

应用计算机有一个 app_config 文件夹,网络计算机有一个 web_config 文件夹(这些文件夹是在Vagrantfile文件的同一级别。)。

使用vagrant ssh命令进入每个VM时,您可以看到每个文件夹。 这是应用程序机器。

roberto@rcisla-pc:~/Desktop/multiple$ vagrant ssh app
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Mon Jan 27 13:46:36 2014 from 10.0.2.2
vagrant@app:~$ cd /app_config/
vagrant@app:/app_config$ ls
app_config_file

这是进入网络机器。

roberto@rcisla-pc:~/Desktop/multiple$ vagrant ssh web
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
Welcome to your Vagrant-built virtual machine.
Last login: Mon Jan 27 13:47:12 2014 from 10.0.2.2
vagrant@web:~$ cd /web_config/
vagrant@web:/web_config$ ls
web_config_file
vagrant@web:/web_config$

这是我的目录的结构。

.
├── **app_config**
│   └── *app_config_file*
├── attributes
├── Berksfile
├── Berksfile.lock
├── chefignore
├── definitions
├── files
│   └── default
├── Gemfile
├── libraries
├── LICENSE
├── metadata.rb
├── providers
├── README.md
├── recipes
│   └── default.rb
├── resources
├── templates
│   └── default
├── test
│   └── integration
│       └── default
├── Thorfile
├── Vagrantfile
├── Vagrantfile~
└── **web_config**
    └── *web_config_file*

我希望这对你有所帮助。

答案 1 :(得分:1)

在这里大声思考。不确定它是否是满足您需求的解决方案。

如果你设置这样的目录结构

/Main
  /projects
    /mercurial_history_1 
    /mercurial_history_2
    /mercurial_history_3
  /puppet
  /modules
  /manifests
    default.pp
  Vagrantfile

我不确定您正在运行哪种项目,但是如果您正在运行apache webserver。您可以为VM中的每个mercurial项目指定单独的vhost。因此,您可以将DocumentRoot指向特定的mercurial项目。

对于此解决方案,您必须在Vagrantfile中添加以下行

config.vm.network "private_network", ip: "22.22.22.11" <- Just an example IP

然后在您的主机上,您可以使用IP和相应的vhostname servername更新hosts文件。这是一个更多的工作,但你可以使用配置器添加虚拟主机,使生活更轻松;)

通过这种方式,您只运行一个运行您的mercurial项目的VM