2013-03-19 2 views
11
Puppet 2.7.19 
Vagrant version 1.0.6 
VM OS Ubuntu 12.04 

Я пытаюсь установить путь кукольного модуля из бродяг. Кажется, что это должно быть очень просто.vagrant puppet modulepath

В моем Бродячей файле у меня есть:

Vagrant::Config.run do |config| 
    config.vm.provision :puppet, :module_path => "my_modules" 
    config.vm.provision :puppet, :options => ["--modulepath", "my_modules"] 
end 

Когда я изменить значение ModulePath это, кажется, не имеют никакого эффекта (после vagrant reload)

Вот snipplet из vagrant up

[default] -- v-root: /vagrant 
[default] -- manifests: /tmp/vagrant-puppet/manifests 
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0 

Отметьте /tmp/vagrant-puppet/modules-0? О чем это?

Тогда из внутри бродяга:

[email protected]:~$ puppet apply --configprint modulepath 
/home/vagrant/.puppet/modules:/usr/share/puppet/modules 

Так что, когда я делаю: puppet module install puppetlabs/mysql

Я получаю эту ошибку:

Preparing to install into /home/vagrant/.puppet/modules ... 
Error: Could not install module 'puppetlabs-mysql' (latest) 
    Directory /home/vagrant/.puppet/modules does not exist 

Так что я должен:

[email protected]:~/.puppet$ mkdir /home/vagrant/.puppet/modules 
[email protected]:~/.puppet$ puppet module install puppetlabs/mysql 
Preparing to install into /home/vagrant/.puppet/modules ... 
Downloading from http://forge.puppetlabs.com ... 
Installing -- do not interrupt ... 
/home/vagrant/.puppet/modules 
└─┬ puppetlabs-mysql (v0.6.1) 
    └── puppetlabs-stdlib (v3.2.0) 

А потом я е, чтобы переместить модули в место, где бродяга может увидеть их ...

mv /home/vagrant/.puppet/modules/mysql /tmp/vagrant-puppet/modules-0 

Кажется, может быть, это ошибка, или я действительно что-то отсутствует. Кажется довольно простым, поэтому я хотел бы услышать, как другие решили это.

Спасибо!

+0

Vagrant предполагает, что он должен связывать ваши модули через общую папку VirtualBox в VM, чтобы модули существовали на хосте. Использование модуля Vagrant для модулей, хранящихся внутри виртуальной машины, может использовать то, что построены бродячие-генераторы для ... – cmur2

+0

Vagrant связывает каталог модулей внутри общей папки на vm. Кажется, он находится в '/ tmp/vagrant-puppet/modules-0'. Я пытаюсь заставить бродягу установить кукольный модуль-модуль, чтобы они совпадали. –

+0

Итак, вы хотите установить местоположение на хосте, где расположены ваши кукольные модули? – cmur2

ответ

12

Вы эффективно указать module_path дважды:

Vagrant::Config.run do |config| 
    config.vm.provision :puppet, :module_path => "my_modules" 
    config.vm.provision :puppet, :options => ["--modulepath", "my_modules"] 
end 

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

Я думаю, что лучше использовать поддержку vagrant для module_path в предпочтении массиву :options, как в вашей первой строке. Мне нравится следующий стиль лучше:

Vagrant::Config.run do |config| 
    ... 
    config.vm.provision :puppet do |puppet| 
    puppet.manifests_path = "manifests" 
    puppet.module_path = ["modules-contrib","modules-custom"] 
    puppet.manifest_file = "site.pp" 
    end # puppet 
end # config 

Вы спрашивали о /tmp/vagrant-puppet/modules-0. Это первый элемент массива modulepath, где 0 - это индекс массива. Т.е. в моем примере выше, каталоги и modules-custom из моего бродячего проекта устанавливаются на /tmp/vagrant-puppet/modules-0 и /tmp/vagrant-puppet/modules-1 соответственно.

Вы не должны устанавливать марионеточные модули внутри бродячего бокса. Вместо этого установите их в каталог модулей в своем бродяжном проекте в среде хоста.

