Кредиты: Этот пост в значительной степени основан на ответе Акумрия в 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 .