2014-01-16 172 views
3

傳遞參數這是我剛纔的問題有關parameterized classes的後續。繼這個例子之後,我希望能夠通過運行或停止進入服務,但是當我將服務添加到一個框中時,我不使用「include poodle :: service」,我使用「include poodle 「Poodle需要安裝所有其他東西。木偶:通過類

所以,我可以通過變量一起到服務類這樣的:

# SITE.PP 
node 'tweedle.example.com' { 
    include basicstuff 
    include poodle 
} 
node 'beetle.example.com' { 
    include basicstuff 
    class { 'poodle': 
     $ensure => 'stopped' 
    } 
} 

## POODLE MODULE, manifests/init.pp 
class poodle ($ensure = 'running') { 
    class {'poodle::install': } 
    class {'poodle::config': } 
    class {'poodle::service': 
     ensure => $ensure 
    } 
    Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service'] 
} 

... 

class poodle::service ($ensure) { 
    service {'poodle': 
     ensure  => $ensure, 
     enable  => true, 
     restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start", 
     subscribe => File['/opt/poodle/poodle.py'], 
    } 
} 

或者我應該把參數直接在服務類和顯式調用這兩個貴賓級和像貴賓的服務類這樣的:

# SITE.PP 
node 'tweedle.example.com' { 
    include basicstuff 
    include poodle 
} 
node 'beetle.example.com' { 
    include basicstuff 
    include poodle 
    class { 'poodle::service': 
     $ensure => 'stopped' 
    } 
} 

## POODLE MODULE, manifests/init.pp 
class poodle { 
    class {'poodle::install': } 
    class {'poodle::config': } 
    class {'poodle::service': 
     ensure => $ensure 
    } 
    Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service'] 
} 

... 

class poodle::service ($ensure = 'running') { 
    service {'poodle': 
     ensure  => $ensure, 
     enable  => true, 
     restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start", 
     subscribe => File['/opt/poodle/poodle.py'], 
    } 
} 

或者是添加參數的服務類僅包含足夠的,因爲服務類有依賴性,就像這樣:

# SITE.PP 
node 'tweedle.example.com' { 
    include basicstuff 
    include poodle 
} 
node 'beetle.example.com' { 
    include basicstuff 
    class { 'poodle::service': 
     $ensure => 'stopped' 
    } 
} 

## POODLE MODULE, manifests/init.pp 
class poodle { 
    class {'poodle::install': } 
    class {'poodle::config': } 
    class {'poodle::service': 
     ensure => $ensure 
    } 
    Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service'] 
} 

... 

class poodle::service ($ensure = 'running') { 
    service {'poodle': 
     ensure  => $ensure, 
     enable  => true, 
     restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start", 
     subscribe => File['/opt/poodle/poodle.py'], 
    } 
} 

什麼是正確的道路,並在這裏的最佳實踐?提前致謝!

回答

4

一般情況下,你不希望人們必須瞭解你的模塊使用它的內部結構。

我當然不會要求他們包括poodlepoodle:service

模塊通常遵循兩種結構中的一種:

  • 單一入口點通過init.pp對於一些/沒有PARAMS和沒有獨立的角色 (客戶端/服務器)或「倍數」(如數據庫簡單的服務服務器可以有通過木偶 其配置多分貝的)

  • 通過子類多個入口點和定義類型的處理獨立角色和 倍數

根據你所描述的東西,我會放在參數主類,並通過它傳遞給服務子類。

+0

需要明確的是,公認的答案是通過對其他類的,我做到了傳遞價值和它的工作如預期。謝謝! – Spanky

2
node 'beetle.example.com' { 
    class { 'poodle::service': 
     ensure => 'stopped' 
    } 
} 

工程。

但我不同意說「你不想讓人們必須理解你的模塊的內部結構」,你需要靈活性來創建虛擬主機來定義什麼端口,協議,後端代理+和應該使用什麼模塊等。 我沒有看到我的項目如何通過編寫include apache,nginx等來實現這種靈活性。