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

Próbuję ustawić ścieżkę modułu kukiełkowego z włócznika. Co wydaje się być bardzo proste.moduł lalek dla wahadłowych

W moim Vagrant pliku mam:

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

Kiedy zmienić wartość ModulePath wydaje się mieć żadnego wpływu (po vagrant reload)

Oto snipplet z vagrant up

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

Uwaga /tmp/vagrant-puppet/modules-0? O czym to jest?

Następnie od wewnątrz włóczęgi:

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

Więc kiedy zrobić: puppet module install puppetlabs/mysql

otrzymuję ten błąd:

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

więc muszę:

[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) 

A potem mam hav e przenieść moduły w miejscu, gdzie można je zobaczyć włóczęga ...

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

Wydaje się, być może jest to błąd czy ja naprawdę czegoś brakuje. Wydaje się dość prosty, więc chciałbym usłyszeć, jak inni to rozwiązali.

Dzięki!

+0

Vagrant zakłada, że ​​powinien on łączyć twoje moduły za pośrednictwem folderu współdzielonego VirtualBox z maszyną wirtualną, tak aby moduły istniały na hoście. Używanie narzędzia Vagrant do modułów przechowywanych w VM może wykorzystywać to, co budowniczowie vagrantów są budowani dla ... – cmur2

+0

Vagrant łączy katalog modułów w folderze współdzielonym na vm. Wygląda na to, że znajduje się w '/ tmp/vagrant-puppet/modules-0' Staram się, by włóczęga ustawił" modułampat "kukiełki, żeby pasowały do ​​siebie. –

+0

Chcesz ustawić lokalizację na hoście, w którym znajdują się moduły lalkowe? – cmur2

Odpowiedz

12

Ty skutecznie określając module_path dwukrotnie:

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

Nie jestem pewien, co skończyć przesłanianie innych, ale nie powinno być określenie ścieżki modułu w obu kierunkach.

Myślę, że lepiej jest użyć obsługi vagrant dla ścieżki modułu zamiast kolumny :options, jak w pierwszym wierszu. Jeszcze lepiej podoba mi się ten styl:

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 

Zapytałeś o numer /tmp/vagrant-puppet/modules-0. Jest to pierwszy element w tablicy modułów modułów, gdzie 0 jest indeksem tablicy. W moim przykładzie powyżej katalogi modules-contrib i modules-custom z mojego projektu vagrant zostaną zamontowane odpowiednio pod numerami /tmp/vagrant-puppet/modules-0 i /tmp/vagrant-puppet/modules-1.

Nie powinieneś instalować modułów lalek w pudełku dla włóczęgów. Zamiast tego zainstaluj je w katalogu modułów w swoim projekcie pośrednika w środowisku hosta.

Zamiast instalować je jeden po drugim, polecam używanie librarskiej lalki (gem install librarian-puppet) i wstawienie Puppetfile do twojego projektu włóczęgi, który zawiera listę wszystkich modułów stron trzecich, i mówi marionetce bibliotekarza, aby je umieścić w oddzielnym katalogu modułów od tego, którego używasz do swoich niestandardowych modułów lalkowych. Używam katalogu modules-contrib dla modułów stron trzecich i umieszczam własne w modules-custom.

Powiedz bibliotekarza gdzie umieścić swoje moduły:

librarian-puppet config --local path modules-contrib 

Zobacz https://github.com/rodjek/librarian-puppet dla układu Puppetfile. Jest to bardzo proste i pozwala łączyć źródła lalek-kuźnia i git, jak tylko chcesz.

Powinieneś dodać folder modules-contrib do swojego pliku .gitignore (zakładając, że używasz git) i polegać na kontroli wersji pliku Puppetfile.

+0

Dziękujemy za szczegółową odpowiedź.Kiedy dostanę szansę, aby przetestować to i to działa dla mnie, przyjmuję twoją odpowiedź. –

+0

Więc udało ci się to przetestować? Jeśli moja odpowiedź jest dobra, proszę oznaczyć ją jako zaakceptowaną. – mc0e

6

Jak się czyta z 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.

folder lokalny odnosi się do folderu na komputerze hosta.

A potem:

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

folderu zawierającego VagrantFile jest na komputerze hosta.

Próbujesz użyć opcji, która ustawia ścieżkę do folderu na komputerze hosta, aby kontrolować ścieżkę do folderu na maszynie wirtualnej.

Musisz umieścić swoje moduły na hoście, a nie na VM.Oto przykład:

HOST MASZYNA

~/dev/mybox/-> ścieżka podstawowa "myBOX" Vagrant VM

~/mybox/VagrantFile Dev/-> plik Vagrant który kontroluje "mybox"

~/dev/mybox/puppet/moduły -> ścieżka do modułów lalkowych używanych na "myBOX"

~/dev/mybox/puppet/moduły/apache -> ścieżka modułu apache do zastosowania w "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 

Virtual Machine

Kiedy zacznę mybox:

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

następnie

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

jak można s ee katalog ~/Dev/mybox/puppet/modules/apache na komputerze-hoście został zamontowany w/tmp/vagrant-puppet/modules-0 na maszynie Vagrant VM.

Mam nadzieję, że to pomoże.

0

więc, jeśli jesteś podobny do mnie i zostały patrząc na to pytanie i odpowiedź, zastanawiając się, co było inaczej w przypadku, oto co zostało brakuje:

Z wędrujących docs na zasilenie miałem podniósł ten fragment:

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

starając się dostać moduł powinien być ujmowany w gościa, Podniosłem tę linię (prawdopodobnie z here):

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

nie bardzo dobrze znając ruby ​​lub włóczęgę, umieściłem to pod pierwszym fragmentem, zakładając, że w jakiś sposób do niego doda. To nie zadziałało.

Co robi pracy, jednak jest to:

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

Czasami proste rozwiązania są najtrudniejsze do znalezienia.

[EDIT]

Pomaga również zrozumieć, że odtworzył „marionetką zastosować --configprint ModulePath” polecenia na gościa VM nie pokaże ModulePath że kukiełka będzie używać, gdy jest ona wywoływana przez Vagrant.

Powiązane problemy