2014-05-05 123 views
2

我正在使用puppet在雲基礎架構上自動提供服務器。 我將我的清單分成幾個.pp's。木偶依賴於其他文件中的其他文件

我有以下錯誤:

Could not find dependency Mehc_module::Filestructure::File[/someFolder/someSubFolder]

相關部分:

filestructure.pp

class mehc_module::filestructure{ 
file { 
     "/someFolder/someSubFolder": 
      ensure => link, 
      owner => $mehc_module::users::WEBLOGIC_UID, 
      group => $mehc_module::users::WEBLOGIC_GID, 
      target => "/opt/user_projects", 
      require => UserDefinedFolder["/someFolder"]; 
    } 

packages.pp

class mehc_module::packages{ 
    require mehc_module::filestructure 

    ... 
    mehc_repo::package { "${common11rpm}" : 
    ensure => present, 
    require => [ 
     Mehc_module::Filestructure::File["/someFolder/someSubFolder"] 
    ]; 
    } 
} 

爲什麼它給我錯誤?

回答

5

您的資源參考結構不正確。您只想要

require => File["/someFolder/someSubFolder"] 

資源引用不考慮清單上下文。即使他們願意,資源的「完整路徑」也是Class[mehc_module::filestructure]/File["/someFolder/someSubFolder"]。但那也行不通。

純引用File["/someFolder/someSubFolder"]就足夠了,因爲每個資源只能在整個清單(包括所有模塊)中定義一次。

注意,它常常是一個更好的做法,只是

require => Class["mehc_module::filestructure"] 

,因爲這將意味着上述關係(「依賴於類聲明的所有資源」)不佔用的mehc_module::packages實施,實施細則mehc_module::filestructure

這個規則的一個明顯例外是您所依賴的類聲明瞭大量資源,從而導致圖的複雜性(帶有性能影響)以及依賴循環的高度危險性。 Anchor Pattern有助於這些情況。