2017-04-07 52 views
1

(更新)我在原始問題中忽略了一行重要的代碼。如何確保服務在執行Exec資源之前重新啓動?

我寫了一個將創建本地存儲的傀儡模塊。這是不自動的方式。

  1. 編輯/etc/multipath.conf文件
  2. 重新啓動在multipathd守護
  3. 執行pvcreate將$設備
  4. 執行的vgcreate $ VOLUME_NAME $設備

所以在我的木偶模塊I如果/etc/multipath.conf文件更改,則要確保multipathd守護進程重新啓動。所以我用這種方式寫了我的傀儡表。

Service['multipathd'] -> Anchor['create_storage_volume::begin'] 

... 

file { '/etc/multipath.conf': 
    ensure => file, 
    content => template('local_storage::hadoop/multipath.conf.erb'), 
    owner => 'root', 
    mode => '0600', 
    notify => Service['multipathd'], 
} -> 
service { 'multipathd': 
    enable => true, 
    ensure => running, 
} 

anchor { 'create_storage_volume::begin': } -> 

exec { "pvcreate ${device}": 
    path => ['/usr/sbin', '/bin'], 
    unless => "pvs | grep ${"volume_name}, 
} -> 
exec { "vgcreate ${volume_name} ${device}": 
    path => ['/usr/sbin', '/bin'], 
    unless => "pvs | grep ${"volume_name}, 
} -> # -> do nova config stuff 
anchor { 'create_storage_volume::end': } 

... 

我的問題是,「做上面的代碼保證了在multipathd守護程序被執行pvcreate和運行vgcreate指令執行前重新啓動」?我是否需要添加更多類似資源的訂單...

Service['multipathd'] -> Anchor['local_storage::begin'] 

回答

3

我的問題是,「上述代碼是否確保multipathd守護程序在執行pvcreate和vgcreate命令之前重新啓動」?

號都Service['multipathd']Exec["pvcreate ${device}"]File['/etc/multipath.conf']後,你提出什麼樣的服務和Exec的應用的相對順序應用,但一無所獲。

我可能會寫這樣的,而不是:

file { '/etc/multipath.conf': 
    ensure => file, 
    content => template('local_storage::hadoop/multipath.conf.erb'), 
    owner => 'root', 
    mode => '0600', 
} ~> 
Service['multipathd'] -> 
exec { "pvcreate ${device}": 
    path => ['/usr/sbin', '/bin'], 
    unless => "pvs | grep ${"volume_name}, 
} -> 
# ... 

注意使用the notifying chain operator;這是Puppet語言的一個較少使用的特性。


關於更新的問題,對於Service關鍵的要求到Exec之前被刷新被施加的是,有兩者之間的順序關係,不論是直接或傳遞的。在修改後的問題中,所涉及的資源已經存在這種關係。

原始答案確實在這裏有一個很好的點,我在評論中提到:當資源刷新發生時,Puppet實際上沒有明確記錄相對於其他任何事情。記錄的語義對此有一些暗示,但沒有給出任何堅定的規則。在實踐中,通過Puppet 4,如果發生資源刷新,它將在資源同步後立即發生 - 或者在它需要同步後立即發生。

+0

謝謝你的回答。我有幾個問題。我在我原來的問題中忽略了這一行:Service ['multipathd'] - > Anchor ['create_storage_volume :: begin'](我會更新我的問題),但確保服務multipathd在我之前重新啓動Exec資源執行? –

+0

從技術上講,Puppet的文檔沒有明確說明資源刷新的時間。在實踐中,在當前和歷史版本的Puppet中,如果資源要刷新,那麼它將在它(或將要)同步之後立即執行。 –

+0

@RedCricket我唯一的補充建議是檢查Puppet的'lvm'模塊。 –

相關問題