是否可以从位于 vagrant 文件夹外部的 puppet 模块提供 vagrant boxes?

Is it possible to provision vagrant boxes from puppet modules located outside of the vagrant folder?

我有一个非常复杂的生产服务器架构,涉及多种类型和层级的服务器,包括:Web、Varnish、HAProxy、ELK、数据库、Sensu 等。生产架构配备了 puppet masters 和 puppet masters 的代码是通过许多子模块使用 Git 提供的。

我想将这些 Git 存储库连接到本地 VM,以进一步开发 puppet 架构的各个部分。然而,每个 Vagrant VM 都需要一份完整的自包含副本,包含所有 Git 存储库,以便仅支持一个 VM。这似乎是一种非常低效的驱动器 space 用于本地开发,可能会有十几种不同类型的服务器。

有没有办法将所有 Vagrant VM 的 VagrantFiles 指向 vagrant 目录之外的公共本地文件夹,以便每个 Vagrant 实例仍然可以读取该文件夹并配置服务器?

已编辑 --

根据@Treminio 的评论,这是我的 VagrantFile 的一部分,显示了从主机根目录声明绝对路径的尝试:

config.vm.provision "puppet" do |puppet|
  puppet.manifest_file = "init.pp"
  puppet.manifests_path = "/Users/jdugger/vm/puppet/manifests"
  puppet.module_path = "/Users/jdugger/vm/puppet/modules"
  puppet.hiera_config_path = "/Users/jdugger/vm/puppet/hieradata"
end

...以及 Vagrant 的错误响应:

==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /Users/jdugger/vm/pupt/vagrant
    default: /vagrant_data/scripts => /Users/jdugger/scripts
    default: /tmp/vagrant-puppet/modules-169f1d27ef31a534405e2e9fcde2eedf => /Users/jdugger/vm/puppet/modules
    default: /tmp/vagrant-puppet/manifests-be5a69bfb646cf9329b8921f221ffab8 => /Users/jdugger/vm/puppet/manifests
==> default: Running provisioner: puppet...
The `puppet` binary appears not to be in the PATH of the guest. This
could be because the PATH is not properly setup or perhaps Puppet is not
installed on this guest. Puppet provisioning can not continue without
Puppet properly installed.

此响应可能不是因为 puppet 路径 - 不确定 - 似乎 puppet 不在来宾框上(它不应该是来自 Vagrant 的 运行 吗?)。没有版本出现时:

[vagrant@localhost ~]$ puppet --version

响应是:

-bash: puppet: command not found

更新---

@Treminio 是正确的。我已经能够提供 vagrant/ 目录外部的 puppet 清单和模块。路径问题似乎是因为来宾 VM 上未安装 Puppet。为了解决这个问题,我在此处添加了一个 shell 脚本:

http://garylarizza.com/blog/2013/02/01/repeatable-puppet-development-with-vagrant/

这是在 Puppet 供应声明之前添加的。请注意,似乎没有很多高级示例可以演示外部文件功能,或者您需要在 puppet 提供程序之外安装 puppet。

However each Vagrant VM requires a complete self contained copy of all of the Git repos in order to stand up just one VM.

这是不正确的。

您要更改的是 puppet.module_path 值。

它可以是你主机磁盘上的任何位置,Vagrant 会自动将它挂载到你的 VM 中。