Получение файлов Puppet извне модулей

Я устанавливаю пакет из модуля (в данном конкретном случае Nginx) и хотел бы включить файл конфигурации извне модуля, то есть из каталога files верхнего уровня, параллельного каталогу manifests верхнего уровня. Я не вижу никакого способа получить файл без включения его в модуль или в мою текущую среду Vagrant со ссылкой на абсолютный локальный путь.

Позволяет ли Puppet получать файлы извне модулей, как описано в документации?


person bennylope    schedule 01.03.2012    source источник


Ответы (3)


если я правильно понимаю ваш вопрос, вы можете. В вашем модуле такой простой код

file { '/path/to/file':
    ensure => present,
    source => [
               "puppet:///files/${fqdn}/path/to/file",
               "puppet:///files/${hostgroup}/path/to/file",
               "puppet:///files/${domain}/path/to/file",
               "puppet:///files/global/path/to/file",
    ],
}

сделает работу. Источником /path/to/file будет файл, расположенный в общей папке Puppet «files». (в приведенном выше примере он ищет в 4 разных местах).

обновить, возможно, вы говорите о каталоге для хранения файлов, который не используется файловым сервером Puppet (см. http://docs.puppetlabs.com/guides/file_serving.html), и в этом случае вы не можете думать, Vagrant или нет, но вы можете добавить его в свой Puppet файловый сервер для этого. Я думаю, что это лучший (и, возможно, единственный) способ сделать это.

person daks    schedule 21.03.2012

Если у вас есть несколько виртуальных машин Vagrant, вы можете просто хранить файлы в каталоге проекта Vagrant (содержащем ваш VagrantFile). Этот каталог обычно доступен для всех виртуальных машин как /vagrant внутри виртуальной машины при ее создании.

Если вы хотите, чтобы другие каталоги на вашем компьютере были доступны для ваших виртуальных машин, просто добавьте следующее в свой VagrantFile

# see http://docs.vagrantup.com/v1/docs/config/vm/share_folder.html
config.vm.share_folder "v-packages", "/vagrant_packages", "../../dpkg"

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

# bad example, bub basically use 'source => 'file:///vagrant/foo/bar'
file { '/opt/cassandra':
    ensure  => directory,
    replace => true,
    purge   => true,
    recurse => true,
    source  => 'file:///vagrant/conf/dist/apache-cassandra-1.2.0',
}

Вероятно, это целесообразно делать только в том случае, если вы используете только локальные манифесты/модули марионеток.

person StuartW    schedule 01.03.2013

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

Включите такие вещи в свой Vagrantfile...

GUEST_PROVISIONER_CONFDIR = "/example/destination/path"
HOST_PROVISIONER_CONFDIR  = "/example/source/path"
config.vm.synced_folder HOST_PROVISIONER_CONFIDIR, GUEST_PROVISIONER_CONFDIR
puppet.options = "--fileserverconfig='#{GUEST_PROVISIONER_CONFDIR}/fileserver.conf'"

Затем убедитесь, что /example/source/path содержит указанный файл fileserver.conf. Это должно выглядеть примерно так...

[foo]
  path /example/destination/path
  allow *

Теперь, предполагая, что файл example-file.txt существует в /example/source/path, в ваших манифестах будет работать следующее:

source  => "puppet:///foo/example-file.txt",

Видеть:

  1. Справочная запись конфигурации Puppet для fileserverconfig
  2. Обслуживание файлов из настраиваемых точек монтирования
person RH Becker    schedule 06.09.2013