Кредиты: Этот пост в значительной степени основан на ответе Акумрия в StackOverflow: как получить файл в манифесте кукол из модуля.
Включение Puppet Standalone в Vagrant для разрешения кукол: ///…
Краткая информация:
- Сделайте каталог с файлами для обслуживания доступными для Vagrant VM
- Создайте fileserver.conf, чтобы сообщить Puppet о каталоге
- Расскажите марионетке о файле server.conf
- Используй это
1. Сделайте каталог с файлами для обслуживания доступными для Vagrant VM
Например, как общая папка:
|
1
2
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left"># Snippet of <vagrant directory>/Vagrantfile</span> # Фрагмент <каталога vagrant> / Vagrantfile</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">config.vm.share_folder "PuppetFiles", "/etc/puppet/files", "./puppet-files-symlink"</span> config.vm.share_folder "PuppetFiles", "/ etc / puppet / files", "./puppet-files-symlink"</span> |
(В моем случае это фактически символическая ссылка на фактическую папку в нашем репозитории puppet git. Помните, что символические ссылки внутри общих папок часто не работают, и поэтому лучше использовать символическую ссылку в качестве отдельного корневого каталога общих папок.)
Обратите внимание, что вам не нужно объявлять общую папку
2. Создайте fileserver.conf, чтобы сообщить Puppet о каталоге
Вы должны сообщить Puppet, что исходный код «puppet: /// files /» должен быть подан из / etc / puppet / files /:
|
1
2
3
4
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left"># <vagrant directory>/fileserver.conf</span> # <каталог vagrant> /fileserver.conf</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">[files]</span> [файлы]</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">path /etc/puppet/files</span> путь / etc / puppet / files</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">allow *</span> позволять *</span> |
3. Расскажите марионетке о файле server.conf
Puppet должен знать, что он должен прочитать файл fileserver.conf:
|
1
2
3
4
5
6
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left"># Snippet of <vagrant directory>/Vagrantfile</span> # Фрагмент <каталога vagrant> / Vagrantfile</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">config.vm.provision :puppet,</span> config.vm.provision: puppet,</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">:options => ["--fileserverconfig=/vagrant/fileserver.conf"],</span> : options => ["--fileserverconfig = / vagrant / fileserver.conf"],</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">:facter => { "fqdn" => "vagrant.vagrantup.com" } do |puppet|</span> : facter => {"fqdn" => "vagrant.vagrantup.com"} do | puppet |</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">...</span> ...</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">end</span> конец</span> |
4. Используйте это
|
1
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">vagrant_dir$ echo "dummy content" > ./puppet-files-symlink/example-file.txt</span> vagrant_dir $ echo "фиктивный контент"> ./puppet-files-symlink/example-file.txt</span> |
|
1
2
3
4
5
6
7
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left"># Snippet of <vagrant directory>/manifests/<my manifest>.pp</span> # Фрагмент <каталога vagrant> / manifest / <мой манифест> .pp</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">...</span> ...</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">file{'/tmp/example-file.txt':</span> Файл { '/ TMP / пример-file.txt':</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">ensure => file,</span> обеспечить => файл,</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">source => 'puppet:///files/example-file.txt',</span> source => 'puppet: ///files/example-file.txt',</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">}</span> }</span><span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">...</span> ...</span> |
Предостережения
URL с именем сервера (puppet: // puppet /) не работают
URL-адреса, такие как puppet: // puppet / files / path / to / file, не работают, вместо этого вы должны использовать puppet: /// files / path / to / file (пустой, то есть неявный, имя сервера => три слеша). Я полагаю, что причина в том, что если вы прямо указали имя сервера, Puppet попытается найти сервер и получить оттуда файлы (это может быть желательным, если вы запускаете Puppet Master локально или где-то еще; в этом случае просто добавьте имя сервера / etc / hosts в Vagrant VM или убедитесь, что используемый DNS-сервер может его разрешить). С другой стороны, если вы не указали имя сервера и полагались на неявное значение, Puppet в автономном режиме свяжется с файлом fileserver.conf и будет вести себя соответствующим образом. (Обратите внимание, что в режиме сервер-клиент неявное имя сервера равно хозяину puppet, т.е. puppet: /// там работает очень хорошо.)
Если вы используете puppet: // puppet / files /…, вы получите ошибку, подобную этой:
|
1
2
3
|
<span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">err: /Stage[main]/My_example_class/File[fetch_cdn_logs.py]: Could not evaluate:</span> err: /Stage[main]/My_example_class/File[fetch_cdn_logs.py]: не удалось оценить:</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">getaddrinfo: Name or service not known Could not retrieve file metadata for puppet://puppet/files/analytics/fetch_cdn_logs.py:</span> getaddrinfo: Имя или служба не известны. Не удалось получить метаданные файла для кукол: //puppet/files/analytics/fetch_cdn_logs.py:</span> <span class="notranslate" onmouseover="_tipon(this)" onmouseout="_tipoff()"><span class="google-src-text" style="direction: ltr; text-align: left">getaddrinfo: Name or service not known at /tmp/vagrant-puppet/manifests/analytics_dev.pp:283</span> getaddrinfo: имя или служба, неизвестные по адресу /tmp/vagrant-puppet/manifests/analytics_dev.pp:283</span> |
Среда
Кукольный: 2.7.14, Бродяга: 1.0.2
Ссылка: подача файлов с помощью Puppet Standalone в Vagrant От марионетки: // URI от нашего партнера JCG Якуба Холи в блоге Holy Java .