Вместо того, чтобы устанавливать их один за другим, я бы рекомендовал использовать библиотечный кукольный (gem install librarian-puppet), и положить Puppetfile в вашем бродячего проекте, в котором перечислены все модули сторонних вы хотите, и говорит библиотекарь-марионетку, чтобы поместить их в отдельном каталоге модулей из того, который вы используете для своих собственных кукольных модулей. Я использую каталог modules-contrib для сторонних модулей, а также свой собственный в modules-custom.

Скажите библиотекарю, где поставить свои модули:

librarian-puppet config --local path modules-contrib 

https://github.com/rodjek/librarian-puppet См для компоновки Puppetfile. Это довольно просто, и позволяет вам смешивать куклу-кузницу и источники git, как вам нравится.

Вы должны добавить папку modules-contrib в ваш файл .gitignore (при условии, что вы используете git), и полагаться на управление версией файла Puppetfile.

+0

Спасибо за подробный ответ.Когда я получу шанс проверить это, и это сработает для меня, я приму свой ответ. –

+0

Так вы получили, чтобы проверить это? Если мой ответ хорош, отметьте его как принятый. – mc0e

6

Как читает из Vagrant Documentation:

The Vagrant Puppet provisioner allows you to mount a local folder of modules onto the VM, and will configure Puppet to be aware of them, automatically.

локальная папка относится к папке на хост-машине.

И потом:

The module path is expanded relative to the folder containing the Vagrantfile.

папку, содержащую VagrantFile на хост-машине.

Итак, вы пытаетесь использовать опцию, которая устанавливает путь к папке на главной машине, чтобы управлять контуром в папку на виртуальной машине.

Вы должны разместить свои модули на главной машине, а не на виртуальной машине.Вот пример:

HOST МАШИНА

~/Dev/mybox/-> базовый путь "mybox" Vagrant В.М.

~/Dev/mybox/VagrantFile -> Vagrant файл, который управляет "mybox"

~/Dev/mybox/кукольный/модули -> путь к марионеточных модулей, используемых на "mybox"

~/Dev/mybox/кукольный/модули/апач -> путь модуля апача для применения в «mybox»

VagrantFile:

# Enable puppet provisioning 
    config.vm.provision :puppet do |puppet| 
    puppet.module_path = "puppet/modules" 
    puppet.manifests_path = "puppet" 
    puppet.manifest_file = "mybox.pp" 
    end 

ВИРТУАЛЬНАЯ МАШИНА

Когда я начинаю mybox:

[default] Mounting shared folders... 
[default] -- v-root: /vagrant 
[default] -- manifests: /tmp/vagrant-puppet/manifests 
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0 

затем

[email protected]:~$ cd /tmp/vagrant-puppet/modules-0 
[email protected]:/tmp/vagrant-puppet/modules-0$ ls 
apache 

Как вы можете s ee каталог ~/Dev/mybox/puppet/modules/apache на главной машине был установлен на/tmp/vagrant-puppet/modules-0 на Vagrant VM.

Надеюсь, это поможет.

0

так, если вы похожи на меня и смотрели на этот вопрос и ответ, задаваясь вопросом, что было по-другому в вашем случае, вот что я пропал без вести:

С бродячих документов по инициализации я имел взял этот фрагмент:

config.vm.provision :puppet do |puppet| 
    puppet.manifests_path = "my_manifests" 
    puppet.manifest_file = "default.pp" 
end 

при попытке получить модуль, чтобы быть признанным в госте, я взял эту линию (вероятно, из here):

config.vm.provision :puppet, :module_path => "my_modules" 

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

Что делает работу, однако, заключается в следующем:

config.vm.provision :puppet do |puppet| 
    puppet.manifests_path = "my_manifests" 
    puppet.manifest_file = "default.pp" 
    puppet.module_path = "my_modules" 
end 

Иногда простые решения труднее всего найти.

[EDIT]

Это также помогает понять, что выполнив «кукольный применять --configprint ModulePath» команду на гостевой ВМ не покажет вам ModulePath, что марионетка будет использовать, когда вызывается Vagrant.

Смежные вопросы