Можно ли подготовить бродячие ящики из кукольных модулей, расположенных за пределами бродячей папки?

У меня довольно сложная архитектура производственного сервера, включающая несколько типов и уровней серверов, в том числе: Web, Varnish, HAProxy, ELK, Database, Sensu и т. д. Рабочая архитектура снабжена мастерами марионеток, а код кукол для мастеров обеспечивается Git через множество подмодулей.

Я хочу подключить эти репозитории Git к виртуальным машинам локально для дальнейшей разработки частей кукольной архитектуры. Однако для каждой виртуальной машины Vagrant требуется полная автономная копия всех репозиториев Git, чтобы поддерживать только одну виртуальную машину. Это похоже на очень неэффективное использование дискового пространства для локальной разработки, которая потенциально может состоять из дюжины различных типов серверов.

Есть ли способ указать все VagrantFiles Vagrant VM в общую локальную папку за пределами каталога 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.

Этот ответ может быть не из-за пути марионетки - не уверен - похоже, что марионетка не находится в гостевом ящике (разве она не должна работать из Vagrant?). Никакая версия не появляется, когда с:

[vagrant@localhost ~]$ puppet --version

Ответ:

-bash: puppet: command not found

Обновлять ---

@Треминио прав. Мне удалось предоставить кукольные манифесты и модули, внешние по отношению к каталогу vagrant/. Проблема с путем, по-видимому, связана с тем, что Puppet не установлен на гостевой виртуальной машине. Чтобы решить эту проблему, я добавил сценарий оболочки, найденный здесь:

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

Это было добавлено непосредственно перед объявлением подготовки марионетки. Просто в качестве примечания, похоже, не так много продвинутых примеров, которые демонстрируют возможность работы с внешними файлами или что вам нужно установить марионетку вне средства подготовки кукол.


person jhd3    schedule 02.02.2016    source источник
comment
Хорошо, спасибо за исправление моего понимания. Мне удалось заставить путь работать, чтобы найти каталоги за пределами каталога vagrant/. Проблемы с путями, которые у меня были, были связаны с тем, что на гостевой виртуальной машине не был установлен Puppet. Я установил марионетку на виртуальную машину с помощью сценария оболочки, прежде чем объявить подготовку марионетки. Это неясно в документации Vagrant и Puppet на соответствующих сайтах.   -  person jhd3    schedule 04.02.2016


Ответы (1)


Однако для каждой виртуальной машины Vagrant требуется полная автономная копия всех репозиториев Git, чтобы поддерживать только одну виртуальную машину.

Это неправильно.

Что вы хотите изменить, так это значение puppet.module_path.

Это может быть любое место на диске вашего хоста, и Vagrant автоматически смонтирует его внутри вашей виртуальной машины.

person Juan Treminio    schedule 02.02.2016