2013-11-05 57 views
1

我有幾類,其遵循的保證,修改一些配置文件,然後通知服務結構簡單。限制鏈收藏家當前類

於是我想出了一個辦法適用依賴性爲每個類以簡單的方式:

Package <| |> -> File <| |> ~> Service <| |> 

然而,一旦錯誤發生在一個類中,這也將打破所有其他類的依賴。顯然,鏈接集合並不適用於當前類的範圍,而是適用於範圍全局

有沒有辦法將其限制在當前班級?我不想回到每個資源手動指定依賴關係!

如下圖所示,所有服務都依賴於所有文件,而所有文件都依賴於所有的軟件包。

Generated without tags enabled

- 編輯 -

我想出了利用標籤(一類的資源,可以方便標有類名)的想法,但它沒有工作,要麼 - 事實上,它起到儘管類不存在

下面(通過查看木偶依賴圖驗證之後)的樣品測試清單我提出:

class foo { 
    package { 'php-fpm': 
     ensure => present, 
    } 

    file { '/tmp/php-fpm.log': 
     ensure => file, 
     content => "test", 
    } 

    service { 'php-fpm': 
     ensure => running, 
    } 

    Package <| tag == "foo" |> -> File <| tag == "foo" |> ~> Service <| tag == "foo" |> 
} 

class bar { 
    package { 'nginx': 
     ensure => present, 
    } 

    file { '/tmp/nginx.log': 
     ensure => file, 
     content => "test", 
    } 

    service { 'nginx': 
     ensure => running, 
    } 

    Package <| tag == "bar" |> -> File <| tag == "bar" |> ~> Service <| tag == "bar" |> 
} 

include foo, bar 

更奇怪的是,在下面的圖中的標籤基本上沒有什麼影響: Generated with tags enabled

回答

1

標籤不工作的原因是defect in puppet其中自動標籤沒有被應用,直到之後的資源收藏家進行評估。爲了使它與標籤一起工作,您實際上需要在每個資源上顯式聲明標籤。

另一種可以得到類似的方法是啓用Manifest Ordered Resources。這基本上按照它們在清單文件中的順序執行資源,並且將成爲未來puppet版本的默認行爲。

+0

哇,謝謝你背後這個奇怪的行爲的實際解釋! – xiankai