如何从模块中获取puppet清单中的文件

时间:2011-08-27 18:08:37

标签: ruby-on-rails manifest puppet vagrant

我正在尝试从puppet清单中的本地模块中获取文件(在独立模式下使用puppet):

file {
  '/home/repowt/.crontab':
    ensure => present,
    source => 'puppet:///modules/site/crontab';
}

但我明白了:

Could not evaluate: Could not retrieve information from source(s) ...

该文件位于:

config/puppet/modules/site/files/crontab

(通过vagrant provision调用puppet,Vagrantfile指定module_path ='config / puppet / modules',显然可以,因为puppet从那里加载了导入模块。)

我也尝试过:

source => 'puppet:///site/crontab'
source => 'site/crontab'
source => 'config/puppet/modules/site/files/crontab'
source => '/modules/site/crontab'

无济于事。我发现网上没有什么亮点,看起来很简单。 感谢您的帮助。

5 个答案:

答案 0 :(得分:20)

这里有几件事情。

首先,正如pwan所说,fileserver.conf需要正确设置。

请记住,/vagrant包含Vagrantfile所在的目录(因此包含所有内容),这对我来说意味着:

vm_config.vm.provision :puppet, :module_path => "modules", :options => ["--fileserverconfig=/vagrant/fileserver.conf", ]

我的fileserver.conf指定要使用/etc/puppet/files

虽然我可以为Vagrant指定一个不同的fileserver.conf,但我想要的一切都和平时一样。

所以,我也用

加载了/etc/puppet/files
vm_config.vm.share_folder "files", "/etc/puppet/files", "files"

哪些事情对我有用。

答案 1 :(得分:11)

puppet:///modules/my_module/file应与%vagrant_root%/modules/my_module/files/file

匹配

答案 2 :(得分:6)

我注意到Vagrant在目标VM上安装了它的dir副本(我正在使用base http://dl.dropbox.com/u/15307300/vagrant-0.7-centos-64-base.box);做一个“装载”,看看你是否也有这个。

这允许我在我的Vagrant中创建一个目录,与manifests /我称之为“files /”并行。然后我将配置源文件放在那里,例如,... / myvagrantproject / files / slapd.conf。它在VM上显示为/vagrant/files/slapd.conf

然后在文件源的puppet清单中,我将源列为绝对文件路径,而不是木偶服务器路径,如:

file { 'slapd.conf':
  name          => '/etc/openldap/slapd.conf',
  ensure        => present,
  source        => '/vagrant/files/slapd.conf',
  owner         => root,
  group         => ldap,
  mode          => 0640,
  require       => Package["ldapservers"],
}

它发现它自己的vbox安装的远程文件系统没有问题。

答案 3 :(得分:3)

您的原始puppet:// modules / site / crontab应该可以正常工作。

我怀疑你的puppetmaster上的fileserver.conf可能没有模块部分。如果它不存在,请尝试添加类似下面的内容。

[modules]
    allow *

查看http://docs.puppetlabs.com/guides/modules.html

上的“模块查找”部分

答案 4 :(得分:1)

如果您在独立模式或客户端 - 服务器模式下使用puppet,则从您的描述中不清楚。 假设您使用的是独立模式,请仔细检查vm中的/ tmp文件夹,查看模块文件夹是否确实存在,并且vagrant已经安装了它。 您可以加载清单的事实并不意味着模块也在那里。

您的原始配置看起来是正确的。