簡體   English   中英

無法從環境生產源文件中檢索信息:///

[英]Could not retrieve information from environment production source(s) file:///

我有一個像這樣定義的木偶類:

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 但是我收到了這個錯誤:

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

該文件存在,可讀,並且每個通向它的目錄至少為rx。

我看到了這個錯誤適用於錯誤的puppet:/// source的一些原因,但我使用的是file:/// source。 我也嘗試在代理和主服務器上禁用SELinux。 沒運氣。

它在我的測試主機上正常工作,所以我認為這是一個防火牆問題。 但代理可以通過端口8140到達主服務器,並且我已經有一個簽名證書,看來我至少得到了一個目錄,所以我不明白為什么我也無法獲取文件。

看起來你正試圖從你的木偶大師那里獲取文件? 在這種情況下,您需要使用puppet:// resource而不是file:// resource。

另外,請確保您在master上的文件服務器設置正常。

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

[編輯]從上面鏈接的doc第一段:

如果文件資源聲明在其source屬性中包含puppet:URI,則節點將從主文件服務器中檢索該文件

另外,還有一些doc討論文件源屬性https://docs.puppetlabs.com/references/latest/type.html#file-attribute-source

如果您嘗試引用本地文件(運行代理程序的節點的本地文件),則可以刪除協議部分並使用:

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

如果您嘗試訪問puppet master上的文件,則需要使用puppet:///協議(而不是文件)。 這將帶來一些額外的限制:通常你不配置puppet文件服務來提供主服務器上的所有文件(這將是一個安全問題),但僅用於提供作為puppet模塊一部分的文件。

或者您可以使用沒有邏輯的模板而不是文件:

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

這是違反直覺的,但是使用沒有邏輯的模板往往會有更好的性能,試圖使用Puppet進行文件服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM