无法从环境生产源文件中检索信息:///

时间:2015-08-11 18:02:26

标签: puppet

我有一个像这样定义的木偶类:

ifelse(x %in% c("Sat", "Sun"), "Weekend", "Weekday")
# [1] "Weekday" "Weekday" "Weekday" "Weekday" "Weekday" "Weekend" "Weekend"

然后我定义了一个节点:

class etchostfile
(
  $hostfile
)
  file { $hostfile :
    ensure => file,
    source => "file:///var/www/cobbler/pub/hosts-${hostfile}.txt",
    path => '/root/hosts',
  }
}

我希望它获取文件node 'hostname.fqdn.com' { class { 'etchostfile' : hostfile => foo, } } 并将其安装到/var/www/cobbler/pub/hosts-foo.txt。但是我收到了这个错误:

/root/hosts

该文件存在,可读,并且每个通向它的目录至少为r-x。

我看到了这个错误适用于不正确的err: /Stage[main]/Etchostfile/File[foo]: Could not evaluate: Could not retrieve information from environment production source(s) file:///var/www/cobbler/pub/hosts-foo.txt 来源的一些原因,但我使用的是puppet:///来源。我也尝试在代理和主服务器上禁用SELinux。没有运气。

它在我的测试主机上运行正常,所以我认为这是一个防火墙问题。但是代理可以通过端口8140到达主服务器,并且我已经有了签名证书,看来我至少得到了一个目录,所以我不明白为什么我也无法获取文件。

2 个答案:

答案 0 :(得分:3)

看起来你正试图从木偶大师那里获取文件?在这种情况下,您需要使用puppet:// resource而不是file:// resource。

另外,请确保您在master上的文件服务器设置正常工作。

https://docs.puppetlabs.com/guides/file_serving.html#file-server-configuration

[编辑] 从上面链接的doc第一段开始:

  

如果文件资源声明在其源中包含puppet:URI   属性,节点将从主文件服务器

中检索该文件

另外,还有一些doc讨论文件源属性 https://docs.puppetlabs.com/references/latest/type.html#file-attribute-source

答案 1 :(得分:0)

如果您尝试引用本地文件(运行代理程序的节点的本地文件),则可以删除协议部分并使用:

file { $hostfile :
    ensure => file,
    source => "/var/www/cobbler/pub/hosts-${hostfile}.txt",
    path   => '/root/hosts',
}

如果您尝试访问puppet master上的文件,则需要使用puppet:///协议(而不是文件)。这将带来一些额外的限制:通常你不配置puppet文件服务来提供master上的所有文件(这将是一个安全问题),而只是提供作为puppet模块一部分的文件。

或者您可以使用没有逻辑的模板而不是文件:

file { $hostfile :
    ensure  => file,
    content => template("my_module/hosts-${hostfile}.txt.erb"),
    path    => '/root/hosts',
}

反直觉,但使用没有逻辑的模板往往会有更好的性能,试图使用Puppet进行文件服务。