2015-04-23 99 views
0

木偶版本 - 3.7.5木偶優先.yaml文件

你好

我試圖用木偶和Hiera YAML文件使用數組停止一些服務,我得到的問題是隨機。這對我來說會導致一個錯誤,它不會停止服務,因爲有其他服務依賴於它。所以這裏是我的Hiera文件的結構:

server::services: 
    - 'WAS' 
    - 'DNS' 
    - 'IISADMIN' 
    - 'NetPipeActivator' 
    ... 

所以,當我跑我的傀儡劑,通過每個服務的它成功地循環並停止他們,但對於一些人來說,希望我們想要的服務和所有的確認關聯的服務結束。我得到這個錯誤:

The following services are dependent on the windows Process Activation 
Service service. Stopping the Windows Process Activation Service service 
will also stop these services. 

Net.pipe Listener Adapter 

Do you want to continue the operation? (Y/N)[N]: 
No valid response was provided. 

它然後錯誤,並跳過該服務,並繼續與其餘。我的第一個想法是在我的yaml文件中包含Net.pipe服務,但在WAS之上,因此它會在停止WAS之前停止它。但Puppet每次都會隨機執行列表。

也在這裏是我的清單文件:

Class windows::services{ 

    $windowsservices = [hiera_array('server::services')] 


    service {$windowsservices: 
    ensure => "stopped", 
    enable => manual, 
    } 
} 

有沒有辦法解決?我正在考慮使用訂購箭頭 - >'但據我所知,它們不能在Hiera陣列中使用。

在此先感謝:)

回答

0

Hiera將默認返回數組以未定義的順序。一旦在Puppet中有數據,您可以使用PuppetLabs-stdlib函數sort()對它們進行排序。

但是,做一個書法排序可能會隱藏你的問題,但不解決它。你的實際問題是你沒有模擬Puppet中的服務之間的關係。你有什麼是依賴於其他服務的服務,你應該反映使用relationships

這將使您的清單更加詳細,但它將是「正確的」。

class windows::services { 
    service { 'WAS': 
    ensure => stopped, 
    enable => manual, 
    } 
    service { 'NetPipeActivator': 
    ensure => stopped, 
    enable => manual, 
    before => Service['WAS'], 
    } 
} 

你也可以做到這一點,但是這是一個糟糕的主意,因爲它假定的資源來自Hiera。如果他們不這樣做,這將導致一個明顯的編譯錯誤:

class windows::services { 
    $windowsservices = [hiera_array('server::services')] 
    service { $windowsservices: 
    ensure => stopped, 
    enable => manual, 
    } 
    Service['NetPipeActivator'] -> Service['WAS'] 
} 

如果您存儲要在Hiera停止它可能是簡單類型的服務,但你必須在任何順序的控制。